diff --git a/TRANSLATING.md b/TRANSLATING.md
index 9c9afc8b5..92a051c70 100644
--- a/TRANSLATING.md
+++ b/TRANSLATING.md
@@ -13,6 +13,8 @@ The process of contributing to the translation of the guide is similar to the pr
```{translation-graph}
```
+The translation status graph updates every time the book is build with translations. You can see the status of the translations by going to [this link](https://www.pyopensci.org/python-package-guide/TRANSLATING)
+
## Overview of the Translation Process
The process of adapting software to different languages is called internationalization, or i18n for short. Internationalization makes sure that translation can happen without having to modify the source code, or in our case, the original English source files of the guide.
@@ -32,22 +34,29 @@ Here is a quick overview of how the translation process works:
You don't need to understand the technical details to contribute, but if you are interested in learning how Sphinx handles internationalization and localization, you can find more information [here](https://www.sphinx-doc.org/en/master/usage/advanced/intl.html).
```
-## Setting up Your Local Environment
+## Two Ways to Contribute a Translation
-Before you start, you will need to set up your local work environment.
+There are two ways to contribute a translation, and the first one does not require you to install anything on your computer.
-First, fork the guide repository into your personal GitHub account and clone the forked repository to your local computer.
+**From the GitHub website.** Translation files are plain text, so you can edit them right in your browser. Fork the repository, edit a `.po` file in your fork, and open a pull request. This is the best place to start if this is your first open source contribution. The contributing guide walks through the browser workflow in [Contributing via the GitHub website](CONTRIBUTING.md#contributing-via-the-github-website). Once you have a fork, you can skip ahead to [Editing the Translation Files](#editing-the-translation-files).
-To create a virtual environment and install the development dependencies for the guide, run the following commands:
+**From a local copy on your computer.** This takes more setup, but it lets you check how much of a file is translated with `sphinx-intl stat` and preview the translated guide in your browser before you open a pull request. Choose this if you plan to translate a lot of strings or want to see your work in context.
-```shell
-$ cd ./python-package-guide
-$ python -m venv .venv
-$ source .venv/bin/activate
-$ pip install '.[dev]'
-```
+### Setting up Your Local Environment
+
+You only need this if you chose the second approach above.
+
+Setting up to translate is no different from setting up to contribute anything else to the guide, so rather than repeat the steps here, follow these sections of the contributing guide in order:
-TODO: This section needs more work or to be replaced with a reference to the CONTRIBUTING guide.
+1. [Forking the repository](CONTRIBUTING.md#forking-the-repository)
+2. [Clone your forked repository](CONTRIBUTING.md#clone-your-forked-repository)
+3. [Create a new branch](CONTRIBUTING.md#create-a-new-branch)
+4. [Create a virtual environment](CONTRIBUTING.md#create-a-virtual-environment), which gives the commands for both Windows and macOS/Linux
+5. [Install the development dependencies](CONTRIBUTING.md#install-the-development-dependencies)
+
+```{note}
+Installing the development dependencies is what makes `sphinx-intl` and `nox` available in your environment. Both are used later in this guide: `sphinx-intl` reports how much of each file has been translated, and `nox` builds the guide so you can preview your work.
+```
## Starting a New Language Translation
@@ -57,16 +66,14 @@ If you plan to work on an existing translation, you can skip this step and go di
If you would like to start the translation of the guide into a new language, start by [creating an issue](https://github.com/pyOpenSci/python-package-guide/issues) in the repository.
```
-To generate the translation files for a new language, add the language to the `LANGUAGES` list in the `conf.py` configuration file. [Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to manage the building of the guide and its translations.
+To generate the translation files for a new language, add the language to the `languages` list in the `conf.py` configuration file. [Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to manage the building of the guide and its translations, and it reads this list from `conf.py`.
-Inside `noxfile.py`, find the `LANGUAGES` list and add the corresponding two-letter code. For example, if you want to start the translation of the guide into French, you would add `'fr'`:
+Inside `conf.py`, find the `languages` list and add the corresponding two-letter code. For example, if you want to start the translation of the guide into French, you would add `'fr'`:
```python
-## Localization options (translations)
-
-# List of languages for which locales will be generated in (/locales/)
-LANGUAGES = ["es", "fr"]
-
+# all languages that have .po files generated for them
+# (excluding english)
+languages = ["es", "ja", "pt", "fr"]
```
```{note}
@@ -80,12 +87,12 @@ The translation files contain the original English text and a space for you to e
You can do this by running the following command, replacing LANG by the language code you plan to work on (e.g., `es` for Spanish):
```shell
-$ nox -s update-language -- LANG
+nox -s update-language -- LANG
```
This command will create the translation files if they don't exist yet, or update them with the latest changes if they already exist.
-The translation files are text files with the `.po` extension stored in the `./locales`, in folders corresponding to each language. For example, the translation files for Spanish are stored in the `locale/es/LC_MESSAGES` directory.
+The translation files are text files with the `.po` extension stored in `./locales`, in folders corresponding to each language. For example, the translation files for Spanish are stored in the `locales/es/LC_MESSAGES` directory.
Because the translation files map the original English text to translated text, they are sometimes referred to as "catalog" files or "portable object" files.
@@ -95,7 +102,7 @@ You don't need to know all the details about the PO format in order to translate
## Working on a Translation
-In order to start translating, go to the folder inside `./locales` corresponding to the target language you want to translate to (for example, `./locale/es/LC_MESSAGES/` for the Spanish translation).
+In order to start translating, go to the folder inside `./locales` corresponding to the target language you want to translate to (for example, `./locales/es/LC_MESSAGES/` for the Spanish translation).
In this folder you will find a set of `.po` files, corresponding to the different sections of the guide:
@@ -103,13 +110,15 @@ In this folder you will find a set of `.po` files, corresponding to the differen
$ cd ./locales/es/LC_MESSAGES/
$ ls *.po
-./locales/es/LC_MESSAGES/CONTRIBUTING.po
-./locales/es/LC_MESSAGES/index.po
-./locales/es/LC_MESSAGES/tests.po
-./locales/es/LC_MESSAGES/tutorials.po
-./locales/es/LC_MESSAGES/documentation.po
-./locales/es/LC_MESSAGES/package-structure-code.po
-./locales/es/LC_MESSAGES/TRANSLATING.po
+continuous-integration.po
+CONTRIBUTING.po
+documentation.po
+index.po
+maintain-automate.po
+package-structure-code.po
+tests.po
+TRANSLATING.po
+tutorials.po
```
```{note}
@@ -231,7 +240,7 @@ Once you finished translating or when you want to check the translation in conte
nox -s build-language -- LANG
```
-This command will build all the translated versions of the guide defined in the `LANGUAGES` list in `noxfile.py`. These translations will be stored in the `_build/html`, in folders named after the language code (e.g., `es`, `fr`, etc.).
+This command builds a single translated version of the guide: the one for LANG. The result is stored in `_build/html`, in a folder named after the language code (e.g., `es`). If you want to build every language at once instead, use `nox -s build-all-languages`.
To view the translated version of the guide in your browser, open the corresponding `index.html` file. For example, to view the Spanish translation, you would open `_build/html/es/index.html`.
@@ -259,8 +268,8 @@ You can follow these steps:
nox -s build-all-languages-test
```
-2. Make sure there are no warnings or errors in the output. If there are, you will need to fix them before submitting the PR.
-3. Make sure the translated version of the guide looks good in the browser by opening the `_build/html//index.html` file, where `` is the language you have been working on.
+1. Make sure there are no warnings or errors in the output. If there are, you will need to fix them before submitting the PR.
+2. Make sure the translated version of the guide looks good in the browser by opening the `_build/html//index.html` file, where `` is the language you have been working on.
If everything looks good, you can submit a PR with your changes.
@@ -288,9 +297,9 @@ When the editor is satisfied with the translation, they will merge the PR. The t
## The Release Process
-If a language is ready to go live, the maintainers will add the language code to the `RELEASE_LANGUAGES` list in the `noxfile.py` configuration file.
+If a language is ready to go live, the maintainers will add the language code to the `release_languages` list in the `conf.py` configuration file.
-When the guide is built for release in CI, Sphinx will also generate the translated versions of the guide for the languages in the `RELEASE_LANGUAGES` list.
+When the guide is built for release in CI, Sphinx will also generate the translated versions of the guide for the languages in the `release_languages` list.
Translations are released in the same way as the English version of the guide, and the translated versions will be available in folders named after the language code. For example, the Spanish translation will be available at: `https://www.pyopensci.org/python-package-guide/es/` when it is published online.
@@ -302,7 +311,7 @@ When you run the `sphinx-intl stat` command, you will see a list of `.po` files
### What happens when a string has changed in the original English text?
-If a string has changed in the original English version, it will be marked as `fuzzy` in the translation file the next time it is updated (`update-language`, `update-all-languages`, or `update-all-release-languages`). Contributors working on the translation can then review the fuzzy entries and make the necessary changes to ensure it is accurate, before removing the `fuzzy` tag.
+If a string has changed in the original English version, it will be marked as `fuzzy` in the translation file the next time it is updated (`update-language` or `update-release-languages`). Contributors working on the translation can then review the fuzzy entries and make the necessary changes to ensure it is accurate, before removing the `fuzzy` tag.
### How do I handle links in the translated text?
@@ -339,7 +348,7 @@ If you want to start a new translation of the guide into a language that is not
### How do I know when a translation is ready to be released?
-When a translation is ready to be included in the next release of the guide, the maintainers will add the language code to the `RELEASE_LANGUAGES` list in the `noxfile.py` configuration file. This will trigger the build of the translation during the release process, and the translated version of the guide will be available on the pyOpenSci website.
+When a translation is ready to be included in the next release of the guide, the maintainers will add the language code to the `release_languages` list in the `conf.py` configuration file. This will trigger the build of the translation during the release process, and the translated version of the guide will be available on the pyOpenSci website.
TODO: There are many approaches here, some projects release a translation as soon as some strings are translated, others wait until a certain percentage of the content is translated.
diff --git a/_ext/translation_graph.py b/_ext/translation_graph.py
index 65cda4057..90fb0a507 100644
--- a/_ext/translation_graph.py
+++ b/_ext/translation_graph.py
@@ -1,37 +1,24 @@
import json
from pathlib import Path
-from typing import TYPE_CHECKING, TypeAlias, TypedDict
-from typing import Annotated as A
+from typing import TYPE_CHECKING
import numpy as np
import plotly.graph_objects as go
-from babel.messages import pofile
from docutils import nodes
from docutils.parsers.rst import Directive
from plotly.offline import plot
+# Note: this import relies on the fact that conf.py puts the repository root on sys.path,
+# so this resolves as a namespace package needing any __init__.py.
+from scripts.translation.stats import (
+ get_po_files,
+ get_translation_stats,
+)
+
if TYPE_CHECKING:
from sphinx.application import Sphinx
-BASE_DIR = Path(__file__).resolve().parent.parent # Repository base directory
-LOCALES_DIR = BASE_DIR / "locales" # Locales directory
-STATIC_DIR = BASE_DIR / "_static" # Static directory
-
-
-class ModuleStats(TypedDict):
- total: int
- translated: int
- fuzzy: int
- untranslated: int
- percentage: float
-
-
-TranslationStats: TypeAlias = dict[
- A[str, "locale"], dict[A[str, "module"], ModuleStats]
-]
-
-
class TranslationGraph(Directive):
# Tells Sphinx that this directive can be used in the document body
# and has no content
@@ -49,7 +36,15 @@ class TranslationGraph(Directive):
"""
def run(self):
- data = get_translation_stats()
+ # Declare the dependency on .po files explicitly so incremental
+ # builds (nox -s docs, docs-live) do not use the cached
+ # doctree with stale numbers in it.
+ env = self.state.document.settings.env
+ for po_file in get_po_files():
+ env.note_dependency(str(po_file))
+
+ # English is the reference row (100% by definition); the script adds it.
+ data = get_translation_stats(include_english=True)
# Sort data by locale and module
data = {
@@ -57,19 +52,6 @@ def run(self):
for locale, loc_stats in sorted(data.items())
}
- # prepend english, everything set to 100%
- en = {
- module: ModuleStats(
- total=stats["total"],
- translated=stats["total"],
- fuzzy=stats["total"],
- untranslated=0,
- percentage=100,
- )
- for module, stats in next(iter(data.values())).items()
- }
- data = {"en": en} | data
-
# Calculate average completion percentage for each locale and sort locales
locale_completion = {
locale: np.mean([stats["percentage"] for stats in loc_stats.values()])
@@ -171,98 +153,6 @@ def run(self):
return [nodes.raw("", div, format="html")]
-def calculate_translation_percentage(po_path: Path, locale: str) -> ModuleStats:
- """
- Calculate the translation percentage for a given .po file.
-
- Parameters
- ----------
- po_path : Path
- Path to the .po file.
- locale : str
- Locale code (e.g., 'es', 'fr').
-
- Returns
- -------
- dict
- A dictionary containing the total number of strings, translated strings,
- fuzzy strings, untranslated strings, and the translation percentage.
- """
- with open(po_path, "r", encoding="utf-8") as f:
- catalog = pofile.read_po(f, locale=locale)
-
- total = 0
- translated = 0
- fuzzy = 0
-
- for message in catalog:
- if message.id:
- total += 1
- # Check if the message is fuzzy
- # Fuzzy messages are not considered translated
- if message.fuzzy:
- fuzzy += 1
- break
- # Check if the message is translated
- if message.string:
- translated += 1
-
- percentage = (translated / total * 100) if total > 0 else 0
-
- return {
- "total": total,
- "translated": translated,
- "fuzzy": fuzzy,
- "untranslated": total - translated - fuzzy,
- "percentage": round(percentage, 2),
- }
-
-
-def get_translation_stats() -> TranslationStats:
- # Get all .po files in the locales directory
- po_files = list(LOCALES_DIR.rglob("*.po"))
-
- # Let's use a dictionary to store the results
- #
- # We will store the info as
- # {
- # "es": {
- # "file1": {
- # "total": 100,
- # "translated": 50,
- # "fuzzy": 0,
- # "untranslated": 50,
- # "percentage": 50.0
- # },
- # ...
- # },
- # "fr": {
- # "file1": {
- # "total": 100,
- # "translated": 50,
- # "fuzzy": 0,
- # "untranslated": 50,
- # "percentage": 50.0
- # },
- # ...
- # }
- results = {}
-
- # Calculate translation percentages for each file
- for po_file in po_files:
- # Get the locale from the file path
- locale = po_file.parent.parent.name
- stats = calculate_translation_percentage(po_file, locale)
-
- # Store the results in the dictionary
- if locale not in results:
- results[locale] = {}
-
- results[locale][po_file.stem] = stats
-
- return results
-
-
def write_translation_stats(app: "Sphinx", exception: Exception | None) -> None:
from sphinx.util import logging
diff --git a/conf.py b/conf.py
index ffc4e2deb..b5d88d981 100644
--- a/conf.py
+++ b/conf.py
@@ -12,11 +12,13 @@
#
import os
import sys
-sys.path.insert(0, os.path.abspath('.'))
-from datetime import datetime
-import subprocess
+
+sys.path.insert(0, os.path.abspath("."))
import os
+import subprocess
+from datetime import datetime
from typing import TYPE_CHECKING
+
from _ext import rss
if TYPE_CHECKING:
@@ -42,10 +44,10 @@
language = language_env
# all languages that have .po files generated for them
# (excluding english)
-languages = ["es", "ja", "pt"]
+languages = ["es", "ja", "pt", "el", "bg", "it", "de"]
# the languages that will be included in a production build
# (also excluding english)
-release_languages = ["ja"]
+release_languages = ["es", "ja", "pt", "it"]
# languages that will be included in the language dropdown
# (ie. all that are being built in this nox build session)
@@ -146,7 +148,7 @@
"github_url": "https://github.com/pyopensci/python-package-guide",
"footer_start": ["code_of_conduct", "copyright"],
"footer_end": [],
- "navbar_persistent": ["language-selector", "search-button"]
+ "navbar_persistent": ["language-selector", "search-button"],
}
html_context = {
@@ -165,6 +167,7 @@
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = [
+ "scripts",
"_build",
"Thumbs.db",
".DS_Store",
@@ -182,7 +185,7 @@
"venv",
"env",
"LICENSE.rst",
- "SECURITY.md"
+ "SECURITY.md",
]
# For sitemap generation
@@ -211,7 +214,15 @@
# Bibliographies
bibtex_bibfiles = ["bibliography.bib"]
# myst complains about bibtex footnotes because of render order
-suppress_warnings = ["myst.footnote"]
+suppress_warnings = [
+ "myst.footnote",
+ # Suppress false positives for translated :term: references. When a
+ # translator correctly translates a glossary term in the target language
+ # (e.g. "Code of conduct" to "código de conducta"), Sphinx still warns
+ # because it is different from the English original, despite the fact that
+ # the translated term is properly defined in the glossary.
+ "i18n.inconsistent_references",
+]
# -- Options for linkcheck -------------------------------------------------
@@ -228,6 +239,7 @@
r"https:\/\/discord\.gg/NQtTTqtv",
]
+
def _post_build(app: "Sphinx", exception: Exception | None) -> None:
rss.generate_tutorials_feed(app)
diff --git a/examples/pure-hatch/.github/workflows/release.yml b/examples/pure-hatch/.github/workflows/release.yml
index 17d2fb040..1d141cd18 100644
--- a/examples/pure-hatch/.github/workflows/release.yml
+++ b/examples/pure-hatch/.github/workflows/release.yml
@@ -14,11 +14,11 @@ jobs:
permissions:
contents: read # this job only needs read access
steps:
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- name: Setup Python
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
+ uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.12" # Select the version that you want to build your package on
- name: Upgrade pip, install Hatch, and check Hatch version
@@ -50,4 +50,4 @@ jobs:
with:
name: dist.zip
path: dist/
- - uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
diff --git a/locales/bg/LC_MESSAGES/CONTRIBUTING.po b/locales/bg/LC_MESSAGES/CONTRIBUTING.po
new file mode 100644
index 000000000..ac175a6d1
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/CONTRIBUTING.po
@@ -0,0 +1,920 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../CONTRIBUTING.md:4
+msgid "Contributing to the Python Packaging Guide"
+msgstr "Как да допринесете към Ръководството за Python пакети"
+
+#: ../../CONTRIBUTING.md:6
+msgid "The guide is a community resource."
+msgstr "Това ръководство е ресурс на общността"
+
+#: ../../CONTRIBUTING.md:8
+msgid "TL;DR"
+msgstr "TL;DR"
+
+#: ../../CONTRIBUTING.md:10
+msgid "We welcome contributions in the form of issues and pull requests:"
+msgstr "Приветстваме приноси под формата на issues и pull requests:"
+
+#: ../../CONTRIBUTING.md:12
+msgid ""
+"If you have an idea for something that should be included in the guide, "
+"[please open an issue here](https://github.com/pyOpenSci/python-package-"
+"guide/issues)."
+msgstr ""
+"Ако имате идея за нещо, което трябва да бъде добавено в ръководството, "
+"[моля, отворете issue тук](https://github.com/pyOpenSci/python-package-"
+"guide/issues)."
+
+#: ../../CONTRIBUTING.md:13
+msgid ""
+"If you find a typo, feel free to [submit a pull "
+"request](https://github.com/pyOpenSci/python-package-guide/pulls) to "
+"modify the text directly. Or, if you are less comfortable with pull "
+"requests, feel free to open an issue."
+msgstr ""
+"Ако откриете правописна грешка, моля, [отворете pull "
+"request](https://github.com/pyOpenSci/python-package-guide/pulls), за да "
+"промените текста директно. Или, ако не се чувствате достатъчно уверерени в това, "
+"моля, вдигнете issue."
+
+#: ../../CONTRIBUTING.md:14
+msgid ""
+"If you are interested in helping translate the guide into other "
+"languages, take a look at the [translation guide](./TRANSLATING.md)."
+msgstr ""
+"Ако желаете да помогнете с превода на ръководството на други "
+"езици, вижте [Ръководството за превод](./TRANSLATING.md)."
+
+#: ../../CONTRIBUTING.md:15
+msgid ""
+"If you want to see a larger change to the content of the guide book, "
+"please submit an issue first!"
+msgstr ""
+"Ако искате да направите по-голяма промяна в съдържанието на ръководството, "
+"моля, първо вдигнете issue!"
+
+#: ../../CONTRIBUTING.md:17
+msgid ""
+"If you are unsure about how to contribute or are not familiar with git "
+"and github, this guide will help you through the process."
+msgstr ""
+"Ако не сте сигурни как да допринесете или не сте запознати с git "
+"и GitHub, това ръководство ще ви помогне с процеса."
+
+#: ../../CONTRIBUTING.md:19
+msgid "How the Python Packaging Guide is structured"
+msgstr "Как е структурирано Ръководството за Python пакети"
+
+#: ../../CONTRIBUTING.md:21
+msgid ""
+"The Python Packaging Guide is written in myST (a variant of MarkDown and "
+"rST) and we use **Sphinx**, a documentation engine built in `Python` to "
+"build the HTML version you see online."
+msgstr ""
+"Ръководството за Python пакети е написано на myST (вариант на MarkDown и "
+"rST) и използваме **Sphinx**, engine за документация с `Python`, за да "
+"създадем HTML версията, която виждате online."
+
+#: ../../CONTRIBUTING.md:23
+msgid "We use a tool called Nox to manage the process of building the guide."
+msgstr "Използваме инструмент, наречен Nox, за управление на процеса по изграждане на ръководството."
+
+#: ../../CONTRIBUTING.md:25
+msgid "Two approaches to contributing"
+msgstr "Два подхода за допринасяне"
+
+#: ../../CONTRIBUTING.md:27
+msgid "You can contribute to the guide using two approaches."
+msgstr "Можете да допринесете към ръководството чрез следните два подхода."
+
+#: ../../CONTRIBUTING.md:29
+msgid ""
+"The first approach is using a local copy of the guide in your computer. "
+"This option requires a more involved setup, but allows you to build the "
+"guide locally to verify your contribution did not introduce any bugs "
+"before submitting a pull request. It is the recommended approach for "
+"larger contribution, like writing a whole new section."
+msgstr ""
+"Първият подход е да иползвате локално копие на ръководството на Вашия компютър. "
+"Тази опция изисква по-сложна настройка, но ще Ви позволи да създадете "
+"ръководството локално, за да проверите дали приносът Ви не е добавил бъгове, "
+"преди да направите pull request. Това е препоръчителния подход за "
+"по-големи приноси като написването на напълно нова секция."
+
+#: ../../CONTRIBUTING.md:31
+msgid ""
+"The second approach is making your contribution directly in the GitHub "
+"website. This option does not require any setup on your computer and "
+"while your contribution will still be tested when you submit a PR "
+"(continuous integration), it will take longer for you to get any feedback"
+" in case of issue. It is the best way to make small contribution, like "
+"fixing typos, or if this is your first contribution to open source and "
+"the first approach feels too intimidating."
+msgstr ""
+"Вторият подход е да направите приноса директно чрез уебсайта на "
+"Github. Тази опция не изисква никакви настройки на Вашия компютър и, "
+"въпреки че приносът все пак ще бъде тестван, когато направите PR "
+"(continuous integration), ще отнеме по-дълго време да получите обратна връзка"
+" в случай на проблем. Този подход е най-добрият начин да направите малък принос като "
+"поправяне на правописни грешки или в случай че това е Вашият пръв принос към отворен код "
+"и първият подход Ви се струва твърде заплашителен."
+
+#: ../../CONTRIBUTING.md:33
+msgid "Forking the repository"
+msgstr "Форкване на хранилището"
+
+#: ../../CONTRIBUTING.md:35
+msgid ""
+"Independently of the approach you choose, the first step is to fork the "
+"Python Packaging Guide repository into your personal GitHub space. You "
+"can do this by clicking the \"Fork\" button in the top right corner of "
+"the repository page."
+msgstr ""
+"Независимо кой подход изберете, първата стъпка е да форкнете "
+"Ръководството за Python пакети във Вашето лично GitHub пространство. Можете "
+"да направите това, като кликнете върху \"Fork\" бутона в горния десен ъгъл на "
+"страницата на хранилището."
+
+#: ../../CONTRIBUTING.md:38
+msgid ""
+"[Learn more: Fork and Clone GitHub "
+"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
+"clone/) is a good resource to learn more about forking."
+msgstr ""
+"[Learn more: Fork and Clone GitHub "
+"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
+"clone/) е добър ресурс, с който да научите повече за форкването."
+
+#: ../../CONTRIBUTING.md:40
+msgid "To fork a repo,"
+msgstr "За да форкнете хранилище,"
+
+#: ../../CONTRIBUTING.md:42
+msgid "Make sure you are logged into GitHub."
+msgstr "уверете се, че сте се логнали в GitHub."
+
+#: ../../CONTRIBUTING.md:44
+msgid ""
+"Go to the repo you would like to fork, in this case the [Python Packaging"
+" Guide](https://github.com/pyopensci/python-package-guide) repo."
+msgstr ""
+"Отидете на хранилището, което бихте искали да форкнете, в случая хранилището"
+" [Python Packaging Guide](https://github.com/pyopensci/python-package-guide)."
+
+#: ../../CONTRIBUTING.md:46
+msgid ""
+"In the top right-hand corner of the page there is a 'Fork' button. Click "
+"that button. You will be brought to a new page where you will 'Create a "
+"new fork'. Feel free to keep all the default inputs and click 'Create "
+"fork'. This will create a copy of the repo at "
+"`https://github.com//python-package-guide`, where `` "
+"is your GitHub username."
+msgstr ""
+"В горния десен ъгъл на страницата има 'Fork' бутон. Натиснете "
+"този бутон. Това ще ви доведе до нова страница с функция за 'Create a "
+"new fork'. Можете да оставите настройките по подразбиране. Натиснете 'Create "
+"fork'. Това ще създаде копие на хранилището с адрес "
+"`https://github.com//python-package-guide`, където `` "
+"е Вашето потребителско име в GitHub."
+
+#: ../../CONTRIBUTING.md:51
+msgid "Contributing via the GitHub website"
+msgstr "Допринасяне чрез уебсайта на GitHub"
+
+#: ../../CONTRIBUTING.md:53
+msgid "How to edit a MarkDown file"
+msgstr "Как да редактирате MarkDown файл"
+
+#: ../../CONTRIBUTING.md:55
+msgid ""
+"The Python Packaging Guide is written in myST, a variant of MarkDown. You"
+" can edit the files directly in the GitHub website. To do so, navigate to"
+" the file you want to edit and click the pencil icon in the top right "
+"corner of the file."
+msgstr ""
+"Ръководството за Python пакети е написано на myST, вариант на Markdown."
+" Можете да редактирате файловете директно на уебсайта на GitHub. За да направите това,"
+" отидете на файла, който искате да редактирате, и кликнете върху иконката с молива в горния десен "
+"ъгъл на файла."
+
+#: ../../CONTRIBUTING.md:58
+msgid "Edit button in GitHub"
+msgstr "Бутонът за редактиране в GitHub"
+
+#: ../../CONTRIBUTING.md:64
+msgid ""
+"An image showing how to edit a file in GitHub. The pencil icon is "
+"highlighted with a red rectangle."
+msgstr ""
+"Изображение, покаващо как да редактирате файл в GitHub. Иконката с молива е "
+"оградена с червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:66
+msgid "Edit file in GitHub"
+msgstr "Редактиране на файл в GitHub"
+
+#: ../../CONTRIBUTING.md:72
+msgid ""
+"An image showing when a file is being edited in GitHub. The file content "
+"is displayed in a text editor."
+msgstr ""
+"Изображение, показващо кога файл бива редактиран в GitHub. Съдържанието на файла "
+"е показано в текстовия редактор."
+
+#: ../../CONTRIBUTING.md:75
+msgid "To preview your changes, click the \"Preview changes\" tab."
+msgstr "За да прегледате промените си, кликнете върху \"Preview changes\" таба."
+
+#: ../../CONTRIBUTING.md:77
+msgid "Preview changes in GitHub"
+msgstr "Преглед на промените в GitHub"
+
+#: ../../CONTRIBUTING.md:83
+msgid ""
+"An image showing how to preview changes in GitHub. The file content is "
+"displayed in a text editor. The preview changes tab is highlighted with a"
+" red rectangle."
+msgstr ""
+"Изображение, показващо как да прегледаме промени в GitHub. Съдържанието на файла "
+"е показано в текстовия редактор. Табът за преглед на промените е ограден с"
+" червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:86
+msgid "How to commit your changes"
+msgstr "Как да запишете промените си"
+
+#: ../../CONTRIBUTING.md:88
+msgid ""
+"When you are done editing the file, scroll down to the bottom of the "
+"page. You will see a section called \"Commit changes\". Here you can "
+"write a title and a description for your changes. Make sure to write a "
+"clear and concise title that describes the changes you made."
+msgstr ""
+"Когато приключите с промените по файл, отидете най-отдолу на "
+"страницата. Ще видите секция, озаглавена \"Commit changes\". Тук можете "
+"да напишете заглавие и описание на Вашите промени. Уверете се, че сте "
+"написали ясно и сбито заглавие, което описва направените от Вас промени."
+
+#: ../../CONTRIBUTING.md:91
+msgid "Commit changes in GitHub"
+msgstr "Записване на промени в GitHub"
+
+#: ../../CONTRIBUTING.md:97
+msgid ""
+"An image showing how to commit changes in GitHub. The commit message is "
+"displayed in a text editor. The commit changes section is highlighted "
+"with a red rectangle."
+msgstr ""
+"Изображение, показващо как да запишем промени в GitHub. Commit съобщението е "
+"показано в текстовия редактор. Commit changes секцията е оградена с "
+"червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:100
+msgid ""
+"After writing your commit message, click the \"Commit changes\" button to"
+" save your changes."
+msgstr ""
+"След като напишете своето commit съобщение, кликнете \"Commit changes\" бутона,"
+"за да запазите своите промени."
+
+#: ../../CONTRIBUTING.md:102
+msgid "Contributing locally on your computer"
+msgstr "Как да допринесете локално чрез Вашия компютър"
+
+#: ../../CONTRIBUTING.md:104
+msgid "Clone your forked repository"
+msgstr "Клониране на форкнатото хранилище"
+
+#: ../../CONTRIBUTING.md:106
+msgid ""
+"To clone your forked repository to your computer, you need to copy the "
+"URL of your forked repository and run the following command in your "
+"terminal:"
+msgstr ""
+"За да клонирате форкнатото хранилище на Ваши компютър, трябва да копирате "
+"URL-а на форкнатото хранилището и да изпълните следната команда във Вашия "
+"терминал:"
+
+#: ../../CONTRIBUTING.md:111
+msgid ""
+"Replace `` with the URL of your forked repository. You can find the "
+"URL by clicking the green \"Code\" button on your forked repository page."
+msgstr ""
+"Заместете `` с URL-а на Вашето форкнато хранилище. Може да намерите "
+"URL-а, като кликнете зеления \"Code\" бутон на страницата на Вашето форкнато хранилище."
+
+#: ../../CONTRIBUTING.md:113
+msgid "Clone repository in GitHub"
+msgstr "Клониране на хранилището в GitHub"
+
+#: ../../CONTRIBUTING.md:119
+msgid ""
+"An image showing how to clone a repository in GitHub. The URL of the "
+"repository is displayed in a text editor. The code button is highlighted "
+"with a red rectangle."
+msgstr ""
+"Изображение, показващо как се клонира хранилище в GitHub. URL-ът на "
+"хранилището е показан в текстовия редактор. Code бутонът е ограден "
+"с червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:122
+msgid "Create a new branch"
+msgstr "Създаване на нов branch"
+
+#: ../../CONTRIBUTING.md:124
+msgid ""
+"Before making any changes, you should create a new branch to work on. "
+"This will help keep your changes separate from the main branch and make "
+"it easier to submit a pull request."
+msgstr ""
+"Преди да направите промени, трябва да създадете нов branch, на който да работите. "
+"Това ще ви пмогне да поддържате промените си отделно от main branch-а и да "
+"улесните вдигането на pull request."
+
+#: ../../CONTRIBUTING.md:126
+msgid "To create a new branch, run the following command in your terminal:"
+msgstr "За да създадете нов бранч, изпълнете следните команди във Вашия терминал:"
+
+#: ../../CONTRIBUTING.md:132
+msgid "Create a virtual environment"
+msgstr "Създаване на виртуална среда"
+
+#: ../../CONTRIBUTING.md:134
+msgid ""
+"To build the guide locally, you need to create a virtual environment and "
+"install the dependencies. You can do this by running the following "
+"commands in your terminal:"
+msgstr ""
+"За да създадете ръководството локално, трябва да създадете виртуална среда и "
+"да инслирате необходимите пакети. Можете да направите това, като изпълните следните "
+"коамнди в терминала си:"
+
+#: ../../CONTRIBUTING.md:136
+msgid "**On Windows**:"
+msgstr "**На Windows**:"
+
+#: ../../CONTRIBUTING.md:142
+msgid "**On MacOS and Linux**:"
+msgstr "**На MacOS и Linux**:"
+
+#: ../../CONTRIBUTING.md:148
+msgid "Install the development dependencies"
+msgstr "Инсталиране на пакетите за разработка"
+
+#: ../../CONTRIBUTING.md:150
+msgid ""
+"To install the development dependencies, run the following command in "
+"your terminal:"
+msgstr ""
+"За да инсталирате пакетите за разработка, изпълнете следната команда във "
+"Вашия терминал:"
+
+#: ../../CONTRIBUTING.md:156
+msgid "Commit your changes"
+msgstr "Записване на Вашите промени"
+
+#: ../../CONTRIBUTING.md:158
+msgid ""
+"After making your changes, you need to commit them to your local "
+"repository. To do this, run the following commands in your terminal:"
+msgstr ""
+"След като направите промените си, трябва да ги запишете във Вашето локално "
+"хранилище. За да направите това, изпълнете следните команди в терминала си:"
+
+#: ../../CONTRIBUTING.md:160
+msgid "To see the changes you made:"
+msgstr "За да видите направените от Вас промени:"
+
+#: ../../CONTRIBUTING.md:164
+msgid "To add the changes to the staging area:"
+msgstr "За да добавите промените към staging пространството на git:"
+
+#: ../../CONTRIBUTING.md:168
+msgid "To commit the changes:"
+msgstr "За да запишете промените:"
+
+#: ../../CONTRIBUTING.md:172
+msgid ""
+"Replace `\"Your commit message here\"` with a clear and concise message "
+"that describes the changes you made."
+msgstr ""
+"Заместете `\"Your commit message here\"` с ясно и сбито съобщение, "
+"описващо направените от Вас промени."
+
+#: ../../CONTRIBUTING.md:174
+msgid "How to build the guide locally"
+msgstr "Как да изградите ръководството локално"
+
+#: ../../CONTRIBUTING.md:176
+msgid ""
+"To build the guide locally, you can use the `nox` command. This will run "
+"the default `nox` session, which builds the guide and opens it in your "
+"browser."
+msgstr ""
+"За да изградите ръководството локално, можете да използвате `nox` командатата. Тя ще "
+"създаде `nox` сесия по подразбиране, която изгражда ръководството и го отваря във Вашия "
+"браузър."
+
+#: ../../CONTRIBUTING.md:178
+msgid ""
+"To see the different sessions available, you can run the following "
+"command in your terminal:"
+msgstr ""
+"За да видите различните сесии, които са достъпни, можете да изпълните следната "
+"команда във Вашия терминал:"
+
+#: ../../CONTRIBUTING.md:183
+msgid ""
+"There are different sessions in nox related to building the docs: `docs`,"
+" `docs-test`, `docs-live`. You can run them by specifying the session "
+"name after the `nox` command."
+msgstr ""
+"В nox има различни сесии, свързани с изграждането на документацията: `docs`,"
+" `docs-tests`, `docs-live`. Можете да ги изпълните, като посочите името на "
+"сесията след `nox` командата."
+
+#: ../../CONTRIBUTING.md:185
+msgid "`docs`: this session builds the guide and opens it in your browser."
+msgstr "`docs`: тази сесия изгражда ръководството и го отваря въш Вашия браузър"
+
+#: ../../CONTRIBUTING.md:189
+msgid ""
+"To see the guide built locally, open the file `_build/html/index.html` in"
+" your browser."
+msgstr ""
+"За да видите изграденото локално ръководство, отворете файла `_build/thml/index.thml` във"
+" вашия браузър."
+
+#: ../../CONTRIBUTING.md:191
+msgid "`docs-linkcheck`: this session checks that links in documentation work"
+msgstr "`docs-linkcheck`: тази сесия проверява, че линковете в документацията работят"
+
+#: ../../CONTRIBUTING.md:195
+msgid ""
+"If the tests fail, you will see logs in the terminal and in "
+"`_build/linkcheck_output/output.txt`."
+msgstr ""
+"Ако тестовете се провалят, ще видите логовете в терминала и в "
+"`_build/linkcheck_output/output.txt`."
+
+#: ../../CONTRIBUTING.md:197
+msgid "`docs-test`: this session runs the tests for the guide."
+msgstr "`docs-test`: тази сесия изпълнява тестовете в ръководството."
+
+#: ../../CONTRIBUTING.md:201
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request."
+msgstr ""
+"Ако тестовете се провалят, ще видите съобщение за грешка в терминала си. Трябва "
+"да поправите грешките, преди да направите pull request."
+
+#: ../../CONTRIBUTING.md:203
+msgid ""
+"`docs-live`: this session builds the guide and opens it in your browser "
+"with live reloading."
+msgstr ""
+"`docs-live`: тази сесия изгражда ръководството и го отваря във Вашия браузър "
+"с презареждане на живо."
+
+#: ../../CONTRIBUTING.md:207
+msgid ""
+"open the local version of the guide in your browser at ``localhost`` "
+"shown in the terminal."
+msgstr ""
+"отворете локалната версия на Вашето ръководство в бразуъра си на ``localhost``, "
+"посочен в терминала."
+
+#: ../../CONTRIBUTING.md:209
+msgid "Before you submit your pull request"
+msgstr "Преди да направите pull request"
+
+#: ../../CONTRIBUTING.md:211
+msgid ""
+"Before submitting your pull request, make sure to run the tests and check"
+" the formatting of your code."
+msgstr ""
+"Преди да направите pull request, уверете се, че сте изпълнили тестовете и проверете"
+"форматирането на кода си."
+
+#: ../../CONTRIBUTING.md:216
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request. Also make "
+"sure to check the formatting of your documentation by building the docs "
+"locally and checking that your changes look correct."
+msgstr ""
+"Ако тестовете са неуспешни, ще видите съобщение за грешка в терминала си. "
+"Трябва да поправите грешките, преди да направите pull request. Уверете се също, "
+"че сте проверили форматирането на Вашата документация, като изградите документацията "
+"локално и проверите, че промените Ви изглеждат правилно."
+
+#: ../../CONTRIBUTING.md:220
+msgid "Submitting a pull request with your contribution"
+msgstr "Вдигане на pull request с Вашия принос"
+
+#: ../../CONTRIBUTING.md:222
+msgid "How to make a pull request"
+msgstr "Как да направите pull request"
+
+#: ../../CONTRIBUTING.md:224
+msgid ""
+"To open a pull request on GitHub, navigate to the main page of your "
+"forked repository and click on the \"Pull requests\" tab."
+msgstr ""
+"За да направите pull request в GitHub, отидете на основната страница на Вашето "
+"форкнато хранилище и кликнете върху \"Pull requests\" таба."
+
+#: ../../CONTRIBUTING.md:226
+msgid "Pull requests tab in GitHub"
+msgstr "Pull requests таба в GitHub"
+
+#: ../../CONTRIBUTING.md:232
+msgid ""
+"An image showing how to navigate to the pull requests tab in GitHub. The "
+"pull requests tab is highlighted with a red rectangle."
+msgstr ""
+"Изображение, показващо как да навигирате към pull requests таба в GitHub. "
+"Pull requests табът е ограден с червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:235
+msgid "Click on the \"New pull request\" button."
+msgstr "Кликнете върху \"New pull request\" бутона."
+
+#: ../../CONTRIBUTING.md:237
+msgid "New pull request button in GitHub"
+msgstr "New pull request бутон в GitHub"
+
+#: ../../CONTRIBUTING.md:243
+msgid ""
+"An image showing how to create a new pull request in GitHub. The new pull"
+" request button is highlighted with a red rectangle."
+msgstr ""
+"Изображение, показващо как да създадете нов pull request в GitHub. Бутонът за "
+"new pull request е ограден с червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:246
+msgid ""
+"Write a clear and concise title and description for your pull request. "
+"Make sure to describe the changes you made and why they are necessary."
+msgstr ""
+"Напишете ясно и сбито заглавие и описание на Вашия pull request. "
+"Уверете се, че сте описали направените промени и защо са необходими."
+
+#: ../../CONTRIBUTING.md:248
+msgid "What happens when you submit a pull request (CI/CD)"
+msgstr "Какво се случва, когато направите pull request (CI/CD)"
+
+#: ../../CONTRIBUTING.md:250
+msgid ""
+"Once you submit a pull request, a series of checks will be run to ensure "
+"that your changes do not introduce any bugs or errors. These checks "
+"include:"
+msgstr ""
+"Когато направите pull request, серия от проверки ще бъдат изпълнени, "
+"за да гарантират, че Вашите промени не въведат бъгове или грешки. Тези проверки "
+"включват:"
+
+#: ../../CONTRIBUTING.md:252
+msgid ""
+"**Code formatting and styles**: checks that your code is formatted "
+"correctly, by `pre-commit.ci - pr check`."
+msgstr ""
+"**Code formatting and styles**: проверява, че кодът Ви е правилно "
+"форматиран чрез `pre-commit.ci - pr check`."
+
+#: ../../CONTRIBUTING.md:253
+msgid ""
+"**docs build**: checks that the documentation builds correctly, using "
+"`circleci`."
+msgstr ""
+"**docs build**: използва `circleci`, за да провери, че документацията "
+"е правилно форматирана."
+
+#: ../../CONTRIBUTING.md:255
+msgid "You will see the status of these checks in your pull request."
+msgstr "Ще видите статуса на тези проверки във Вашия pull request."
+
+#: ../../CONTRIBUTING.md:257
+msgid "Pull request checks in GitHub"
+msgstr "Pull request проверки в GitHub"
+
+#: ../../CONTRIBUTING.md:263
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks are highlighted with a red rectangle."
+msgstr ""
+"Изображение, показващо статуса на проверките на pull request в GitHub. "
+"Проверките са показани в таблица със иконка за статуса до всяка проверка. "
+"Тези проверки са оградени с червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:265
+msgid ""
+"If any of these checks fail, you will see an error message in your pull "
+"request. You need to fix the errors before your changes can be merged."
+msgstr ""
+"Ако някоя от проверките е неуспешна, ще видите съовщение за грешка във Вашия "
+"pull request. Трябва да поправите грешките, преди промените ви да могат да бъдат добавени."
+
+#: ../../CONTRIBUTING.md:267
+msgid "Pull request checks failed in GitHub"
+msgstr "Неуспешни проверки на pull request в GitHub"
+
+#: ../../CONTRIBUTING.md:273
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks that failed and the details link are highlighted with a"
+" red rectangle."
+msgstr ""
+"Изображение, показващо статуса на проверки на pull request в GitHub. "
+"Проверките са показани в таблица с иконка за статуса до всяка поверка. "
+"Неуспешните проверки и линкът към подробностите са оградени с "
+"червен правоъгълник."
+
+#: ../../CONTRIBUTING.md:276
+msgid ""
+"To get more information about the errors, you can click on the "
+"\"Details\" link next to the failed check."
+msgstr ""
+"За повече информация за грешките, можете да кликнете на "
+"\"Details\" линка до неуспешната проверка."
+
+#: ../../CONTRIBUTING.md:278
+msgid "What to expect from the review process"
+msgstr "Какво да очаквате от процеса по преглед"
+
+#: ../../CONTRIBUTING.md:280
+msgid ""
+"Once you submit a pull request, a maintainer of the repository will "
+"review your changes and provide feedback. The review process may involve:"
+msgstr ""
+"Щом направите pull request, maintainer на хранилището ще "
+"прегледа вашите промени и ще даде обратна връзка. Процесът по преглед може да включва:"
+
+#: ../../CONTRIBUTING.md:282
+msgid ""
+"**Comments**: the reviewer may leave comments on your pull request to ask"
+" questions or provide feedback."
+msgstr ""
+"**Коментари**: преглеждащият може да остави коментари на Вашия pull request, с които "
+"да зададе въпроси или даде обратна връзка."
+
+#: ../../CONTRIBUTING.md:283
+msgid ""
+"**Suggestions**: the reviewer may suggest changes to your code or "
+"documentation."
+msgstr ""
+"**Предложения**: преглеждащият може да направи предложения за промени на "
+"Вашия код или документация."
+
+#: ../../CONTRIBUTING.md:284
+msgid ""
+"**Approvals**: once the reviewer is satisfied with your changes, they "
+"will approve the pull request."
+msgstr ""
+"**Одобрения**: щом преглеждащият остане доволен от Вашите промени, той/тя "
+"ще одобри Вашия pull request."
+
+#: ../../CONTRIBUTING.md:286
+msgid ""
+"You can make changes to your pull request by pushing new commits to the "
+"branch. The pull request will be updated automatically with your new "
+"changes."
+msgstr ""
+"Можете да правите промени на Вашия pull request, като направите нови commit-и "
+"на Вашия branch. Pull request-ът ще бъде обновен автоматично с новите Ви "
+"промени."
+
+#: ../../CONTRIBUTING.md:288
+msgid ""
+"Once your pull request is approved, it will be merged into the main "
+"branch and your changes will be included in the guide."
+msgstr ""
+"Щом Вашият pull request бъде одобрен, ще бъде включен в main "
+"branch-а и Вашите промени ще бъдат включени в ръководството."
+
+#: ../../CONTRIBUTING.md:290
+msgid "Additional help"
+msgstr "Допълнителна помощ"
+
+#: ../../CONTRIBUTING.md:292
+msgid "How to get help"
+msgstr "Как да получите помощ"
+
+#: ../../CONTRIBUTING.md:294
+msgid ""
+"*__TODO__: This section should describe the options for finding more help"
+" in case beginner contributors need more help (e.g., create an issue, "
+"post in a forum, etc).*"
+msgstr ""
+"*__TODO__: Тази секция трябва да опише възможностите за намиране на допълнителна "
+"помощ, в случайй че начинаещите contributor-и имат нужда от нея (напр., създаване на issue, "
+"публикация във форум и т.н.)*"
+
+#: ../../CONTRIBUTING.md:296
+msgid "Additional resources"
+msgstr "Допълнителни ресурси"
+
+#: ../../CONTRIBUTING.md:298
+msgid ""
+"*__TODO__: It should also include links to beginner documentation, like "
+"the GitHub docs.*"
+msgstr ""
+"*__TODO__: Трябва да включва линкове към документация за начиещи като "
+"GitHub docs.*"
+
+#: ../../CONTRIBUTING.md:300
+msgid "Annex"
+msgstr "Анекс"
+
+#: ../../CONTRIBUTING.md:302
+msgid "Code examples"
+msgstr "Примерен код"
+
+#: ../../CONTRIBUTING.md:304
+msgid ""
+"This guide uses the [literalinclude Sphinx directive](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/directives.html#directive-"
+"literalinclude) whenever possible to keep code and prose separate. Code "
+"for use in the documentation is kept in the `examples/` folder."
+msgstr ""
+"Това ръководство използва [literalinclude Sphinx directive](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/directives.html#directive-"
+"literalinclude), където е възможно, за поддържа кодът и прозата отделени. Кодът, "
+"който следва да се ползва в документацията, се съхранява в `examples/` директорията."
+
+#: ../../CONTRIBUTING.md:308
+msgid "Referencing code in documentation"
+msgstr "Референтен код в документацията"
+
+#: ../../CONTRIBUTING.md:310
+msgid ""
+"If an example is present elsewhere in the documentation that you want to "
+"use, you can copy the `literalinclude` directive verbatim and the "
+"examples will stay in sync."
+msgstr ""
+"Ако някъде другаде в документацията има пример, който искате да "
+"използвате, можете да копирате `literalinclude` директивата буквално и "
+"примерите ще останат синхронизирани."
+
+#: ../../CONTRIBUTING.md:313
+msgid ""
+"If you already see code in the examples folder that you can use for new "
+"documentation, a new `literalinclude` can be made to extract it into the "
+"site. Only a relative path to the code is required for a working "
+"`literalinclude`, but you should in almost all cases also provide a "
+"`:language:` and `:lines:`. The former makes code examples prettier, and "
+"the later can protect your example from future modifications to the code."
+msgstr ""
+"Ако вече виждате код в `examples/` директорията, който можете да ползвате "
+"за нова документация, нов `literalinclude` може да бъде създаден, за да го извлече "
+"в сайта. Само относителен път до кода е необходим за работещ "
+"`literalinclude`, но в почти всички случаи трябва също да предоставите "
+"`:language:` и `:lines:`. Първото прави примерите с код по-хубави, а "
+"второто може да предпази Вашия пример от бъдещи промени в кода."
+
+#: ../../CONTRIBUTING.md:318
+msgid ""
+"**Pro tip**: As an alternative to `:lines:` there are also the `:start-"
+"after:`, `:start-at:`, `:end-before:`, and `:end-at:` options. And if the"
+" example code is Python, `:pyobject:` can be an even more future-proof "
+"way to keep the same documentation content even through code refactors."
+msgstr ""
+"**Pro tip**: Като алтернатива на `:lines:` има също `:start-"
+"after:`, `:start-at:`, `:end-before:` и `:end-at:` опциите. И ако "
+"примерният код е Python, `:pyobject:` може да бъде още по-добър начин да "
+"предпазите документацията си от промени дори с оглед бъдещо пренаписване на кода."
+
+#: ../../CONTRIBUTING.md:322
+msgid ""
+"If you need example code that doesn't yet exist in `examples/` see "
+"[creating code for documentation](#creating-code-for-documentation)."
+msgstr ""
+"Ако се нуждаете от примерен код, който още не съществува в `examples/`, вижте "
+"[създаването на код за документация](#creating-code-for-documentation)."
+
+#: ../../CONTRIBUTING.md:325
+msgid "Creating code for documentation"
+msgstr "Създаване на код за документация"
+
+#: ../../CONTRIBUTING.md:327
+msgid ""
+"Whenever you come across a place that could benefit from a code block, "
+"instead of writing it in-line with a code fence (`` ``` `` blocked text) "
+"you can write it as a file in its own format. Your example may even "
+"already exist; [see referencing code in documentation ](#referencing-"
+"code-in-documentation)."
+msgstr ""
+"Когато попаднете на фрагмент от код, който може да Ви бъде от полза, "
+"вместо да го пишете в същия файл, ограден с кавички (`` ``` `` blocked text) "
+"можете да го напишете във файл съответния формат. Възможно е също "
+"Вашият пример вече да съществува; [вижте реферирането към код в документацията](#referencing-"
+"code-in-documentation)."
+
+#: ../../CONTRIBUTING.md:331
+msgid ""
+"If you want to add a new example that doesn't fit into any of the "
+"existing example files, you can create a new file and reference it in a "
+"`literalinclude` block. If it makes sense for that file to live within "
+"one of the existing example projects please add it there; otherwise "
+"create a new folder in the `examples` directory."
+msgstr ""
+"Ако искате да създадете нов пример, който не пасва в някой от съществуващите "
+"файлове с примери, можете да създадете нов файл и да го реферирате в "
+"`literalinclude` блок. Ако има смисъл този файл да бъде в някой от "
+"съществуващите примерни проекти, моля, добавете го там; в противен случай, "
+"създайте нова папка в `examples` директорията."
+
+#: ../../CONTRIBUTING.md:335
+msgid ""
+"If an existing example is incomplete or a new example makes sense to be "
+"added to an existing file, go ahead and add it, but take care to not "
+"break the rest of the guide. Whenever possible, extend the example rather"
+" that rewrite it. So for instance, add new functions to the end of the "
+"file, new methods after all existing ones in a class."
+msgstr ""
+"Ако съществуващ пример е непълен или би имало смисъл да бъде добавен нов пример "
+"към съществуващ файл, направете го, но внимавайте да не счупите останалата част "
+"от ръководството. Където е възможно, добавете нови функции в края на "
+"файл или нови методи след съществуващите в определен клас."
+
+#: ../../CONTRIBUTING.md:339
+msgid ""
+"Example code is checked for correctness, so adding a new example may "
+"require adding additional tests for coverage, and will require fixing any"
+" failing tests."
+msgstr ""
+"Примерният код бива проверяван за правилност, така че с добавянето на "
+"нов пример е възможно да трябват нов тестове за покритие. Ще изискваме да бъдат"
+" поправени всички неуспешни тестове."
+
+#: ../../CONTRIBUTING.md:342
+msgid ""
+"***⚠️ WARNING***: great care should be taken when modifying existing "
+"example code, especially any modification beyond appending to the end of "
+"the file. All code examples are (potentially) shared examples. This makes"
+" for more consistent examples in the guide but can mean action-"
+"at-a-distance when modifying the examples for one particular use case. If"
+" you find yourself modifying existing examples try running this command "
+"and then checking those pages in a new build."
+msgstr ""
+"***⚠️ Внимание***: трябва да внимавате, когато променяте съществуващ "
+"примерен код, особено що се отнася до промени отвъд добавки в края на "
+"файла. Всичките примери (потенциално) са примери, които ще бъдат споделени. "
+"Това осигурява по-добра последователност на примерите в ръководството, "
+"но може да означава, че при промяна на примерите за конкретен случай на "
+"употреба ще се наложи действие от разстояние. Ако се наложи да променяте "
+"съществуващи примери, опитайте изпълните тази команда и след това да проверите новата версия на страниците."
+
+#: ../../CONTRIBUTING.md:350
+msgid "Example:"
+msgstr "Пример:"
+
+#: ../../CONTRIBUTING.md:352
+msgid "Instead of writing example code in markdown like this"
+msgstr "Вместо да пишете примерен код в markdown по този начин"
+
+#: ../../CONTRIBUTING.md:363
+msgid "The python can be extracted into a `.py` file"
+msgstr "Python кодът може да бъде извлечен в `.py` файл"
+
+#: ../../CONTRIBUTING.md:377
+msgid ""
+"As another example, if you only need to show part of a `pyproject.toml`, "
+"we already have complete project definitions, you need only to find the "
+"relevant part."
+msgstr ""
+"Като още един пример, ако Ви трябва да покажете сам очаст от `pyproject.toml` файл, "
+"вече имаме пълните дефиниции на проекта, Вие само трябва да намерите "
+"релевантната част."
+
+#: ../../CONTRIBUTING.md:380
+msgid "Instead of writing this"
+msgstr "Вместо да пишете това"
+
+#: ../../CONTRIBUTING.md:391
+msgid "an example could be extracted from an existing toml file"
+msgstr "пример може да бъде извлечен от съществуващ toml файл"
diff --git a/locales/bg/LC_MESSAGES/TRANSLATING.po b/locales/bg/LC_MESSAGES/TRANSLATING.po
new file mode 100644
index 000000000..d9e719fbc
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/TRANSLATING.po
@@ -0,0 +1,790 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../TRANSLATING.md:5
+msgid "Translation Guide for the Python Packaging Guide"
+msgstr ""
+
+#: ../../TRANSLATING.md:7
+msgid ""
+"This guide will help you get started contributing to the translation of "
+"the Python Packaging Guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:9
+msgid ""
+"The process of contributing to the translation of the guide is similar to"
+" the process of contributing to the guide itself, except that instead of "
+"working on the guide source files directly, you will be working on the "
+"translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:11
+msgid "Translation Status"
+msgstr ""
+
+#: ../../TRANSLATING.md:16
+msgid ""
+"The translation status graph updates every time the book is build with "
+"translations. You can see the status of the translations by going to "
+"[this link](https://www.pyopensci.org/python-package-guide/TRANSLATING)"
+msgstr ""
+
+#: ../../TRANSLATING.md:18
+msgid "Overview of the Translation Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:20
+msgid ""
+"The process of adapting software to different languages is called "
+"internationalization, or i18n for short. Internationalization makes sure "
+"that translation can happen without having to modify the source code, or "
+"in our case, the original English source files of the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:22
+msgid ""
+"Sphinx, the documentation engine we use to build the Python Package "
+"Guide, has built-in support for internationalization, so the workflow is "
+"very straightforward."
+msgstr ""
+
+#: ../../TRANSLATING.md:24
+msgid ""
+"The process of actually translating the guide into different languages is"
+" called localization, or l10n for short. This is the step you will be "
+"helping with your contribution."
+msgstr ""
+
+#: ../../TRANSLATING.md:26
+msgid "Here is a quick overview of how the translation process works:"
+msgstr ""
+
+#: ../../TRANSLATING.md:28
+msgid ""
+"The guide is originally written in English and stored in a set of "
+"MarkDown files."
+msgstr ""
+
+#: ../../TRANSLATING.md:29
+msgid ""
+"The source files are processed by Sphinx to generate a set of translation"
+" files stored in a folder for each target language."
+msgstr ""
+
+#: ../../TRANSLATING.md:30
+msgid ""
+"Contributors (like you!) translate these files into the different "
+"languages."
+msgstr ""
+
+#: ../../TRANSLATING.md:31
+msgid ""
+"When the guide is built, Sphinx creates a version of the guide in the "
+"original language (English) and the translated versions for the languages"
+" defined in the configuration."
+msgstr ""
+
+#: ../../TRANSLATING.md:34
+msgid ""
+"You don't need to understand the technical details to contribute, but if "
+"you are interested in learning how Sphinx handles internationalization "
+"and localization, you can find more information [here](https://www"
+".sphinx-doc.org/en/master/usage/advanced/intl.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:37
+msgid "Two Ways to Contribute a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:39
+msgid ""
+"There are two ways to contribute a translation, and the first one does "
+"not require you to install anything on your computer."
+msgstr ""
+
+#: ../../TRANSLATING.md:41
+msgid ""
+"**From the GitHub website.** Translation files are plain text, so you can"
+" edit them right in your browser. Fork the repository, edit a `.po` file "
+"in your fork, and open a pull request. This is the best place to start if"
+" this is your first open source contribution. The contributing guide "
+"walks through the browser workflow in [Contributing via the GitHub "
+"website](CONTRIBUTING.md#contributing-via-the-github-website). Once you "
+"have a fork, you can skip ahead to [Editing the Translation Files"
+"](#editing-the-translation-files)."
+msgstr ""
+
+#: ../../TRANSLATING.md:43
+msgid ""
+"**From a local copy on your computer.** This takes more setup, but it "
+"lets you check how much of a file is translated with `sphinx-intl stat` "
+"and preview the translated guide in your browser before you open a pull "
+"request. Choose this if you plan to translate a lot of strings or want to"
+" see your work in context."
+msgstr ""
+
+#: ../../TRANSLATING.md:45
+msgid "Setting up Your Local Environment"
+msgstr ""
+
+#: ../../TRANSLATING.md:47
+msgid "You only need this if you chose the second approach above."
+msgstr ""
+
+#: ../../TRANSLATING.md:49
+msgid ""
+"Setting up to translate is no different from setting up to contribute "
+"anything else to the guide, so rather than repeat the steps here, follow "
+"these sections of the contributing guide in order:"
+msgstr ""
+
+#: ../../TRANSLATING.md:51
+msgid "[Forking the repository](CONTRIBUTING.md#forking-the-repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:52
+msgid ""
+"[Clone your forked repository](CONTRIBUTING.md#clone-your-forked-"
+"repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:53
+msgid "[Create a new branch](CONTRIBUTING.md#create-a-new-branch)"
+msgstr ""
+
+#: ../../TRANSLATING.md:54
+msgid ""
+"[Create a virtual environment](CONTRIBUTING.md#create-a-virtual-"
+"environment), which gives the commands for both Windows and macOS/Linux"
+msgstr ""
+
+#: ../../TRANSLATING.md:55
+msgid ""
+"[Install the development dependencies](CONTRIBUTING.md#install-the-"
+"development-dependencies)"
+msgstr ""
+
+#: ../../TRANSLATING.md:58
+msgid ""
+"Installing the development dependencies is what makes `sphinx-intl` and "
+"`nox` available in your environment. Both are used later in this guide: "
+"`sphinx-intl` reports how much of each file has been translated, and "
+"`nox` builds the guide so you can preview your work."
+msgstr ""
+
+#: ../../TRANSLATING.md:61
+msgid "Starting a New Language Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:63
+msgid ""
+"If you plan to work on an existing translation, you can skip this step "
+"and go directly to the next section."
+msgstr ""
+
+#: ../../TRANSLATING.md:65 ../../TRANSLATING.md:231
+msgid "Important"
+msgstr ""
+
+#: ../../TRANSLATING.md:66
+msgid ""
+"If you would like to start the translation of the guide into a new "
+"language, start by [creating an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:69
+msgid ""
+"To generate the translation files for a new language, add the language to"
+" the `languages` list in the `conf.py` configuration file. "
+"[Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to "
+"manage the building of the guide and its translations, and it reads this "
+"list from `conf.py`."
+msgstr ""
+
+#: ../../TRANSLATING.md:71
+msgid ""
+"Inside `conf.py`, find the `languages` list and add the corresponding "
+"two-letter code. For example, if you want to start the translation of the"
+" guide into French, you would add `'fr'`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:80
+msgid ""
+"You can find a list of the two-letter Sphinx language option "
+"[here](https://www.sphinx-doc.org/en/master/usage/configuration.html"
+"#confval-language)."
+msgstr ""
+
+#: ../../TRANSLATING.md:83
+msgid "Preparing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:85
+msgid ""
+"The translation files contain the original English text and a space for "
+"you to enter the translated text. Before starting to translate, you need "
+"to make sure the translation files are up to date with the latest changes"
+" to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:87
+msgid ""
+"You can do this by running the following command, replacing LANG by the "
+"language code you plan to work on (e.g., `es` for Spanish):"
+msgstr ""
+
+#: ../../TRANSLATING.md:93
+msgid ""
+"This command will create the translation files if they don't exist yet, "
+"or update them with the latest changes if they already exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:95
+msgid ""
+"The translation files are text files with the `.po` extension stored in "
+"`./locales`, in folders corresponding to each language. For example, the "
+"translation files for Spanish are stored in the `locales/es/LC_MESSAGES` "
+"directory."
+msgstr ""
+
+#: ../../TRANSLATING.md:97
+msgid ""
+"Because the translation files map the original English text to translated"
+" text, they are sometimes referred to as \"catalog\" files or \"portable "
+"object\" files."
+msgstr ""
+
+#: ../../TRANSLATING.md:100
+msgid ""
+"You don't need to know all the details about the PO format in order to "
+"translate. If you are interested in learning more, you can find "
+"additional details in the [GNU gettext "
+"documentation](https://www.gnu.org/software/gettext/manual/html_node/PO-"
+"Files.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:103
+msgid "Working on a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:105
+msgid ""
+"In order to start translating, go to the folder inside `./locales` "
+"corresponding to the target language you want to translate to (for "
+"example, `./locales/es/LC_MESSAGES/` for the Spanish translation)."
+msgstr ""
+
+#: ../../TRANSLATING.md:107
+msgid ""
+"In this folder you will find a set of `.po` files, corresponding to the "
+"different sections of the guide:"
+msgstr ""
+
+#: ../../TRANSLATING.md:125
+msgid ""
+"You may also see some `.mo` files in the same folder. These are compiled "
+"versions of the `.po` files create by Sphinx during the build process, "
+"and used to generate the translated version of the guide. They are "
+"intermediary files and are not meant to be edited directly or stored in "
+"the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:128
+msgid ""
+"If you are working on a new translation, choose one of the `.po` files to"
+" start with. If you are working on an existing translation, you can start"
+" with the `.po` files that need the most work."
+msgstr ""
+
+#: ../../TRANSLATING.md:130
+msgid ""
+"To see how much of each file has been translated, use the `sphinx-intl "
+"stat`. You will be able to see the number of translated, fuzzy, and "
+"untranslated strings in each `.po` file."
+msgstr ""
+
+#: ../../TRANSLATING.md:132
+msgid ""
+"For example, to see the statistics for the Spanish translation, you would"
+" run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:146
+msgid "What do these categories mean:"
+msgstr ""
+
+#: ../../TRANSLATING.md:148
+msgid ""
+"Translated strings are strings that have been translated into the target "
+"language."
+msgstr ""
+
+#: ../../TRANSLATING.md:149
+msgid ""
+"Fuzzy strings are strings that have been translated but need to be "
+"reviewed because the original English string in the guide changed."
+msgstr ""
+
+#: ../../TRANSLATING.md:150
+msgid "Untranslated strings are strings that have not been translated yet."
+msgstr ""
+
+#: ../../TRANSLATING.md:153
+msgid ""
+"When Sphinx is building the guide in another language, it will look into "
+"the corresponding folder in `./locales/` for translated strings. If the "
+"translation is available, Sphinx will replace the English text with the "
+"equivalent text in the target language. If the translation is not "
+"available, Sphinx will use the original English strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:156
+msgid "Editing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:158
+msgid ""
+"You can use any text editor to edit the `.po` file. But if you prefer, "
+"there are also tools like [Poedit](https://poedit.net/) that provide a "
+"graphic use interface."
+msgstr ""
+
+#: ../../TRANSLATING.md:160
+msgid ""
+"Depending on your editor of choice, you may be able to install a plugin "
+"or extension that can provide syntax highlighting and other features for "
+"working with `.po` files. Like for example, the "
+"[gettext](https://marketplace.visualstudio.com/items?itemName=mrorz"
+".language-gettext) extension for Visual Studio Code."
+msgstr ""
+
+#: ../../TRANSLATING.md:162
+msgid ""
+"When you open a `.po` file, you will see a series of entries that look "
+"like this:"
+msgstr ""
+
+#: ../../TRANSLATING.md:172
+msgid ""
+"The first line of an entry starts with `#:` and is a reference to the "
+"original source file and line number from which the text was extracted. "
+"This information is useful for finding the context of the text in the "
+"guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:174
+msgid ""
+"The `msgid` field contains the original English text that needs to be "
+"translated. The `msgstr` field is where you will enter the translated "
+"text. This field might contain text if someone else already translated "
+"the entry."
+msgstr ""
+
+#: ../../TRANSLATING.md:184
+msgid ""
+"Sometimes the original English text may be too long for a single line, "
+"and it may be split into multiple lines. In this case, you can keep the "
+"same structure in the translated text. Notice that both the `msgid` and "
+"`msgstr` fields in the example below start with an empty string, "
+"indicating that the text continues in the next line."
+msgstr ""
+
+#: ../../TRANSLATING.md:200
+msgid ""
+"The English text will sometimes contain Markdown formatting, such as bold"
+" or italic text. You should keep the formatting in the translated text, "
+"making sure to translate the text inside the formatting tags."
+msgstr ""
+
+#: ../../TRANSLATING.md:202
+msgid ""
+"The English text may also contain links to other sections of the guide or"
+" external resources. You should keep the links in the translated text, "
+"making sure to update the link text when appropriate."
+msgstr ""
+
+#: ../../TRANSLATING.md:210
+msgid ""
+"An entry may be marked as `fuzzy`, which means that the original English "
+"text has changed since the translation was made, and the translation may "
+"need to be revised. When this is the case you will see an additional line"
+" in the entry, starting with `#,`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:227
+msgid ""
+"You can review the translation and make any necessary changes, removing "
+"the `fuzzy` tag once you are satisfied with the translation."
+msgstr ""
+
+#: ../../TRANSLATING.md:229
+msgid ""
+"You can also add comments to the translation file, by adding lines that "
+"start with a `#` character to the entry. This can be helpful to add "
+"context to the translation for other translators or reviewers to see, but"
+" this might be only necessary in special circumstances."
+msgstr ""
+
+#: ../../TRANSLATING.md:232
+msgid ""
+"When working on a translation, you **should not** modify the original "
+"English text in the `msgid` field. If you see a typo or an error in the "
+"original text, please consider fixing it in the original source file (use"
+" the first line of the entry to locate it) and submit a separate pull "
+"request."
+msgstr ""
+
+#: ../../TRANSLATING.md:235
+msgid "Building the Translated Documentation"
+msgstr ""
+
+#: ../../TRANSLATING.md:237
+msgid ""
+"Once you finished translating or when you want to check the translation "
+"in context, you can build the guide locally on your computer, using the "
+"following command, replacing LANG by the proper language code (e.g., `es`"
+" for Spanish)"
+msgstr ""
+
+#: ../../TRANSLATING.md:243
+msgid ""
+"This command builds a single translated version of the guide: the one for"
+" LANG. The result is stored in `_build/html`, in a folder named after the"
+" language code (e.g., `es`). If you want to build every language at once "
+"instead, use `nox -s build-all-languages`."
+msgstr ""
+
+#: ../../TRANSLATING.md:245
+msgid ""
+"To view the translated version of the guide in your browser, open the "
+"corresponding `index.html` file. For example, to view the Spanish "
+"translation, you would open `_build/html/es/index.html`."
+msgstr ""
+
+#: ../../TRANSLATING.md:247
+msgid ""
+"You can also build a live version of the guide that updates automatically"
+" as you make changes to the translation files. To do this, use the `nox "
+"-s docs-live-lang` command. Note that in this case you need to specify "
+"which language you want to build. For example, if you are working on the "
+"Spanish translation, you would run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:253
+msgid ""
+"Note the `--` before the language code, it indicates that the following "
+"arguments should be passed into the nox session and not be interpreted "
+"directly by nox. If you forget the `--`, nox will look instead for a "
+"session named 'es' and raise an error that it does not exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:255
+msgid ""
+"This command will use `sphinx-autobuild` to launch a local web server "
+"where you can access the translated version of the guide. You can open "
+"the guide in your browser by navigating to `http://localhost:8000`."
+msgstr ""
+
+#: ../../TRANSLATING.md:257
+msgid ""
+"This is a great way to see how the translated version of the guide looks "
+"as you make changes to the translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:259
+msgid "Submitting a PR for Your Contribution"
+msgstr ""
+
+#: ../../TRANSLATING.md:261
+msgid ""
+"Once you are finished translating and before you submit a pull request "
+"(PR) for your translation, you need to make sure that the translated "
+"version of the guide builds without any errors or warning and looks "
+"correctly in the browser."
+msgstr ""
+
+#: ../../TRANSLATING.md:263
+msgid "You can follow these steps:"
+msgstr ""
+
+#: ../../TRANSLATING.md:265
+msgid ""
+"Build the translations of the guide with same parameters that will be "
+"used during the release:"
+msgstr ""
+
+#: ../../TRANSLATING.md:271
+msgid ""
+"Make sure there are no warnings or errors in the output. If there are, "
+"you will need to fix them before submitting the PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:272
+msgid ""
+"Make sure the translated version of the guide looks good in the browser "
+"by opening the `_build/html//index.html` file, where `` is "
+"the language you have been working on."
+msgstr ""
+
+#: ../../TRANSLATING.md:274
+msgid "If everything looks good, you can submit a PR with your changes."
+msgstr ""
+
+#: ../../TRANSLATING.md:277
+msgid ""
+"When you submit a PR for a translation, you should only include changes "
+"to one language. If you worked in multiple languages, please submit a "
+"separate PR for each language."
+msgstr ""
+
+#: ../../TRANSLATING.md:280
+msgid ""
+"Translations PRs will be tagged with a label indicating the language to "
+"make them easier to identify and review. For example, contributions to "
+"the Spanish translation will be tagged with 'lang-es'."
+msgstr ""
+
+#: ../../TRANSLATING.md:282
+msgid "TODO: This tagging could be automated with a GitHub Actions."
+msgstr ""
+
+#: ../../TRANSLATING.md:284
+msgid ""
+"When you submit the PR, make sure to include a short description of the "
+"changes you made and any context that might be helpful for the reviewer "
+"(e.g., you translated new strings, you reviewed fuzzy entries, you fixed "
+"typos, etc.)"
+msgstr ""
+
+#: ../../TRANSLATING.md:286
+msgid "The Review Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:288
+msgid ""
+"The review process for a translation contribution is similar to the "
+"review process for any other contribution to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:290
+msgid ""
+"TODO: This section needs more work, depending on the review workflow we "
+"decide to adopt. Other projects usually assign a coordinator/editor for "
+"each language, who is responsible for reviewing and merging translation "
+"contributions."
+msgstr ""
+
+#: ../../TRANSLATING.md:292
+msgid ""
+"Each language has an assigned editor who is responsible for reviewing and"
+" merging translation contributions. The editor will review the changes to"
+" make sure they are accurate and consistent with the style and tone of "
+"the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:294
+msgid ""
+"Sometimes the editor may ask for clarification or suggest changes to "
+"improve the translation. If this happens, you can make the requested "
+"changes and push them to the same branch where you submitted the original"
+" PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:296
+msgid ""
+"When the editor is satisfied with the translation, they will merge the "
+"PR. The translated version of the guide will be available on the "
+"pyOpenSci website once the language is released."
+msgstr ""
+
+#: ../../TRANSLATING.md:298
+msgid "The Release Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:300
+msgid ""
+"If a language is ready to go live, the maintainers will add the language "
+"code to the `release_languages` list in the `conf.py` configuration file."
+msgstr ""
+
+#: ../../TRANSLATING.md:302
+msgid ""
+"When the guide is built for release in CI, Sphinx will also generate the "
+"translated versions of the guide for the languages in the "
+"`release_languages` list."
+msgstr ""
+
+#: ../../TRANSLATING.md:304
+msgid ""
+"Translations are released in the same way as the English version of the "
+"guide, and the translated versions will be available in folders named "
+"after the language code. For example, the Spanish translation will be "
+"available at: `https://www.pyopensci.org/python-package-guide/es/` when "
+"it is published online."
+msgstr ""
+
+#: ../../TRANSLATING.md:306
+msgid "Frequently Asked Questions (FAQ)"
+msgstr ""
+
+#: ../../TRANSLATING.md:308
+msgid "How do I know which strings need to be translated?"
+msgstr ""
+
+#: ../../TRANSLATING.md:310
+msgid ""
+"When you run the `sphinx-intl stat` command, you will see a list of `.po`"
+" files with the number of translated, fuzzy, and untranslated strings. "
+"You can start by working on the files with the most untranslated strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:312
+msgid "What happens when a string has changed in the original English text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:314
+msgid ""
+"If a string has changed in the original English version, it will be "
+"marked as `fuzzy` in the translation file the next time it is updated "
+"(`update-language` or `update-release-languages`). Contributors working "
+"on the translation can then review the fuzzy entries and make the "
+"necessary changes to ensure it is accurate, before removing the `fuzzy` "
+"tag."
+msgstr ""
+
+#: ../../TRANSLATING.md:316
+msgid "How do I handle links in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:318
+msgid ""
+"You should keep the links in the translated text, but make sure to update"
+" the link text if necessary. For example, if the original English text "
+"contains a link to `[What is a Python package?](/tutorials/intro)`, you "
+"should keep the link in the translated text but update the link text to "
+"`[¿Que es un paquete de Python?](/tutorials/intro)`."
+msgstr ""
+
+#: ../../TRANSLATING.md:320
+msgid "How do I handle formatting in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:322
+msgid ""
+"You should keep the formatting in the translated text, but make sure to "
+"translate the text inside the formatting tags as well. For example, if "
+"the original English text is `**Test special cases:**`, you should keep "
+"the bold formatting in the translated text but update the text inside the"
+" formatting tags to `**Prueba casos especiales:**`."
+msgstr ""
+
+#: ../../TRANSLATING.md:324
+msgid "How do I handle strings that are too long for a single line?"
+msgstr ""
+
+#: ../../TRANSLATING.md:326
+msgid ""
+"If the original English text is too long for a single line, it may be "
+"split into multiple lines. Multiline strings in the `.po` file are "
+"indicated by an empty string in the `msgid` and `msgstr` fields, followed"
+" by the continuation of the text in the next line. For example:"
+msgstr ""
+
+#: ../../TRANSLATING.md:339
+msgid "How do I translate images?"
+msgstr ""
+
+#: ../../TRANSLATING.md:341
+msgid ""
+"You should not translate images in the guide. Producing translated "
+"versions of images is a complex process that requires additional tools "
+"and resources, and it is not typically done unless the translated images "
+"are created alongside the original images. More often, the text around "
+"the image is modified to include any necessary translations."
+msgstr ""
+
+#: ../../TRANSLATING.md:343
+msgid ""
+"In some special cases, an image might be critical to the understanding of"
+" the content. In those cases, the translations will be handled by the "
+"maintainers and editors outside this workflow."
+msgstr ""
+
+#: ../../TRANSLATING.md:345
+msgid ""
+"I am interested in translating the guide into a language that is not "
+"listed. How can I get started?"
+msgstr ""
+
+#: ../../TRANSLATING.md:347
+msgid ""
+"If you want to start a new translation of the guide into a language that "
+"is not listed, you should [create an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository to let the maintainers "
+"know that you intend to work on it. This will help avoid duplication of "
+"effort and ensure that the maintainers are ready to review your "
+"contribution when you are done."
+msgstr ""
+
+#: ../../TRANSLATING.md:349
+msgid "How do I know when a translation is ready to be released?"
+msgstr ""
+
+#: ../../TRANSLATING.md:351
+msgid ""
+"When a translation is ready to be included in the next release of the "
+"guide, the maintainers will add the language code to the "
+"`release_languages` list in the `conf.py` configuration file. This will "
+"trigger the build of the translation during the release process, and the "
+"translated version of the guide will be available on the pyOpenSci "
+"website."
+msgstr ""
+
+#: ../../TRANSLATING.md:353
+msgid ""
+"TODO: There are many approaches here, some projects release a translation"
+" as soon as some strings are translated, others wait until a certain "
+"percentage of the content is translated."
+msgstr ""
+
+#: ../../TRANSLATING.md:355
+msgid "How can I get help with my translation?"
+msgstr ""
+
+#: ../../TRANSLATING.md:357
+msgid ""
+"If you have any questions or need help with your translation, you can "
+"create an [issue](https://github.com/pyOpenSci/python-package-"
+"guide/issues) in the [Packaging Guide "
+"repository](https://github.com/pyOpenSci/python-package-guide)"
+msgstr ""
+
+#: ../../TRANSLATING.md:359
+msgid ""
+"You can also ask in the PyOpenSci Discord server ([click "
+"here](https://discord.gg/NQtTTqtv) to join), you will find a general "
+"channel for questions related to our workflow, processes, and tools "
+"(translation-general) and channels for each of the languages we are "
+"working on (spanish-translation, japanese-translation, etc)."
+msgstr ""
diff --git a/locales/bg/LC_MESSAGES/continuous-integration.po b/locales/bg/LC_MESSAGES/continuous-integration.po
new file mode 100644
index 000000000..d9f518a55
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/continuous-integration.po
@@ -0,0 +1,241 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2025.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-18 13:00-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.16.0\n"
+
+#: ../../continuous-integration/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:11
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:13
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:15
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:20
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:22
+msgid ""
+"When you’re ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:25
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:26
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:27
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:29
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:31
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:32
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:34
+msgid "What is Continuous Deployment (CD)?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:36
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:38
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:39
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:41
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:43
+msgid "Why use CI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:45
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:47
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:49
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:52
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:55
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:57
+msgid "CI / CD platforms"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:59
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:62
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:65
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:67
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:72
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:75
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:76
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:77
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:80
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:82
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "What is CI?"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "Continuous Integration"
+msgstr ""
+
+#: ../../continuous-integration/index.md:2
+msgid ""
+"Continuous Integration (CI) and Continuous Deployment (CD) for your "
+"Python package"
+msgstr ""
diff --git a/locales/bg/LC_MESSAGES/documentation.po b/locales/bg/LC_MESSAGES/documentation.po
new file mode 100644
index 000000000..00324b832
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/documentation.po
@@ -0,0 +1,3405 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../documentation/glossary.md:7
+msgid "Python packaging glossary"
+msgstr ""
+
+#: ../../documentation/glossary.md:9
+msgid "Core packaging"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "`__init__.py`"
+msgstr ""
+
+#: ../../documentation/glossary.md:13
+msgid ""
+"A special Python file that marks a directory as a Python package. When "
+"Python sees this file, it knows the folder contains importable code. It "
+"can either be empty or contain code that runs when the package is "
+"imported."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "API token"
+msgstr ""
+
+#: ../../documentation/glossary.md:19
+msgid ""
+"A secret key used to authenticate with PyPI or TestPyPI when publishing a"
+" package. You generate one in your account settings and use it in place "
+"of a password. **Treat it like a password and never share it or commit it"
+" to version control**."
+msgstr ""
+
+#: ../../documentation/glossary.md:12
+msgid "Build backend"
+msgstr ""
+
+#: ../../documentation/glossary.md:25
+msgid ""
+"The tool that does the actual work of building your package into "
+"distribution files. In this guide, the build backend is Hatchling. You "
+"specify it in your `pyproject.toml` file under `[build-system]`."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid ""
+"You execute a build by running `hatch build`. Alternatively, you can run"
+" `python -m build`. [Reference: official Python Packaging "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend)"
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Distribution files"
+msgstr ""
+
+#: ../../documentation/glossary.md:33
+msgid ""
+"The files you upload to PyPI so others can install your package. There "
+"are two common types: a wheel (`.whl`) and a source distribution "
+"(`.tar.gz`). See also `Wheel (.whl)` and `Source distribution (sdist)`."
+msgstr ""
+
+#: ../../documentation/glossary.md:26
+msgid "Module"
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid ""
+"A single Python file (`.py`) containing code such as functions, classes, "
+"or variables that can be imported. A package is made up of one or more "
+"modules."
+msgstr ""
+
+#: ../../documentation/glossary.md:31
+msgid "`pyproject.toml`"
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid ""
+"The configuration file at the root of your Python package. Written in "
+"TOML format, it stores metadata such as name, version, authors, and "
+"license. It can also configure tools such as Hatch, uv, and pytest. See "
+"also [Make your Python package PyPI ready](../tutorials/pyproject-toml)."
+msgstr ""
+
+#: ../../documentation/glossary.md:37
+msgid "Python package"
+msgstr ""
+
+#: ../../documentation/glossary.md:50
+msgid ""
+"A directory of Python code structured so it can be installed, imported, "
+"and shared with others. A package includes at least an `__init__.py` file"
+" and a `pyproject.toml` file. This is sometimes referred to as a "
+"**regular package**."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid ""
+"Info: You may hear the term **namespaced package** which is not really a "
+"package at all but a container of subpackages. This is out of scope for "
+"this guide. If interested, consult the [Python "
+"documentation](https://docs.python.org/3/glossary.html#term-namespace-"
+"package)."
+msgstr ""
+
+#: ../../documentation/glossary.md:47
+msgid "PyPI / TestPyPI"
+msgstr ""
+
+#: ../../documentation/glossary.md:60
+msgid ""
+"PyPI (the Python Package Index) is the official repository where Python "
+"packages are published and installed from. TestPyPI is a separate "
+"practice environment used for learning and testing publishing workflows. "
+"See [pypi.org](https://pypi.org) and "
+"[test.pypi.org](https://test.pypi.org). See also [Publish your Python "
+"package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid "Source distribution (sdist)"
+msgstr ""
+
+#: ../../documentation/glossary.md:68
+msgid ""
+"One of the two distribution file types for a Python package. The sdist "
+"(`.tar.gz`) contains source code and project files. When someone installs"
+" from an sdist, tools build the package locally first. See also [Publish "
+"your Python package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:61
+msgid "TOML"
+msgstr ""
+
+#: ../../documentation/glossary.md:74
+msgid ""
+"Tom's Obvious Minimal Language, a simple format for configuration files. "
+"TOML organizes data into tables such as `[project]` or `[tool.hatch]` and"
+" arrays. `pyproject.toml` uses TOML."
+msgstr ""
+
+#: ../../documentation/glossary.md:66
+msgid "Trusted publishing"
+msgstr ""
+
+#: ../../documentation/glossary.md:79
+msgid ""
+"A secure way to publish to PyPI using GitHub Actions instead of an API "
+"token. Rather than storing a secret token, you configure PyPI to trust "
+"your repository directly. See also [Setup Trusted Publishing for secure "
+"and automated publishing via GitHub Actions](../tutorials/trusted-"
+"publishing)."
+msgstr ""
+
+#: ../../documentation/glossary.md:72
+msgid "Wheel (.whl)"
+msgstr ""
+
+#: ../../documentation/glossary.md:85
+msgid ""
+"The binary distribution type for a Python package. A wheel is a pre-built"
+" binary format (`.whl`, a ZIP file) that installs directly without a "
+"build step. For many pure Python packages, one wheel can work across "
+"platforms. See also [Publish your Python package to PyPI](../tutorials"
+"/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:92
+msgid "Tools"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "copier"
+msgstr ""
+
+#: ../../documentation/glossary.md:96
+msgid ""
+"A command-line tool for creating new projects from templates. In this "
+"guide, you can use copier with the pyOpenSci package template to set up "
+"structure, configuration, and tooling quickly. See "
+"[copier.readthedocs.io](https://copier.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "coverage.py"
+msgstr ""
+
+#: ../../documentation/glossary.md:102
+msgid ""
+"A tool that measures how much of your code is exercised by tests, often "
+"as a percentage. It shows which lines and branches are covered. See "
+"[coverage.readthedocs.io](https://coverage.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:11
+msgid "Hatch"
+msgstr ""
+
+#: ../../documentation/glossary.md:107
+msgid ""
+"A modern Python packaging and project management tool. In this guide, "
+"Hatch is used to build packages, manage environments, run scripts, and "
+"publish. Configuration lives in `pyproject.toml`. See "
+"[hatch.pypa.io](https://hatch.pypa.io). See also [Get to know "
+"Hatch](../tutorials/get-to-know-hatch)."
+msgstr ""
+
+#: ../../documentation/glossary.md:18
+msgid "Hatchling"
+msgstr ""
+
+#: ../../documentation/glossary.md:114
+msgid ""
+"The build backend used by Hatch. When you run `python -m build` or `hatch"
+" build`, Hatchling reads `pyproject.toml` and creates sdist and wheel "
+"files. See "
+"[hatch.pypa.io/latest/backend](https://hatch.pypa.io/latest/backend/)."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "pip"
+msgstr ""
+
+#: ../../documentation/glossary.md:120
+msgid ""
+"Python's default package installer. You can use it to install packages "
+"from PyPI into an environment with commands such as `pip install package-"
+"name`. See [pip.pypa.io](https://pip.pypa.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid "pytest"
+msgstr ""
+
+#: ../../documentation/glossary.md:125
+msgid ""
+"A widely used Python testing framework for discovering and running tests."
+" In this guide, pytest often runs through Hatch scripts. See "
+"[docs.pytest.org](https://docs.pytest.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:34
+msgid "Ruff"
+msgstr ""
+
+#: ../../documentation/glossary.md:130
+msgid ""
+"A fast Python linter and formatter. It checks style and can automatically"
+" fix many styling issues. See "
+"[docs.astral.sh/ruff](https://docs.astral.sh/ruff)."
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid "Sphinx"
+msgstr ""
+
+#: ../../documentation/glossary.md:135
+msgid ""
+"A documentation generator for Python projects. Sphinx reads docstrings "
+"and documentation files to build a docs site. See [sphinx-"
+"doc.org](https://www.sphinx-doc.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid "Twine"
+msgstr ""
+
+#: ../../documentation/glossary.md:140
+msgid ""
+"A tool for securely uploading distribution files to PyPI or TestPyPI. See"
+" [twine.readthedocs.io](https://twine.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:48
+msgid "uv"
+msgstr ""
+
+#: ../../documentation/glossary.md:144
+msgid ""
+"A fast Python package and environment manager. In this guide, you can use"
+" uv to manage dependencies and run commands in project environments. See "
+"[docs.astral.sh/uv](https://docs.astral.sh/uv)."
+msgstr ""
+
+#: ../../documentation/glossary.md:149
+msgid "Hatch-specific concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Hatch environment"
+msgstr ""
+
+#: ../../documentation/glossary.md:153
+msgid ""
+"An isolated Python environment managed by Hatch. You can define multiple "
+"environments in `pyproject.toml` for testing, docs, builds, and style "
+"checks, each with its own dependencies and scripts."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Script (Hatch)"
+msgstr ""
+
+#: ../../documentation/glossary.md:158
+msgid ""
+"A named command defined inside a Hatch environment in `pyproject.toml`. "
+"Scripts provide shortcuts such as `hatch run build:check` and `hatch run "
+"test:run`."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Task runner"
+msgstr ""
+
+#: ../../documentation/glossary.md:163
+msgid ""
+"A tool that automates repetitive development workflows. Hatch can "
+"function as a task runner by letting you define scripts that run in "
+"specific environments."
+msgstr ""
+
+#: ../../documentation/glossary.md:168
+msgid "Development concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code coverage"
+msgstr ""
+
+#: ../../documentation/glossary.md:172
+msgid ""
+"A measure of how much source code executes during tests, usually as a "
+"percentage. High coverage does not guarantee no bugs, but low coverage "
+"can indicate untested areas."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Dependencies"
+msgstr ""
+
+#: ../../documentation/glossary.md:177
+msgid ""
+"Other Python packages needed for your package to work. Common classes "
+"include required dependencies, optional dependencies, and development "
+"dependencies."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Docstring"
+msgstr ""
+
+#: ../../documentation/glossary.md:182
+msgid ""
+"A string at the top of a function, class, or module that describes "
+"behavior, inputs, and outputs. Docstrings can be used by tools such as "
+"Sphinx to generate API documentation."
+msgstr ""
+
+#: ../../documentation/glossary.md:15
+msgid "End-to-end test"
+msgstr ""
+
+#: ../../documentation/glossary.md:187
+msgid ""
+"A test that simulates a complete user workflow from start to finish. In "
+"scientific packages, tutorials executed during docs builds can serve as "
+"end-to-end tests."
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Integration test"
+msgstr ""
+
+#: ../../documentation/glossary.md:192
+msgid ""
+"A test that checks how multiple functions or components work together. "
+"Unlike a unit test, it verifies behavior across a broader workflow."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "Linting"
+msgstr ""
+
+#: ../../documentation/glossary.md:196
+msgid ""
+"Automatic checks for style issues, formatting problems, and potential "
+"errors in code."
+msgstr ""
+
+#: ../../documentation/glossary.md:28
+msgid "Unit test"
+msgstr ""
+
+#: ../../documentation/glossary.md:200
+msgid ""
+"A test that checks one function or method in isolation. Unit tests are "
+"fast and help pinpoint where failures occur."
+msgstr ""
+
+#: ../../documentation/glossary.md:32
+msgid "Version specifier / lower bound"
+msgstr ""
+
+#: ../../documentation/glossary.md:204
+msgid ""
+"A constraint on which dependency versions are accepted. For example, "
+"`numpy>=1.24` sets a lower bound so versions older than 1.24 are not "
+"used."
+msgstr ""
+
+#: ../../documentation/glossary.md:209
+msgid "Git / GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "git"
+msgstr ""
+
+#: ../../documentation/glossary.md:213
+msgid "A tool for version control."
+msgstr ""
+
+#: ../../documentation/glossary.md:3
+msgid "GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md:216
+msgid ""
+"A service providing accounts and organizations to facilitate sharing "
+"repositories."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "GitHub Codespace"
+msgstr ""
+
+#: ../../documentation/glossary.md:219
+msgid ""
+"A cloud-based development environment that runs in a browser. See "
+"[github.com/features/codespaces](https://github.com/features/codespaces)."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Scoped commit"
+msgstr ""
+
+#: ../../documentation/glossary.md:223
+msgid ""
+"A git commit that makes one focused change, such as one fix or one "
+"feature update. Scoped commits improve reviewability and history clarity."
+msgstr ""
+
+#: ../../documentation/glossary.md:228
+msgid "Documentation"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code of conduct"
+msgstr ""
+
+#: ../../documentation/glossary.md:232
+msgid ""
+"A document that sets expectations for how contributors and community "
+"members treat one another in a project."
+msgstr ""
+
+#: ../../documentation/glossary.md:4
+msgid "Contributing guide"
+msgstr ""
+
+#: ../../documentation/glossary.md:236
+msgid ""
+"A document, often `CONTRIBUTING.md`, that explains how others can "
+"contribute, including setup steps, workflow, and code style."
+msgstr ""
+
+#: ../../documentation/glossary.md:8
+msgid "MyST Markdown"
+msgstr ""
+
+#: ../../documentation/glossary.md:240
+msgid ""
+"Markedly Structured Text, a Markdown flavor that supports Sphinx "
+"directives and roles. It allows Markdown-based docs while keeping Sphinx "
+"features. See [myst-parser.readthedocs.io](https://myst-"
+"parser.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:14
+msgid "README"
+msgstr ""
+
+#: ../../documentation/glossary.md:246
+msgid ""
+"The front page of your package on GitHub and often on PyPI. A good README"
+" explains purpose, installation, usage, and support options."
+msgstr ""
+
+#: ../../documentation/glossary.md:250
+msgid "AI"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Generative AI / LLM"
+msgstr ""
+
+#: ../../documentation/glossary.md:254
+msgid ""
+"Generative AI systems produce content such as text, code, or images. LLM "
+"stands for Large Language Model, the technology behind tools such as "
+"ChatGPT, GitHub Copilot, and Claude."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:1
+msgid "Tools to Build and Host your Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:3
+msgid ""
+"The most common tool for building documentation in the Python ecosystem "
+"currently is Sphinx. However, some maintainers are using tools like "
+"[mkdocs](https://www.mkdocs.org/) for documentation. It is up to you to "
+"use the platform that you prefer for your documentation!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:8
+msgid ""
+"In this section, we introduce Sphinx as a common tool to build "
+"documentation. We talk about various syntax options that you can use when"
+" writing Sphinx documentation including mySt and rST."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:12
+msgid ""
+"We also talk about ways to publish your documentation online and Sphinx "
+"tools that might help you optimize your documentation website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:1
+msgid "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:3
+msgid "There are three commonly used syntaxes for creating Python documentation:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:4
+msgid ""
+"[markdown](https://www.markdownguide.org/): Markdown is an easy-to-learn "
+"text syntax. It is the default syntax used in Jupyter Notebooks. There "
+"are tools that you can add to a Sphinx website that allow it to render "
+"markdown as html. However, using markdown to write documentation has "
+"limitations. For instance if you want to add references, colored call out"
+" blocks and other custom elements to your documentation, you will need to"
+" use either **myST** or **rST**."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:8
+msgid ""
+"[rST (ReStructured Text):](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/basics.html). **rST** is the "
+"native syntax that sphinx supports. rST was the default syntax used for "
+"documentation for many years. However, in recent years myST has risen to "
+"the top as a favorite for documentation given the flexibility that it "
+"allows."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:9
+msgid ""
+"[myST:](https://myst-parser.readthedocs.io/en/latest/intro.html) myST is "
+"a combination of `markdown` and `rST` syntax. It is a nice option if you "
+"are comfortable writing markdown. `myst` is preferred by many because it "
+"offers both the rich functionality of rST combined with a simple-to-write"
+" markdown syntax."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:12
+msgid ""
+"While you can chose to use any of the syntaxes listed above, we suggest "
+"using `myST` because:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:15
+msgid "It is a simpler syntax and thus easier to learn;"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:16
+msgid ""
+"The above simplicity will make it easier for more people to contribute to"
+" your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:17
+msgid ""
+"Most of your core Python package text files, such as your README.md file,"
+" are already in `.md` format"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:18
+msgid ""
+"`GitHub` and `Jupyter Notebooks` support markdown thus it's more widely "
+"used in the scientific ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:22
+msgid ""
+"If you are on the fence about myST vs rst, you might find that **myST** "
+"is easier for more people to contribute to."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:1
+msgid "How to publish your Python package documentation online"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:3
+msgid ""
+"We suggest that you setup a hosting service for your Python package "
+"documentation. Two free and commonly used ways to quickly create a "
+"documentation website hosting environment are below."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:7
+msgid ""
+"You can host your documentation yourself using [GitHub "
+"Pages](https://pages.github.com/) or another online hosting service."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:8
+msgid ""
+"You can host your documentation using [Read the "
+"Docs](https://readthedocs.org/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:10
+msgid "What is Read the Docs ?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:11
+msgid ""
+"[Read the Docs](https://readthedocs.org/) is a documentation hosting "
+"service that supports publishing your project's documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:13
+msgid ""
+"Read the Docs is a fully featured, free, documentation hosting service. "
+"Some of its many features include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:16
+msgid ""
+"Is free to host your documentation (but there are also paid tiers if you "
+"wish to customize hosting)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:17
+msgid "Automates building your documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:18
+msgid ""
+"Allows you to turn on integration with pull requests where you can view "
+"documentation build progress (success vs failure)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:19
+msgid ""
+"Supports versioning of your documentation which allows users to refer to "
+"older tagged versions of the docs if they are using older versions of "
+"your package."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:20
+msgid "Supports downloading of documentation in PDF and other formats."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:21
+msgid ""
+"You can customize the documentation build using a **.readthedocs.yaml** "
+"file in your GitHub repository."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:24
+msgid "What is GitHub Pages?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:25
+msgid ""
+"[GitHub Pages](https://docs.github.com/en/pages/getting-started-with-"
+"github-pages/what-is-github-pages) is a free web hosting service offered "
+"by GitHub. Using GitHub pages, you can build your documentation locally "
+"or using a Continuous Integration setup, and then push to a branch in "
+"your GitHub repository that is setup to run the GitHub Pages web build."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:33
+msgid "Read the Docs vs GitHub Pages"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:35
+msgid ""
+"GitHub pages is a great option for your documentation deployment. "
+"However, you will need to do a bit more work to build and deploy your "
+"documentation if you use GitHub pages."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:39
+msgid ""
+"Read the Docs can be setup in your Read the Docs user account. The "
+"service automates the entire process of building and deploying your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:42
+msgid ""
+"If you don't want to maintain a documentation website for your Python "
+"package, we suggest using the Read the Docs website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:1
+msgid "Using Sphinx to Build Python Package Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:17
+msgid ""
+"On this page we discuss using [Sphinx](https://www.sphinx-doc.org/) to "
+"build your user-facing package documentation. While Sphinx is currently "
+"the most commonly-used tool in the scientific Python ecosystem, you are "
+"welcome to explore other tools to build documentation such as "
+"[mkdocs](https://www.mkdocs.org/) which is gaining popularity in the "
+"Python packaging ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:25
+msgid "Examples of documentation websites that we love:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:27
+msgid "[GeoPandas](https://geopandas.org/en/stable/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:28
+msgid ""
+"[View rst to create landing "
+"page](https://raw.githubusercontent.com/geopandas/geopandas/main/doc/source/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:29
+msgid "[verde](https://www.fatiando.org/verde/latest/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:30
+msgid ""
+"[View verde landing page code - rst "
+"file.](https://github.com/fatiando/verde/blob/main/doc/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:31
+msgid ""
+"[Here is our documentation if you want to see a myST example of a landing"
+" page.](https://github.com/pyOpenSci/python-package-"
+"guide/blob/main/index.md)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:34
+msgid "Sphinx - a static site generator"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:36
+msgid ""
+"Sphinx is a [static-site "
+"generator](https://www.cloudflare.com/learning/performance/static-site-"
+"generator/). A static site generator is a tool that creates html for a "
+"website based upon a set of templates. The html files are then served "
+"\"Statically\" which means that there is no generation or modification of"
+" the files on the fly."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:39
+msgid "Sphinx is written using Python."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:41
+msgid "Sphinx sites can be customized using extensions and themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:43
+msgid ""
+"The functionality of Sphinx can be extended using extensions and themes. "
+"A few examples include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:46
+msgid ""
+"You can apply documentation themes for quick generation of beautiful "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:47
+msgid ""
+"You can [automatically create documentation for your package's functions "
+"and classes (the package's API) from docstrings in your code using the "
+"autodoc extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/autodoc.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:48
+msgid ""
+"You can [run and test code examples in your docstrings using the doctest "
+"extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:49
+msgid ""
+"While Sphinx natively supports the `rST` syntax, you can add custom "
+"syntax parsers to support easier-to-write syntax using tools such as [the"
+" MyST parser](https://myst-parser.readthedocs.io/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:51
+msgid "Commonly used Sphinx themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:53
+msgid ""
+"You are free to use whatever Sphinx theme that you prefer. However, the "
+"most common Sphinx themes used in the Python scientific community "
+"include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:57
+msgid "[pydata-sphinx-theme](https://pydata-sphinx-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:58
+msgid "[sphinx-book-theme](https://sphinx-book-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:59
+msgid "[furo](https://pradyunsg.me/furo/quickstart/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:63
+msgid "This book is created using Sphinx and the `furo` theme."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:1
+msgid "Optimizing your documentation so search engines (and other users) find it"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:3
+msgid ""
+"If you are interested in more people finding your package, you may want "
+"to add some core Sphinx extensions (and theme settings) that will help "
+"search engines such as Google find your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:7
+msgid "Google Analytics"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:11
+msgid ""
+"Google analytics [is not compliant with the European General Data "
+"Protection Regulation (GDPR)](https://matomo.org/blog/2022/05/google-"
+"analytics-4-gdpr/). While there are many components to this regulation, "
+"one of the core elements is that you have to let users know on your site "
+"that you are collecting data and they have to consent. While it is "
+"possible to add infrastructure around Google Analytics to make it close "
+"to following GDPR regulations, the community is slowly shifting away from"
+" Google using open tools such as [Plausible](https://plausible.io/), "
+"[Cloudflare Web Analytics](https://www.cloudflare.com/web-analytics/) and"
+" [Matomo](https://matomo.org) for web analytics."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:13
+msgid ""
+"pyOpenSci is currently looking into free options for open source "
+"developers."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:16
+msgid ""
+"Some of the [sphinx themes such as the `pydata-sphinx-theme` and sphinx-"
+"book-theme have built in support for Google Analytics](https://pydata-"
+"sphinx-theme.readthedocs.io/en/latest/user_guide/analytics.html#google-"
+"analytics). However, if the theme that you chose does not offer Google "
+"Analytics support, you can use the [`sphinxcontrib-gtagjs` "
+"extension](https://github.com/attakei/sphinxcontrib-gtagjs). This "
+"extension will add a Google Analytics site tag to each page of your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:22
+msgid ""
+"[sphinx-sitemap](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/index.html) for search engine "
+"optimization"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:24
+msgid ""
+"While we are trying to move away from Google Analytics do to compliance "
+"and privacy issues, search engine optimization is still important. Google"
+" is the most popular search engine. And if your documentation is search "
+"optimized, users are more likely to find your package!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:30
+msgid ""
+"If you are interested in optimizing your documentation for search engines"
+" such as Google, you want a **sitemap.xml** file. You can submit this "
+"sitemap to Google and it will index your entire site. This over time can "
+"make the content on your site more visible to others when they search."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:36
+msgid "This extension is lightweight."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:38
+msgid ""
+"It [requires that you to add it to your Sphinx `conf.py` extension list "
+"and site your documentation base url](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/getting-started.html)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:40
+msgid "[sphinxext.opengraph](https://github.com/sphinx-doc/sphinxext-opengraph)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:42
+msgid ""
+"OpenGraph is an extension that allows you to add metadata to your "
+"documentation content pages. [The OpenGraph protocol allows other "
+"websites to provide a useful preview of the content on your page when "
+"shared](https://www.freecodecamp.org/news/what-is-open-graph-and-how-"
+"can-i-use-it-for-my-website/#heading-what-is-open-graph). This is "
+"important for when the pages in your documentation are shared on social "
+"media and even for shares on collaboration platforms like Slack and "
+"Discourse."
+msgstr ""
+
+#: ../../documentation/index.md:3
+msgid "Documentation Overview"
+msgstr ""
+
+#: ../../documentation/index.md:3 ../../documentation/index.md:10
+#: ../../documentation/index.md:21 ../../documentation/index.md:42
+msgid "Intro"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Document Your Code (API)"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Package Tutorials"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Write User Documentation"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Contributing File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Development Guide"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Changelog File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Docs for Contributors & Maintainers"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "README file"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Code of Conduct File"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "LICENSE files"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Community Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Sphinx for Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "myST vs Markdown vs rst"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publish Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Website Hosting and Optimization"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publication tools for your docs"
+msgstr ""
+
+#: ../../documentation/index.md:1
+msgid "Documentation for your Open Source Python Package"
+msgstr ""
+
+#: ../../documentation/index.md:55
+msgid ""
+"Please note that the tools discussed here are those that we see commonly "
+"used in the community. As tools evolve we will update this guide. If you "
+"are submitting a package for pyOpenSci peer review and use other tools "
+"that are not listed in our guide to build your package you can still "
+"submit for review! The tools listed here are suggestions, not "
+"requirements. Our requirements are focused on the documentation content "
+"of your package."
+msgstr ""
+
+#: ../../documentation/index.md:65
+msgid "Documentation is critical for your Python package's success"
+msgstr ""
+
+#: ../../documentation/index.md:67
+msgid ""
+"Documentation is as important to the success of your Python open source "
+"package as the code itself."
+msgstr ""
+
+#: ../../documentation/index.md:70
+msgid ""
+"Quality code is of course valuable as its how your package gets the tasks"
+" done. However, if users don't understand how to use your package in "
+"their workflows, then they won't use it."
+msgstr ""
+
+#: ../../documentation/index.md:73
+msgid ""
+"Further, explicitly documenting how to contribute is important if you "
+"wish to build a base of contributors to your package."
+msgstr ""
+
+#: ../../documentation/index.md:76
+msgid "Two types of Python package users"
+msgstr ""
+
+#: ../../documentation/index.md:78
+msgid ""
+"The documentation that you write for your package should target two types"
+" of users:"
+msgstr ""
+
+#: ../../documentation/index.md:81
+msgid "1. Basic Tool Users"
+msgstr ""
+
+#: ../../documentation/index.md:83
+msgid ""
+"Basic tool users are the people who will use your package code in their "
+"Python workflows. They might be new(er) to Python and/or data science. Or"
+" expert programmers. But they might not have a background in software "
+"development. These users need to know:"
+msgstr ""
+
+#: ../../documentation/index.md:88
+msgid "How to install your package"
+msgstr ""
+
+#: ../../documentation/index.md:89
+msgid "How to install dependencies that your package requires"
+msgstr ""
+
+#: ../../documentation/index.md:90
+msgid "How to get started using the code base"
+msgstr ""
+
+#: ../../documentation/index.md:91
+msgid ""
+"Information on how to cite your code / give you credit if they are using "
+"it in a research application."
+msgstr ""
+
+#: ../../documentation/index.md:93
+msgid ""
+"Information on the license that your code uses so they know how they can "
+"or can't use the code in an operational setting."
+msgstr ""
+
+#: ../../documentation/index.md:96
+msgid "2. Potential tool contributors"
+msgstr ""
+
+#: ../../documentation/index.md:98
+msgid ""
+"The other subset of users are more experienced and/or more engaged with "
+"your package. As such they are potential contributors. These users:"
+msgstr ""
+
+#: ../../documentation/index.md:102
+msgid "might have a software development background,"
+msgstr ""
+
+#: ../../documentation/index.md:103
+msgid ""
+"might also be able to contribute bug fixes to your package or updates to "
+"your documentation"
+msgstr ""
+
+#: ../../documentation/index.md:104
+msgid ""
+"might also just be users who will find spelling errors in your "
+"documentation, or bugs in your tutorials."
+msgstr ""
+
+#: ../../documentation/index.md:106
+msgid ""
+"These users need all of the things that a basic user needs. But, they "
+"also need to understand how you'd like for them to contribute to your "
+"package. These potential contributors need:"
+msgstr ""
+
+#: ../../documentation/index.md:110
+msgid ""
+"A development guide to help them understand the infrastructure used in "
+"your package repository."
+msgstr ""
+
+#: ../../documentation/index.md:111
+msgid ""
+"Contributing guidelines that clarify the types of contributions that you "
+"welcome and how you'd prefer those contributions to be submitted."
+msgstr ""
+
+#: ../../documentation/index.md:114
+msgid ""
+"It's important to remember that the definition of what a contribution is "
+"can be broad. A contribution could be something as simple as a bug "
+"report. Or fixing a spelling issue in your documentation. Or it could be "
+"a code fix that includes a new test that covers an edge-case that they "
+"discovered."
+msgstr ""
+
+#: ../../documentation/index.md:120
+msgid "Documentation elements that pyOpenSci looks for reviewing a Python package"
+msgstr ""
+
+#: ../../documentation/index.md:122
+msgid ""
+"In the pyOpenSci open peer review, we look for a documentation structure "
+"that supports both your tool users and potential contributors. The files "
+"and elements that we look for specifically can be found in our peer "
+"review check list (see link below)."
+msgstr ""
+
+#: ../../documentation/index.md:127
+msgid ""
+"In this guide, we discuss each required element, and also discuss other "
+"elements that you should consider in your package's documentation in more"
+" detail."
+msgstr ""
+
+#: ../../documentation/index.md:131
+msgid "View pyOpenSci peer review check list"
+msgstr ""
+
+#: ../../documentation/index.md:138
+msgid ""
+"Image showing the files in the the MovingPandas GitHub repository. Files "
+"in the image include code of conduct.md contributing.md license.txt and "
+"readme.md."
+msgstr ""
+
+#: ../../documentation/index.md:144
+msgid ""
+"An example from the MovingPandas GitHub repository with all of the major "
+"files in it including CONTRIBUTING.md, README.md, CODE_OF_CONDUCT.md and "
+"a LICENSE.txt file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/index.md:147
+msgid "What's next in this Python package documentation section?"
+msgstr ""
+
+#: ../../documentation/index.md:149
+msgid ""
+"In this section of the pyOpenSci package guide, we will walk you through "
+"best practices for setting up documentation for your Python package. We "
+"will also suggest tools that you can use to build your user-facing "
+"documentation website."
+msgstr ""
+
+#: ../../documentation/index.md:154
+msgid "Todo"
+msgstr ""
+
+#: ../../documentation/index.md:156
+msgid ""
+"Python version support You should always be explicit about which versions"
+" of Python your package supports. Keeping compatibility with old Python "
+"versions can be difficult as functionality changes. A good rule of thumb "
+"is that the package should support, at least, the latest three Python "
+"versions (e.g., 3.8, 3.7, 3.6)."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:1
+msgid "CHANGELOG.md Guide"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:3
+msgid "Introduction"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:5
+msgid ""
+"The `CHANGELOG.md` document serves as a valuable resource for developers "
+"and users alike to track the evolution of a project over time. "
+"Understanding the structure and purpose of a changelog helps users and "
+"contributors stay informed about new features, bug fixes, and other "
+"changes introduced in each release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:7
+msgid "What is CHANGELOG.md?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:9
+msgid ""
+"The primary purpose of `CHANGELOG.md` is to provide a record of notable "
+"changes made to the project with each new release. This document helps "
+"users understand what has been added, fixed, modified, or removed with "
+"each version of the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:11
+msgid ""
+"[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) is a great, "
+"simple resource for understanding what a changelog is and how to create a"
+" good changelog. It also includes examples of things to avoid."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:13
+msgid "Versioning your Python package and semantic versioning"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:16
+msgid ""
+"An important component of a package that serves as the backbone behind "
+"the changelog file is a good versioning scheme. Semantic Versioning is "
+"widely used across Python packages."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:17
+msgid ""
+"[Creating New Versions of Your Python Package](../../package-structure-"
+"code/python-package-versions.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:18
+msgid "[Semantic Versioning](https://semver.org)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:21
+msgid "Why is it important?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:23
+msgid ""
+"A well-maintained changelog is essential for transparent communication "
+"with users and developers. It serves as a centralized hub for documenting"
+" changes and highlights the progress made in each release. By keeping the"
+" changelog up-to-date, project maintainers can build trust with their "
+"user base and demonstrate their commitment to improving the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:25
+msgid "What does it include?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:27
+msgid ""
+"The contents of a `CHANGELOG.md` file typically follow a structured "
+"format, detailing the changes introduced in each release. While the exact"
+" format may vary depending on the project's conventions, some common "
+"elements found in changelogs for Python packages include:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:29
+msgid ""
+"**Versioning**: Clear identification of each release version using "
+"semantic versioning or another versioning scheme adopted by the project."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:31
+msgid ""
+"**Release Date**: The date when each version was released to the public, "
+"providing context for the timeline of changes."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:33
+msgid ""
+"**Change Categories**: Organizing changes into categories such as "
+"\"Added,\" \"Changed,\" \"Fixed,\" and \"Removed\" to facilitate "
+"navigation and understanding."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:35
+msgid ""
+"**Description of Changes**: A concise description of the changes made in "
+"each category, including new features, enhancements, bug fixes, and "
+"deprecated functionality."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:37
+msgid ""
+"**Links to Issues or Pull Requests**: References to relevant issue "
+"tracker items or pull requests associated with each change, enabling "
+"users to access more detailed information if needed."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:39
+msgid ""
+"**Upgrade Instructions**: Guidance for users on how to upgrade to the "
+"latest version, including any breaking changes or migration steps they "
+"need to be aware of."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:41
+msgid ""
+"**Contributor Recognition**: Acknowledgment of contributors who made "
+"significant contributions to the release, fostering a sense of community "
+"and appreciation for their efforts."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:43
+msgid "How do maintainers use it?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:45
+msgid "Often you will see a changelog that documents a few things:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:47
+msgid "Unreleased Section"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:49
+msgid ""
+"Unreleased commits are at the top of the changelog, commonly in an "
+"`Unreleased` section. This is where you can add new fixes, updates and "
+"features that have been added to the package since the last release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:51
+msgid "This section might look something like this:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:59
+msgid "Release Sections"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:61
+msgid ""
+"When you are ready to make a new release, you can move the elements into "
+"a section that is specific to that new release number."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:63
+msgid ""
+"This specific release section will sit below the unreleased section and "
+"can include any updates, additions, deprecations and contributors."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:65
+msgid ""
+"The unreleased section then always lives at the top of the file and new "
+"features continue to be added there. At the same time, after releasing a "
+"version like v1.0 all of its features remain in that specific section."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:83
+msgid "What does it look like?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:85
+msgid ""
+"This example comes from [Devicely](https://github.com/hpi-"
+"dhc/devicely/blob/main/CHANGELOG.md), a pyOpenSci accepted package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:3
+msgid "The CODE_OF_CONDUCT file - Python Packaging"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:5
+msgid "Example CODE_OF_CONDUCT files"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:8
+msgid ""
+"[SciPy Code of Conduct file - notice they included theirs in their "
+"documentation](https://docs.scipy.org/doc/scipy/dev/conduct/code_of_conduct.html)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:9
+msgid ""
+"[fatiando CODE_OF_CONDUCT.md "
+"file](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:12
+msgid ""
+"Your package should have a `CODE_OF_CONDUCT.md` file located the root of "
+"the repository. Once you have people using your package, you can consider"
+" the package itself as having a community around it. Some of this "
+"community uses your tool. These users may have questions or encounter "
+"challenges using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:18
+msgid ""
+"Others in the community might want to contribute to your tool. They might"
+" fix bugs, update documentation and engage with the maintainer team."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:22
+msgid "Why you need a CODE_OF_CONDUCT"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:24
+msgid ""
+"In order to keep this community healthy and to protect yourself, your "
+"maintainer team and your users from unhealthy behavior, it is important "
+"to have a [`CODE_OF_CONDUCT`](https://opensource.guide/code-of-conduct/)."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:28
+msgid ""
+"The `CODE_OF_CONDUCT` is important as it establishes what you expect in "
+"terms of how users and contributors interact with maintainers and each "
+"other. It also establishes rules and expectations which can then be "
+"enforced if need be to protect others from harmful and/or negative "
+"behaviors."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:34
+msgid ""
+"If you are not comfortable with creating your own `CODE_OF_CONDUCT` text,"
+" we encourage you to adopt the `CODE_OF_CONDUCT` language used in the "
+"[Contributor Covenant](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/). [Many other "
+"communities](https://www.contributor-covenant.org/adopters/) have adopted"
+" this `CODE_OF_CONDUCT` as their own. See the [Fatiando a Terra "
+"Geoscience Python community's example "
+"here.](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:2
+msgid "Your Python Package CONTRIBUTING File"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:4
+msgid ""
+"The **CONTRIBUTING.md** is the landing page guide for your project's "
+"contributors. It outlines how contributors can get involved, the "
+"contribution types that you welcome, and how contributors should interact"
+" or engage with you and your maintainer team. The contributor guide "
+"should also link to get-started resources that overview how to set up "
+"development environments, what type of workflow you expect on "
+"GitHub/GitLab, and anything else that contributors might need to get "
+"started."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:6
+msgid ""
+"This file benefits maintainers and contributors. For contributors, it "
+"provides a roadmap that helps them get started and makes their first "
+"contribution easier. For maintainers, it answers commonly asked questions"
+" and reduces the burden of explaining your process to every person who "
+"wants to contribute. This document creates a more collaborative and "
+"efficient development process for everyone."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:8
+msgid "CONTRIBUTING files lower barriers to entry"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:10
+msgid ""
+"The contributing file lowers barriers to entry for new and seasoned "
+"contributors as it provides a roadmap."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:12
+msgid ""
+"**For Contributors**: It provides clear instructions on contributing, "
+"from reporting issues to submitting pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:13
+msgid ""
+"**For Maintainers**: It streamlines contributions by setting expectations"
+" and standardizing processes, reducing the time spent clarifying common "
+"questions or handling incomplete issues or pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:15
+msgid ""
+"Including a well-written CONTRIBUTING.md file in your project is one way "
+"of making it more welcoming and open to new and seasoned contributors. It"
+" also helps create a smoother workflow for everyone involved."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:17
+msgid "Make it welcoming"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:19
+msgid ""
+"Make the guide welcoming. Use accessible language to encourage "
+"participation from contributors of all experience levels. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:21
+msgid ""
+"Avoid technical jargon or explain terms when necessary (for example, "
+"\"fork the repository\")."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:22
+msgid ""
+"Include a friendly introduction, such as \"Thank you for your interest in"
+" contributing! We're excited to collaborate with you.\""
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:23
+msgid "Highlight that all contributions, no matter how small, are valued."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:25
+msgid "What a CONTRIBUTING.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:27
+msgid "Example contributing files"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:30
+msgid ""
+"[PyGMT contributing "
+"file](https://github.com/GenericMappingTools/pygmt/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:31
+msgid ""
+"[Verde's contributing "
+"file](https://github.com/fatiando/verde/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:34
+msgid ""
+"Your Python package should include a file called **CONTRIBUTING.md** "
+"located in the root of your repository next to [your **README.md** file"
+"](readme-file)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:37
+msgid "The CONTRIBUTING.md file should include information about:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:39
+msgid "The types of contributions that you welcome"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:41
+msgid ""
+"Example: We welcome contributions of all kinds. If you want to address an"
+" existing issue, check out our issues in this repository and comment on "
+"the one that you'd like to help with. Otherwise, you can open a new "
+"issue..."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:43
+msgid ""
+"How you'd like contributions to happen. Clearly outline your contribution"
+" process. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:44
+msgid "Should contributors address open issues"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:45
+msgid "Are new issues welcome?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:46
+msgid ""
+"Should contributors open a pull request (PR) directly or discuss changes "
+"first?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:48
+msgid ""
+"Include instructions for the fork and pull request workflow and link to "
+"resources or guides explaining these steps (if available)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:49
+msgid ""
+"Guidelines that you have in place for users submitting issues, pull "
+"requests, or asking questions."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:51
+msgid ""
+"If you have a [development guide](development-guide), link to it. This "
+"guide should provide clear instructions on how to set up your development"
+" environment locally. It also should overview CI tools that you have that"
+" could simplify the contribution process (for example, pre-[commit.ci "
+"bot](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/code-style-linting-format.html#pre-commit-ci), and so on), [linters,"
+" code formatters](https://www.pyopensci.org/python-package-guide/package-"
+"structure-code/code-style-linting-format.html#code-linting-formatting-"
+"and-styling-tools), and so on."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:53
+msgid ""
+"This guide should also include information for someone interested in "
+"asking questions. Some projects accept questions as GitHub or GitLab "
+"issues. Others use GitHub Discussions, Discourse, or even a Discord "
+"server."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:56
+msgid "The contributing file should also include:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:58
+msgid "A link to your [code of conduct](coc-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:59
+msgid "A link to your project's [LICENSE](license-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:60
+msgid "A link to a [development guide](development-guide) if you have one"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:62
+msgid "Summary"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:64
+msgid ""
+"A well-crafted CONTRIBUTING.md file is welcome mat for your project! By "
+"providing clear instructions, helpful resources, and a welcoming tone, "
+"you make it easier for contributors to get involved and build a stronger,"
+" more collaborative community around your project."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:2
+msgid "What the development guide for your Python package should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:4
+msgid ""
+"Ideally, your package should also have a development guide. This file may"
+" live in your package documentation and should be linked to from your "
+"CONTRIBUTING.md file (discussed above). A development guide should "
+"clearly show technically proficient users how to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:8
+msgid "Set up a development environment locally to work on your package"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:9
+msgid "Run the test suite"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:10
+msgid "Build documentation locally"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:12
+msgid "The development guide should also have guidelines for:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:14
+msgid ""
+"code standards including docstring style, code format and any specific "
+"code approaches that the package follows."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:16
+msgid ""
+"It's also helpful to specify the types of tests you request if a "
+"contributor submits a new feature or a change to an existing feature that"
+" will not be covered by your existing test suite."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:18
+msgid ""
+"If you have time to document it, it's also helpful to document your "
+"maintainer workflow and release processes."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:20
+msgid "Why a development guide is important"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:22
+msgid "It's valuable to have a development guide, in the case that you wish to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:25
+msgid "Onboard new maintainers."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:26
+msgid ""
+"Allow technically inclined contributors to make thoughtful and useful "
+"code based pull requests to your repository."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:28
+msgid ""
+"It also is important to pyOpenSci that the maintenance workflow is "
+"documented in the case that we need to help you onboard new maintainers "
+"in the future."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:33
+msgid ""
+"A well thought out continuous integration setup in your repository can "
+"allow users to skip building the package locally (especially if they are "
+"just updating text)."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:38
+msgid ""
+"A development guide, while strongly recommended, is not a file that "
+"pyOpenSci requires a package to have in order to be eligible for review. "
+"Some maintainers may also opt to include the development information in "
+"their contributing guide."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:44
+msgid ""
+"[The Mozilla Science Lab website has a nice outline of things to consider"
+" when creating a contributing guide](https://mozillascience.github.io"
+"/working-open-workshop/contributing/)"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:1
+msgid "Documentation Files That Should be in your Python Package Repository"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:3
+msgid ""
+"In this section of the Python packaging guide, we review all of the files"
+" that you should have in your Python package repository. Your Python "
+"package should, at a minimum have the following files:"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:7
+msgid ""
+"The files mentions above (README, Code of Conduct, license file, etc) are"
+" used as a measure of package community health on many online platforms. "
+"Below, you can see an example how GitHub evaluates community health. This"
+" community health link is available for all GitHub repositories."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:13
+msgid ""
+"Image showing that the MovingPandas GitHub repository community health "
+"page with green checks next to each file including a description, README,"
+" code of conduct, contributing, license and issue templates. Note that "
+"Security policy has a yellow circle next to it as that is missing from "
+"the repo."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:19
+msgid ""
+"GitHub community health looks for a readme file among other elements when"
+" it evaluates the community level health of your repository. This example"
+" is from the [MovingPandas GitHub "
+"repo](https://github.com/movingpandas/movingpandas/community) *(screen "
+"shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:22
+msgid ""
+"[Snyk](https://snyk.io/advisor/python) is another well-known company that"
+" keeps tabs on package health. Below you can see a similar evaluation of "
+"files in the GitHub repo as a measure of community health."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:26
+msgid ""
+"Screenshot of the Snyk page for movingpandas. It shows that the "
+"repository has a README file, contributing file, code of conduct. It also"
+" shows that it has 30 contributors and no funding. The package health "
+"score is 78/100."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:32
+msgid ""
+"Screenshot showing [SNYK](https://snyk.io/advisor/python/movingpandas) "
+"package health for moving pandas. Notice both platforms look for a README"
+" file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:8
+msgid "License files for Python open source software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:10
+msgid ""
+"Want to learn how to add a license file to your GitHub repository? Check "
+"out this lesson."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:17
+msgid "What is a Open Source License file?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:19
+msgid ""
+"When we talk about LICENSE files, we are referring to a file in your "
+"GitHub or GitLab repository that contains legally binding language that "
+"describes to your users how they can legally use (and not use) your "
+"package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:23
+msgid "Why licenses are important"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:25
+msgid ""
+"A license file is important for all open source projects because it "
+"protects both you as a maintainer and your users. The license file helps "
+"your users and the community understand:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:27
+msgid "How they can use your software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:28
+msgid "Whether the software can be reused or adapted for other purposes"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:29
+msgid "How people can contribute to your project"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:31
+msgid "and more."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:33
+msgid ""
+"[Read more about why license files are critical in protecting both you as"
+" a maintainer and your users of your scientific Python open source "
+"package.](https://opensource.guide/legal/#just-give-me-the-tldr-on-what-i"
+"-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:35
+msgid "Where to store your license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:37
+msgid ""
+"Your `LICENSE` file should be stored at root of your GitHub / GitLab "
+"repository."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:39
+msgid ""
+"Some maintainers customize the language in their license files for "
+"specific reasons. However, if you are just getting started, we suggest "
+"that you select a permissive license and then use the legal language "
+"templates provided both by GitHub and/or the "
+"[choosealicense.com](https://choosealicense.com/) website."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:42
+msgid ""
+"Licenses are legally binding, as such you should avoid trying to create "
+"your own license unless you have the guidance of legal council."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:44
+msgid "Use open permissive licenses when possible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:46
+msgid ""
+"We generally suggest that you use a permissive, license that is [Open "
+"Software Initiative (OSI) approved](https://opensource.org/license). If "
+"you are [submitting your package to pyOpenSci for peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), then we "
+"require an OSI approved license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:50
+msgid "Copyleft licenses"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:51
+msgid ""
+"The other major category of licenses are [\"copyleft\" "
+"licenses](https://en.wikipedia.org/wiki/Copyleft). Copyleft licenses "
+"require people that use your work to redistribute it with the same (or "
+"greater) rights to modify, copy, share, and redistribute it. In other "
+"words, copyleft licenses prohibit someone taking your work, making a "
+"proprietary version of it, and redistributing it without providing the "
+"source code so others can do the same. Copyleft licenses are \"sticky\" "
+"in that they are designed to ensure that more free software is created."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:56
+#, python-brace-format
+msgid ""
+"The difference between copyleft and permissive licenses is an important "
+"cultural divide in free and open source software (e.g., see "
+"{footcite}`hunterReclaimingComputingCommons2016`, "
+"{footcite}`gnuprojectWhatFreeSoftware2019`, "
+"{footcite}`gnuprojectWhatCopyleft2022`). It is important to understand "
+"this difference when choosing your license. Copyleft licenses represents "
+"the \"free\" part of \"free and open source software\". Free and open "
+"source software is intrinsically political, and it is important to be "
+"aware of power dynamics in computing as well as the practical problems of"
+" license compatibility (discussed below)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:61
+msgid "How to choose a license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:63
+msgid ""
+"To select your license, we suggest that you use GitHub's [Choose a "
+"License tool](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:66
+msgid ""
+"If you choose your license when creating a new GitHub repository, you can"
+" also automatically get a text copy of the license file to add to your "
+"repository. However in some cases the license that you want is not "
+"available through that online process."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "License recommendations from the SciPy package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:72
+msgid ""
+"[The SciPy documentation has an excellent overview of "
+"licenses.](https://docs.scipy.org/doc/scipy/dev/core-"
+"dev/index.html#licensing) One of the key elements that these docs "
+"recommend is ensuring that the license that you select is compatible with"
+" licenses used in many parts of the scientific Python ecosystem. Below is"
+" a highlight of this text which outlines license that are compatible with"
+" the modified BSD license that SciPy uses."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:78
+msgid ""
+"Other licenses that are compatible with the modified BSD license that "
+"SciPy uses are 2-clause BSD, MIT and PSF. Incompatible licenses are GPL, "
+"Apache and custom licenses that require attribution/citation or prohibit "
+"use for commercial purposes."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:80
+msgid ""
+"If your primary goal is for your code to be used by other, major packages"
+" in the scientific ecosystem, we also recommend that you consider using "
+"either BSD or MIT as your license. If you are unsure, the MIT license "
+"tends to be a simpler easier-to-understand option."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:85
+msgid ""
+"Important: make sure that you closely follow the guidelines outlines by "
+"the License that you chose"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:87
+msgid ""
+"Every license has different guidelines in terms of what code you can use "
+"in your package and also how others can (or can not) use the code in your"
+" package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:90
+msgid ""
+"If you borrow code from other tools or online sources, make sure that the"
+" license for the code that you are using also complies with the license "
+"that you selected for your package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:94
+msgid ""
+"A useful way to think about license compatibility is the distinction "
+"between **\"inbound\"** and **\"outbound\"** compatibility. \"Inbound\" "
+"licenses are those that cover the software you plan to include in your "
+"package. Your package is protected by an \"outbound\" license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:98
+msgid ""
+"**Permissive licenses** like BSD and MIT have few **outbound** "
+"restrictions - they can be used in any way by downstream consumers, "
+"including making them proprietary. This is why they are favored by many "
+"businesses and large packages that want to be adopted by businesses. "
+"Permissive licenses have more **inbound** restrictions - they can't use "
+"software that requires more freedoms to be preserved than they do, like "
+"copyleft licenses. A package licensed under MIT needs to take special "
+"care when including or modifying a package licensed under the GPL-3."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:103
+msgid ""
+"**Copyleft licenses** like GPL-3 have more **outbound** restrictions - "
+"they require more of packages that include, use, modify, and reproduce "
+"them. This is the purpose of copyleft licenses, to ensure that derivative"
+" works remain free and open source. They have fewer **inbound** "
+"restrictions - a GPL-3 licensed package can include any other "
+"permissively licensed and most copyleft licensed packages."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Compatible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Dependency (\"Inbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Your Package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Downstream Package (\"Outbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Permissive"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Copyleft"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:118
+msgid "An example of how a license determine how code can be reused"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:121
+msgid ""
+"Let's use StackOverflow as an example that highlights how a license "
+"determines how code can or can not be used."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:123
+msgid ""
+"[Stack Overflow uses a Creative Commons Share Alike "
+"license.](https://stackoverflow.com/help/licensing). The sharealike "
+"license requires you to use the same sharealike license when you reuse "
+"any code from Stack Overflow."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:125
+#, python-brace-format
+msgid ""
+"This means that from a legal perspective, if you copy code from the Stack"
+" Overflow website and use it in your package that is licensed "
+"differently, say with a MIT license, you are violating Stack Overflow's "
+"license requirements! This would not be true with a GPL licensed package."
+" `GPL-3` packages can include code licensed by `CC-BY-SA` "
+"{footcite}`creativecommonsShareAlikeCompatibilityGPLv32015`."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:128
+msgid "🚨 Proceed with caution! 🚨"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:131
+msgid "What about software citation?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:133
+msgid ""
+"While many permissive licenses do not require citation, we strongly "
+"encourage that you cite all software that you use in papers, blogs, and "
+"other publications. You tell your users how to cite your package by using"
+" a [citation.cff file](https://docs.github.com/en/repositories/managing-"
+"your-repositorys-settings-and-features/customizing-your-repository/about-"
+"citation-files)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:136
+msgid ""
+"Additional resources on software citation The Turing Way has excellent "
+"guides on this topic:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:139
+msgid ""
+"[CITATION.cff files](https://book.the-turing-"
+"way.org/communication/citable/citable-cff) — detailed guide on creating "
+"and maintaining citation files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:140
+msgid ""
+"[Software citation pathways](https://book.the-turing-way.org/pathways"
+"/pathways-software-citation) — overview of how software citation works in"
+" practice"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:142
+msgid "Citation.cff files: Making your software citable"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:144
+msgid ""
+"A `CITATION.cff` file is a machine-readable file that provides citation "
+"information for your software package. The \"cff\" stands for \"Citation "
+"File Format,\" which is a standardized format for software citation "
+"metadata."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:146
+msgid "What citation.cff files add to your repository"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:148
+msgid ""
+"When you add a `CITATION.cff` file to your repository, GitHub "
+"automatically detects it and displays a \"Cite this repository\" button. "
+"This makes it easy for users to properly cite your software. The file "
+"contains standardized citation information that tools and services can "
+"automatically read and use. GitHub will generate both APA and BibTeX "
+"citation formats for users."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:150
+msgid "How dates are tracked in citation.cff files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:152
+msgid ""
+"The citation file tracks important dates for your software. The `date-"
+"released` field shows when the current version was released. The `date-"
+"published` field shows when the software was first made available. You "
+"also include a `version` field with the specific version number."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:154
+msgid ""
+"You should update these dates with each new release so people cite the "
+"correct version of your software."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:156
+msgid "Integration with Zenodo"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:158
+msgid ""
+"Citation.cff files work well with Zenodo, which is a popular place to "
+"store research software and get DOIs. When you create a Zenodo release, "
+"it can automatically pull information from your citation file. This keeps"
+" your citation information the same between GitHub and Zenodo. You can "
+"also include your Zenodo DOI in the citation file. Each time you make a "
+"new GitHub release, it can create a new Zenodo version with updated "
+"citation information."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:161
+msgid "Here's a basic example of what a `CITATION.cff` file might look like:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:177
+msgid "References"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:3
+msgid "README File Guidelines and Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:5
+msgid ""
+"Your **README.md** file should be located in the root of your GitHub "
+"repository. The **README.md** file is important as it is often the first "
+"thing that someone sees before they install your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:9
+msgid "The README.md file is the landing page of:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:11
+msgid ""
+"Your package as it appears on a repository site such as PyPI or "
+"Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:12
+msgid "Your package's GitHub repository"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:14
+msgid ""
+"Your README.md file is also used as a measure of package and community "
+"health on sites such as:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:17
+msgid ""
+"[GitHub community health for MovingPandas (available for all "
+"repositories)](https://github.com/movingpandas/movingpandas/community) "
+"and [Snyk - MovingPandas "
+"example](https://snyk.io/advisor/python/movingpandas)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:19
+msgid ""
+"README landing page screenshot for the Pandera package. It has the "
+"Pandera logo at the top - which has two arrows in a chevron pattern "
+"pointing downward within a circle. Subtitle is statistical data testing "
+"toolkit. A data validation library for scientists, engineering, and "
+"analytics seeking correctness. Below that are a series of badges "
+"including CI tests passing, docs passing, version of Pandera on pypi "
+"(0.13.4), MIT license and that it has been pyOpenSci peer reviewed. There"
+" are numerous badges below that. Finally below the badges the text says, "
+"Pandera provides a flexible and expressive API for performing data "
+"validation on dataframe-like objects to make data processing pipelines "
+"more readable and robust."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:25
+msgid ""
+"Your GitHub repository landing page highlights the README.md file. Here "
+"you can see the README.md file for the pyOpenSci package "
+"[Pandera](https://github.com/unionai-oss/pandera). *(screen shot taken "
+"Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:28
+msgid ""
+"Thus, it is important that you spend some time up front creating a high "
+"quality **README.md** file for your Python package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:32
+msgid ""
+"An editor or the editor in chief will ask you to revise your README file "
+"before a review begins if it does not meet the criteria specified below."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:35
+msgid "Please go through this list before submitting your package to pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:52
+msgid "What your README.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:54
+msgid ""
+"Your **README.md** file should contain the following things (listed from "
+"top to bottom):"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:56
+msgid "✔️ Your package's name"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:58
+msgid ""
+"Ideally your GitHub repository's name is also the name of your package. "
+"The more self explanatory that name is, the better."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:61
+msgid ""
+"✔️ Badges for current package version, continuous integration and test "
+"coverage"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:63
+msgid ""
+"Badges are a useful way to draw attention to the quality of your project."
+" Badges assure users that your package is well-designed, tested, and "
+"maintained. They are also a useful maintenance tool to evaluate if things"
+" are building properly. A great example of this is adding a [Read the "
+"Docs status badge](https://docs.readthedocs.io/en/stable/badges.html) to "
+"your README.md file to quickly see when the build on that site fails."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:69
+msgid ""
+"It is common to provide a collection of badges towards the top of your "
+"README file for others to quickly browse."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:72
+msgid "Some badges that you might consider adding to your README file include:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:74
+msgid "Current version of the package on PyPI / Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid ""
+"Example: [](https://pypi.org/project/pandera/)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid "PyPI version shields.io"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid ""
+"Status of tests (pass or fail) - Example: [](https://github.com"
+"/unionai-"
+"oss/pandera/actions?query=workflow%3A%22CI+Tests%22+branch%3Amain)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid "CI Build"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid ""
+"Documentation build - Example: "
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid "Docs Building"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid ""
+"DOI (for citation) Example: "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid "DOI"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid ""
+"Once you package is accepted to pyOpenSci, we will provide you with a "
+"badge to add to your repository that shows that it has been reviewed. "
+"[](https://github.com/pyOpenSci/software-"
+"submission/issues/12)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid "pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:92
+msgid ""
+"Beware of the overuse of badges! There is such a thing as too much of a "
+"good thing (which can overload a potential user!)."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:95
+msgid "✔️ A short, easy-to-understand description of what your package does"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:97
+msgid ""
+"At the top of your README file you should have a short, easy-to-"
+"understand, 1-3 sentence description of what your package does. This "
+"section should clearly state your goals for the package. The language in "
+"this description should use less technical terms so that a variety of "
+"users with varying scientific (and development) backgrounds can "
+"understand it."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:103
+msgid ""
+"In this description, it's useful to let users know how your package fits "
+"within the broader scientific Python package ecosystem. If there are "
+"other similar packages or complementary package mentions them here in 1-2"
+" sentences."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:108
+msgid ""
+"Consider writing for a high school level (or equivalent) level. This "
+"level of writing is often considered an appropriate level for scientific "
+"content that serves a variety of users with varying backgrounds."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:112
+msgid ""
+"The goal of this description is to maximize accessibility of your "
+"**README** file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:116
+msgid "✔️ Installation instructions"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:118
+msgid ""
+"Include instructions for installing your package. If you have published "
+"the package on both PyPI and Anaconda.org, be sure to include "
+"instructions for both."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:121
+msgid "✔️ Document any additional setup required"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:123
+msgid ""
+"Add any additional setup required such as authentication tokens, to get "
+"started using your package. If setup is complex, consider linking to an "
+"installation page in your online documentation here rather than over "
+"complicating your README file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:128
+msgid "✔️ Brief demonstration of how to use the package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:130
+msgid ""
+"This description ideally includes a brief, quick start code example that "
+"shows a user how to get started using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:133
+msgid "✔️ Descriptive links to package documentation, short tutorials"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:135
+msgid "Include descriptive links to:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:137
+msgid "The package's documentation page."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:138
+msgid "Short tutorials that demonstrate application of your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:140
+msgid "Too Much Of A Good Thing"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:143
+msgid ""
+"Try to avoid including several tutorials in the README.md file itself. "
+"This too will overwhelm the user with information."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:145
+msgid ""
+"A short quick-start code example that shows someone how to use your "
+"package is plenty of content for the README file. All other tutorials and"
+" documentation should be presented as descriptive links."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:151
+msgid "✔️ A Community Section with Links to Contributing Guide, Code of Conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:153
+msgid "Use your README.md file to direct users to more information on:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:155
+msgid "Contributing to your package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:156
+msgid "Development setup for more advanced technical contributors"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:157
+msgid "Your code of conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:158
+msgid "Licensing information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:160
+msgid ""
+"All of the above files are important for building community around your "
+"project."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:163
+msgid "✔️ Citation information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:165
+msgid ""
+"Finally be sure to include instructions on how to cite your package. "
+"Citation should include the DOI that you want used when citing your "
+"package, and any language that you'd like to see associated with the "
+"citation."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:169
+msgid "README Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:173
+msgid ""
+"Below are some resources on creating great README.md files that you might"
+" find helpful."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:176
+msgid ""
+"[How to Write a Great README - Bane "
+"Sullivan](https://github.com/banesullivan/README)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:177
+msgid ""
+"[Art of README - Kira (@hackergrrl)](https://github.com/hackergrrl/art-"
+"of-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+#, python-format
+msgid ""
+"[Standard Readme - Richard Littauer](https://github.com/RichardLitt"
+"/standard-readme) [](https://github.com/RichardLitt/standard-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+msgid "standard-readme compliant"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:179
+msgid ""
+"[Standard Readme pre-commit hooks](https://github.com/tkoyama010"
+"/standard-readme-pre-commit)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:1
+msgid "Create tutorials in your Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:6
+msgid ""
+"Your package should have tutorials that make it easy for a user to get "
+"started using your package. Ideally, those tutorials also can be run from"
+" start to finish providing a second set of checks (on top of your test "
+"suite) to your package's code base."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:11
+msgid ""
+"On this page, we review two Sphinx extensions (`sphinx-gallery` and "
+"`nbsphinx`) that allow you to create reproducible tutorials that are run"
+" when your Sphinx documentation builds."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:15
+msgid "Create Python package tutorials that run when you build your docs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:17
+msgid ""
+"Adding well constructed tutorials to your package will make it easier for"
+" someone new to begin using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:20
+msgid ""
+"There are two Sphinx tools that make it easy to add tutorials to your "
+"package:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:22
+msgid "[Sphinx Gallery](https://sphinx-gallery.github.io/stable/index.html) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:23
+msgid "[NbSphinx](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:25
+msgid "Both of these tools act as Sphinx extensions and:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:27
+msgid ""
+"Support creating a gallery type page in your Sphinx documentation where "
+"users can explore tutorials via thumbnails."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:28
+msgid ""
+"Run the code in your tutorials adding another level of \"testing\" for "
+"your package as used."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:29
+msgid "Render your tutorials with Python code and plot outputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:31
+msgid "[sphinx gallery:](https://sphinx-gallery.github.io/stable/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:33
+msgid ""
+"If you prefer to write your tutorials using Python **.py** scripts, you "
+"may enjoy using Sphinx gallery. Sphinx gallery uses **.py** files with "
+"text and code sections that mimic the Jupyter Notebook format. When you "
+"build your documentation, the gallery extension:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:38
+msgid ""
+"Runs the code in each tutorial. Running your tutorial like this acts as a"
+" check to ensure your package's functions, classes, methods, and "
+"attributes (ie the API) are working as they should."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:39
+msgid ""
+"Creates a downloadable Jupyter Notebook **.ipynb** file and a **.py** "
+"script for your tutorial that a user can quickly download and run."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:40
+msgid ""
+"Creates a rendered **.html** page with the code elements and code "
+"outputs in a user-friendly tutorial gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:41
+msgid ""
+"Creates a gallery landing page with visual thumbnails for each tutorial "
+"that you create."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:44
+msgid ""
+"Image showing the gallery output provided by sphinx-gallery where each "
+"tutorial is in a grid and the tutorial thumbnails are created from a "
+"graphic in the tutorial."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:50
+msgid ""
+"`sphinx-gallery` makes it easy to create a user-friendly tutorial "
+"gallery. Each tutorial has a download link where the user can download a "
+"**.py** file or a Jupyter Notebook. And it renders the tutorials in a "
+"user-friendly grid."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:54
+msgid "Below you can see what a tutorial looks like created with sphinx-gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:56
+msgid ""
+"Image showing ta single tutorial from Sphinx gallery. The tutorial shows "
+"a simple matplotlib created plot and associated code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:62
+msgid ""
+"`sphinx-gallery` tutorials by default include download links for both the"
+" python script (**.py** file) and a Jupyter notebook (**.ipynb** file) at"
+" the bottom."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:66
+msgid "Sphinx Gallery benefits"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:67
+msgid "easy-to-download notebook and .py outputs for each tutorials."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:68
+msgid ".py files are easy to work with in the GitHub pull request environment."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:69
+msgid "Nice gridded gallery output."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:70
+msgid ""
+"Build execution time data per tutorial. [Example](https://sphinx-"
+"gallery.github.io/stable/auto_examples/sg_execution_times.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:72
+msgid "Sphinx gallery challenges"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:74
+msgid "The downsides of using Sphinx gallery include:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:76
+msgid ""
+"the **.py** files can be finicky to configure, particularly if you have "
+"matplotlib plot outputs."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:78
+msgid ""
+"For example: To allow for plots to render, you need to name each file "
+"with `plot_` at the beginning."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:81
+msgid ""
+"Many users these days are used to working in Jupyter Notebooks. .py may "
+"be slightly less user friendly to work with"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:83
+msgid ""
+"These nuances can make it challenging for potential contributors to add "
+"tutorials to your package. This can also present maintenance challenge."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:86
+msgid "Add about the gallery setup:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:93
+msgid "File directory structure:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:114
+msgid ""
+"[nbsphinx - tutorials using Jupyter "
+"Notebooks](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:116
+msgid ""
+"If you prefer to use Jupyter Notebooks to create tutorials you can use "
+"nbsphinx. nbsphinx operates similarly to Sphinx gallery in that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:119
+msgid "It runs your notebooks and produces outputs in the rendered tutorials"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:121
+msgid ""
+"Pro/con By default it does not support downloading of **.py** and "
+"**.ipynb** files. However you can add a [link to the notebook at the top "
+"of the page with some additional conf.py settings (see: epilog "
+"settings)](https://nbsphinx.readthedocs.io/en/0.8.10/prolog-and-"
+"epilog.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:125
+msgid ""
+"Image showing the gallery output provided by nbsphinx using the sphinx-"
+"gallery front end interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:131
+msgid ""
+"`nbsphinx` can be combined with Sphinx gallery to create a gallery of "
+"tutorials. However, rather than rendering the gallery as a grid, it lists"
+" all of the gallery elements in a single column."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:2
+msgid "Document the code in your package's API using docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:4
+msgid "What is an API?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:6
+msgid ""
+"API stands for **A**pplied **P**rogramming **I**nterface. When discussed "
+"in the context of a (Python) package, the API refers to the functions, "
+"classes, methods, and attributes that a package maintainer creates for "
+"users."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:10
+msgid ""
+"A simple example of a package API element: For instance, a package might "
+"have a function called `add_numbers()` that adds up a bunch of numbers. "
+"To add up numbers, you as the user simply call `add_numbers(1,2,3)` and "
+"the package function calculates the value and returns `6`. By calling the"
+" `add_numbers` function, you are using the package's API."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:16
+msgid ""
+"Package APIs consist of functions, classes, methods and attributes that "
+"create a user interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:18
+msgid "What is a docstring and how does it relate to documentation?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:20
+msgid ""
+"In Python, a docstring refers to text in a function, method or class that"
+" describes what the function does and its inputs and outputs. Python "
+"programmers usually refer to the inputs to functions as "
+"[\"parameters\"](https://docs.python.org/3/glossary.html#term-parameter) "
+"or [\"arguments\"](https://docs.python.org/3/faq/programming.html#faq-"
+"argument-vs-parameter), and the outputs are often called \"return "
+"values\""
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:23
+msgid "The docstring is thus important for:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:25
+msgid ""
+"When you call `help()` in Python, for example, `help(add_numbers)` will "
+"show the text of the function's docstring. The docstring thus helps a "
+"user better understand how to apply the function more effectively to "
+"their workflow."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:26
+msgid ""
+"When you build your package's documentation, the docstrings can also be "
+"used to automatically create full API documentation that provides a clean"
+" view of all its functions, classes, methods, and attributes."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:29
+msgid ""
+"Example API Documentation for all functions, classes, methods, and "
+"attributes in a package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:30
+msgid ""
+"[View example high-level API documentation for the Verde package. This "
+"page lists every function and class in the package along with a brief "
+"explanation of what it "
+"does](https://www.fatiando.org/verde/latest/api/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:31
+msgid ""
+"[You can further dig down to see what a specific function does within the"
+" package by clicking on an API "
+"element](https://www.fatiando.org/verde/latest/api/generated/verde.grid_coordinates.html#verde.grid_coordinates)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:34
+msgid "Python package API documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:36
+msgid ""
+"If you have a descriptive docstring for every user-facing class, method, "
+"attribute and/or function in your package (_within reason_), then your "
+"package's API is considered well-documented."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:39
+msgid ""
+"In Python, this means that you need to add a docstring for every user-"
+"facing class, method, attribute and/or function in your package (_within "
+"reason_) that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:43
+msgid "Explains what the function, method, attribute, or class does"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:44
+msgid "Defines the `type` inputs and outputs (ie. `string`, `int`, `np.array`)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:45
+msgid "Explains the expected output `return` of the object, method or function."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:48
+msgid "Three Python docstring formats and why we like NumPy style"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:50
+msgid ""
+"There are several Python docstring formats that you can choose to use "
+"when documenting your package including:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:53
+msgid ""
+"[NumPy-style](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:54
+msgid ""
+"[google style](https://sphinxcontrib-"
+"napoleon.readthedocs.io/en/latest/example_google.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:55
+msgid ""
+"[reST style](https://sphinx-rtd-"
+"tutorial.readthedocs.io/en/latest/docstrings.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:59
+msgid ""
+"We suggest using [NumPy-style "
+"docstrings](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard) for your Python documentation because:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:62
+msgid ""
+"NumPy style docstrings are core to the scientific Python ecosystem and "
+"defined in the [NumPy style "
+"guide](https://numpydoc.readthedocs.io/en/latest/format.html). Thus you "
+"will find them widely used there."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:63
+msgid ""
+"The Numpy style docstring is simplified and thus easier to read both in "
+"the code and when calling `help()` in Python. In contrast, some feel that"
+" reST style docstrings are harder to quickly scan, and can take up more "
+"lines of code in modules."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:66
+msgid ""
+"If you are using NumPy style docstrings, be sure to include the [sphinx "
+"napoleon extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/napoleon.html) in your documentation "
+"`conf.py` file. This extension allows Sphinx to properly read and format "
+"NumPy format docstrings."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:71
+msgid "Docstring examples Better and Best"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:73
+msgid ""
+"Below is a good example of a well-documented function. Notice that this "
+"function's docstring describes the function's inputs and the function's "
+"output (or return value). The initial description of the function is "
+"short (one line). Following that single-line description, there is a "
+"slightly longer description of what the function does (2 to 3 sentences)."
+" The return of the function is also specified."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:107
+msgid "Best: a docstring with example use of the function"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:109
+msgid ""
+"This example contains an example of using the function that is also "
+"tested in sphinx using "
+"[doctest](https://docs.python.org/3/library/doctest.html)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:160
+msgid ""
+"Using the above NumPy format docstring in sphinx, the autodoc extension "
+"will create the about documentation section for the `extent_to_json` "
+"function. The output of the `es.extent_to_json(rmnp)` command can even be"
+" tested using doctest adding another quality check to your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:166
+msgid ""
+"Using doctest to run docstring examples in your package's methods and "
+"functions"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:171
+msgid ""
+"Above, we provided some examples of good, better, best docstring formats."
+" If you are using Sphinx to create your docs, you can add the "
+"[doctest](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html) extension to your Sphinx"
+" build. Doctest provides an additional check for docstrings with example "
+"code in them. Doctest runs the example code in your docstring `Examples` "
+"checking that the expected output is correct. Similar to running "
+"tutorials in your documentation, `doctest` can be a useful step that "
+"assures that your package's code (API) runs as you expect it to."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:178
+msgid ""
+"It's important to keep in mind that examples in your docstrings help "
+"users using your package. Running `doctest` on those examples provides a "
+"check of your package's API. The doctest ensures that the functions and "
+"methods in your package run as you expect them to. Neither of these items"
+" replace a separate, stand-alone test suite that is designed to test your"
+" package's core functionality across operating systems and Python "
+"versions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:186
+msgid ""
+"Below is an example of a docstring with an example. doctest will run the "
+"example below and test that if you provide `add_me` with the values 1 and"
+" 3 it will return 4."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:219
+msgid "Adding type hints to your docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:221
+msgid ""
+"In the example above, you saw the use of numpy-style docstrings to "
+"describe data types that are passed into functions as parameters or into "
+"classes as attributes. In a numpy-style docstring you add those types in "
+"the Parameters section of the docstring. Below you can see that the "
+"parameter `num1` and `num2` should both be a Python `int` (integer) "
+"value."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:236
+msgid ""
+"Describing the expected data type that a function or method requires "
+"helps users better understand how to call a function or method."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:239
+msgid ""
+"Type-hints add another layer of type documentation to your code. Type-"
+"hints make it easier for new developers, your future self or contributors"
+" to get to know your code base quickly."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:243
+msgid ""
+"Type hints are added to the definition of your function. In the example "
+"below, the parameters aNum and aNum2 are defined as being type = int "
+"(integer)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:250
+msgid ""
+"You can further describe the expected function output using `->`. Below "
+"the output of the function is also an int."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:258
+msgid "Why use type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:260
+msgid "Type hints:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:262
+msgid "Make development and debugging faster,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:263
+msgid ""
+"Make it easier for a user to see the data format inputs and outputs of "
+"methods and functions,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:264
+msgid ""
+"Support using static type checking tools such as [`mypy`](https://mypy-"
+"lang.org/) which will check your code to ensure types are correct."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:266
+msgid "You should consider adding type hinting to your code if:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:268
+msgid "Your package performs data processing,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:269
+msgid "You use functions that require complex inputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:270
+msgid ""
+"You want to lower the entrance barrier for new contributors to help you "
+"with your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:272
+msgid "Beware of too much type hinting"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:275
+msgid "As you add type hints to your code consider that in some cases:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:277
+msgid ""
+"If you have a complex code base, type hints may make code more difficult "
+"to read. This is especially true when a parameter’s input takes multiple "
+"data types and you list each one."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:278
+msgid ""
+"Writing type hints for simple scripts and functions that perform obvious "
+"operations don't make sense."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:281
+msgid "Gradually adding type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:283
+msgid ""
+"Adding type hints can take a lot of time. However, you can add type hints"
+" incrementally as you work on your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:287
+msgid ""
+"Adding type hints is also a great task for new contributors. It will help"
+" them get to know your package's code and structure better before digging"
+" into more complex contributions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:1
+msgid "Create User Facing Documentation for your Python Package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:14
+msgid "Core components of user-facing Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:15
+msgid "Below we break documentation into two broad types."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:17
+msgid ""
+"**User-facing documentation** refers to documentation that describes the "
+"way the tools within a package are broadly used in workflows. **API "
+"documentation** refers to documentation of functions, classes, methods, "
+"and attributes in your code and is written at a more granular level. This"
+" documentation is what a user sees when they type `help(function-name)`."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:23
+msgid ""
+"Your user-facing documentation for your Python package should include "
+"several core components."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:26
+msgid ""
+"**Documentation Website:** This refers to easy-to-read documentation that"
+" helps someone use your package. This documentation should help users "
+"both install and use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:27
+msgid ""
+"**Short Tutorials:** Your user-facing documentation should also include "
+"[**short tutorials** that showcase core features of your package](create-"
+"package-tutorials)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:28
+msgid ""
+"**Package Code / API documentation:** You package's functions, classes, "
+"methods, and attributes (the API) should also be documented. API "
+"documentation can be generated from "
+"[docstrings](https://pandas.pydata.org/docs/development/contributing_docstring.html)"
+" found in your code. Ideally, you have docstrings for all user-facing "
+"functions, classes, and methods in your Python package. [We discuss code "
+"documentation and docstrings in greater detail here.](document-your-code-"
+"api-docstrings)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:32
+msgid "Write usable documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:34
+msgid ""
+"User-facing documentation should be published on a easy-to-navigate "
+"website. The documentation should be written keeping in mind that users "
+"may not be developers or expert-level programmers. Rather, the language "
+"that you use in your documentation should not be highly technical."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:39
+msgid ""
+"To make the language of your documentation more accessible to a broader "
+"audience:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:42
+msgid "Whenever possible, define technical terms and jargon."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:43
+msgid "Consider writing instructions for a high-school level reader."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:44
+msgid ""
+"Include step-by-step code examples, tutorials or vignettes that support "
+"getting started using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:46
+msgid "Four elements of a good open source documentation landing page"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:48
+msgid ""
+"To make it easy for users to find what they need quickly, consider adding"
+" quick links on your package's landing page to the following elements:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:52
+msgid ""
+"**Getting started:** This section should provide the user with a quick "
+"start for installing your package. A small example of how to use the "
+"package is good to have here as well. Or you can link to useful tutorials"
+" in the get started section."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:53
+msgid ""
+"**About:** Describe your project, stating its goals and its "
+"functionality."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:54
+msgid ""
+"**Community:** Instructions for how to help and/or get involved. This "
+"might include links to your issues (if that is where you let users ask "
+"questions) or the discussion part of your GitHub repo. This section might"
+" include a development guide for those who might contribute to your "
+"package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:55
+msgid ""
+"**API Documentation:** This is the detailed project documentation. Here "
+"you store documentation for your package's API including all user-facing "
+"functions, classes, methods, and attributes as well as any additional "
+"high level discussion that will help people use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:58
+msgid ""
+"Image showing the landing page for GeoPandas documentation which has 4 "
+"sections including Getting started, Documentation, About GeoPandas, "
+"Community."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:64
+msgid ""
+"The documentation landing page of GeoPandas, a spatial Python library, "
+"has the 4 element specified above. Notice that the landing page is simple"
+" and directs users to each element using a Sphinx card."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:67
+msgid ""
+"NOTE: in many cases you can include your **README** file and your "
+"**CONTRIBUTING** files in your documentation given those files may have "
+"some of the components listed above."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:71
+msgid ""
+"You can include files in Sphinx using the include directive. Below is an "
+"example of doing this using `myst` syntax."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:1
+msgid "Writing user-facing documentation for your Python package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:3
+msgid ""
+"This section walks you through best practices for with writing "
+"documentation for your Python package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:6
+msgid ""
+"We talk about the elements that you should consider adding to your "
+"documentation, the different types of users who might read your "
+"documentation and how to create tutorials for your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:10
+msgid ""
+"Here we also cover sphinx extensions that you can user to make "
+"documentation easier such as:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:13
+msgid ""
+"autodoc to automagically populate documentation for your code's "
+"functions, classes, methods and attributes (API documentation) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:15
+msgid "sphinx gallery for tutorials."
+msgstr ""
diff --git a/locales/bg/LC_MESSAGES/index.po b/locales/bg/LC_MESSAGES/index.po
new file mode 100644
index 000000000..0d871b6d6
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/index.po
@@ -0,0 +1,500 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../index.md:257
+msgid "Tutorials"
+msgstr ""
+
+#: ../../index.md:264
+msgid "Packaging"
+msgstr ""
+
+#: ../../index.md:135 ../../index.md:272
+msgid "Documentation"
+msgstr ""
+
+#: ../../index.md:175 ../../index.md:280
+msgid "Tests"
+msgstr ""
+
+#: ../../index.md:280
+msgid "Testing"
+msgstr ""
+
+#: ../../index.md:288
+msgid "Maintain"
+msgstr ""
+
+#: ../../index.md:288
+msgid "Continuous Integration"
+msgstr ""
+
+#: ../../index.md:296
+msgid "Glossary"
+msgstr ""
+
+#: ../../index.md:296
+msgid "Reference"
+msgstr ""
+
+#: ../../index.md:1
+msgid "pyOpenSci Python Package Guide"
+msgstr ""
+
+#: ../../index.md:3
+msgid ""
+"We support the Python tools that scientists need to create open science "
+"workflows."
+msgstr ""
+
+#: ../../index.md:20
+msgid ""
+" "
+"[](https://github.com/pyopensci/python-package-guide) "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+
+#: ../../index.md:20
+msgid "GitHub release (latest by date)"
+msgstr ""
+
+#: ../../index.md:20
+msgid "DOI"
+msgstr ""
+
+#: ../../index.md:27
+msgid "About this guide"
+msgstr ""
+
+#: ../../index.md:29
+msgid ""
+"Image with the pyOpenSci flower logo in the upper right hand corner. The "
+"image shows the packaging lifecycle. The graphic shows a high level "
+"overview of the elements of a Python package. The inside circle has 5 "
+"items - user documentation, code/api, test suite, contributor "
+"documentation, project metadata / license / readme. In the middle of the "
+"circle is says maintainers and has a small icon with people. On the "
+"outside circle there is an arrow and it says infrastructure."
+msgstr ""
+
+#: ../../index.md:35
+msgid "This guide will help you:"
+msgstr ""
+
+#: ../../index.md:37
+msgid "Learn how to create a Python package from start to finish"
+msgstr ""
+
+#: ../../index.md:38
+msgid "Understand the broader Python packaging tool ecosystem"
+msgstr ""
+
+#: ../../index.md:39
+msgid "Navigate and make decisions around tool options"
+msgstr ""
+
+#: ../../index.md:40
+msgid "Understand all of the pieces of creating and maintaining a Python package"
+msgstr ""
+
+#: ../../index.md:42
+msgid ""
+"You will also find best practice recommendations and curated lists of "
+"community resources surrounding packaging and package documentation."
+msgstr ""
+
+#: ../../index.md:45
+msgid "Todo"
+msgstr ""
+
+#: ../../index.md:46
+msgid "TODO: change the navigation of docs to have a"
+msgstr ""
+
+#: ../../index.md:48
+msgid "user documentation contributor / maintainer documentation"
+msgstr ""
+
+#: ../../index.md:50
+msgid "development guide"
+msgstr ""
+
+#: ../../index.md:51
+msgid "contributing guide"
+msgstr ""
+
+#: ../../index.md:53
+msgid "Community docs"
+msgstr ""
+
+#: ../../index.md:54
+msgid "readme, coc, license"
+msgstr ""
+
+#: ../../index.md:56
+msgid "Publish your docs"
+msgstr ""
+
+#: ../../index.md:59
+msgid "Tutorial Series: Create a Python Package"
+msgstr ""
+
+#: ../../index.md:61
+msgid ""
+"The first round of our community-developed, how to create a Python "
+"package tutorial series for scientists is complete! Join our community "
+"review process or watch development of future tutorials in our [GitHub "
+"repo here](https://github.com/pyOpenSci/python-package-guide)."
+msgstr ""
+
+#: ../../index.md:68
+msgid "✿ Create a Package Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:72
+msgid "[What is a Python package?](/tutorials/intro)"
+msgstr ""
+
+#: ../../index.md:73
+msgid "[Create a Python package](/tutorials/create-python-package)"
+msgstr ""
+
+#: ../../index.md:74
+msgid "[Publish your package to (test) PyPI](/tutorials/publish-pypi)"
+msgstr ""
+
+#: ../../index.md:75
+msgid "[Publish your package to conda-forge](/tutorials/publish-conda-forge)"
+msgstr ""
+
+#: ../../index.md:78
+msgid "✿ Package Metadata Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:82
+msgid "[How to add a README file](/tutorials/add-readme)"
+msgstr ""
+
+#: ../../index.md:83
+msgid ""
+"[How to add metadata to a pyproject.toml file for publication to "
+"PyPI.](/tutorials/pyproject-toml.md)"
+msgstr ""
+
+#: ../../index.md:86
+msgid "✿ Packaging Tool Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:90
+msgid "[Introduction to Hatch](/tutorials/get-to-know-hatch)"
+msgstr ""
+
+#: ../../index.md:91
+msgid "[Run Python scripts using Hatch](/tutorials/run-python-scripts-hatch)"
+msgstr ""
+
+#: ../../index.md:94
+msgid "✿ Reference Guides ✿"
+msgstr ""
+
+#: ../../index.md:98
+msgid "[Command Line Reference Guide](/tutorials/command-line-reference)"
+msgstr ""
+
+#: ../../index.md:102
+msgid "Python Packaging for Scientists"
+msgstr ""
+
+#: ../../index.md:104
+msgid ""
+"Learn about Python packaging best practices. You will also get to know "
+"the the vibrant ecosystem of packaging tools that are available to help "
+"you with your Python packaging needs."
+msgstr ""
+
+#: ../../index.md:111
+msgid "✨ Create your package ✨"
+msgstr ""
+
+#: ../../index.md:115
+msgid "[Package file structure](/package-structure-code/python-package-structure)"
+msgstr ""
+
+#: ../../index.md:116
+msgid ""
+"[Package metadata / pyproject.toml](package-structure-code/pyproject-"
+"toml-python-package-metadata.md)"
+msgstr ""
+
+#: ../../index.md:117
+msgid ""
+"[Build your package (sdist / wheel)](package-structure-code/python-"
+"package-distribution-files-sdist-wheel.md)"
+msgstr ""
+
+#: ../../index.md:118
+msgid "[Declare dependencies](package-structure-code/declare-dependencies.md)"
+msgstr ""
+
+#: ../../index.md:119
+msgid ""
+"[Navigate the packaging tool ecosystem](package-structure-code/python-"
+"package-build-tools.md)"
+msgstr ""
+
+#: ../../index.md:120
+msgid ""
+"[Non pure Python builds](package-structure-code/complex-python-package-"
+"builds.md)"
+msgstr ""
+
+#: ../../index.md:123
+msgid "✨ Publish your package ✨"
+msgstr ""
+
+#: ../../index.md:127
+msgid ""
+"Gain a better understanding of the Python packaging ecosystem Learn about"
+" best practices for:"
+msgstr ""
+
+#: ../../index.md:130
+msgid ""
+"[Package versioning & release](/package-structure-code/python-package-"
+"versions.md)"
+msgstr ""
+
+#: ../../index.md:131
+msgid ""
+"[Publish to PyPI & Conda-forge](/package-structure-code/publish-python-"
+"package-pypi-conda.md)"
+msgstr ""
+
+#: ../../index.md:142
+msgid "✨ Write The Docs ✨"
+msgstr ""
+
+#: ../../index.md:145
+msgid ""
+"[Create documentation for your users](/documentation/write-user-"
+"documentation/intro)"
+msgstr ""
+
+#: ../../index.md:146
+msgid ""
+"[Core files to include in your package repository](/documentation"
+"/repository-files/intro)"
+msgstr ""
+
+#: ../../index.md:147
+msgid ""
+"[Write tutorials to show how your package is used](/documentation/write-"
+"user-documentation/create-package-tutorials)"
+msgstr ""
+
+#: ../../index.md:150
+msgid "✨ Developer Docs ✨"
+msgstr ""
+
+#: ../../index.md:153
+msgid ""
+"[Create documentation for collaborating developers](/documentation"
+"/repository-files/contributing-file)"
+msgstr ""
+
+#: ../../index.md:154
+msgid ""
+"[Write a development guide](/documentation/repository-files/development-"
+"guide)"
+msgstr ""
+
+#: ../../index.md:157
+msgid "✨ Document For A Community ✨"
+msgstr ""
+
+#: ../../index.md:160
+msgid ""
+"[Writing a README file](/documentation/repository-files/readme-file-best-"
+"practices)"
+msgstr ""
+
+#: ../../index.md:161
+msgid ""
+"[Set norms with a Code of Conduct](/documentation/repository-files/code-"
+"of-conduct-file)"
+msgstr ""
+
+#: ../../index.md:162
+msgid "[License your package](/documentation/repository-files/license-files)"
+msgstr ""
+
+#: ../../index.md:165
+msgid "✨ Publish Your Docs ✨"
+msgstr ""
+
+#: ../../index.md:168
+msgid "[How to publish your docs](/documentation/hosting-tools/intro)"
+msgstr ""
+
+#: ../../index.md:169
+msgid "[Using Sphinx](/documentation/hosting-tools/intro)"
+msgstr ""
+
+#: ../../index.md:170
+msgid ""
+"[Markdown, MyST, and ReST](/documentation/hosting-tools/myst-markdown-"
+"rst-doc-syntax)"
+msgstr ""
+
+#: ../../index.md:171
+msgid ""
+"[Host your docs on Read The Docs or GitHub Pages](/documentation/hosting-"
+"tools/publish-documentation-online)"
+msgstr ""
+
+#: ../../index.md:181
+msgid "✨ Tests for your Python package ✨"
+msgstr ""
+
+#: ../../index.md:184
+msgid "[Intro to testing](tests/index.md)"
+msgstr ""
+
+#: ../../index.md:185
+msgid "[Write tests](tests/write-tests)"
+msgstr ""
+
+#: ../../index.md:186
+msgid "[Types of tests](tests/test-types)"
+msgstr ""
+
+#: ../../index.md:189
+msgid "✨ Run your tests ✨"
+msgstr ""
+
+#: ../../index.md:192
+msgid "[Run tests locally with Hatch](tests/run-tests)"
+msgstr ""
+
+#: ../../index.md:193
+msgid "[Run tests with nox](tests/run-tests-nox)"
+msgstr ""
+
+#: ../../index.md:194
+msgid "[Run tests in CI](tests/tests-ci)"
+msgstr ""
+
+#: ../../index.md:198
+msgid "Contributing"
+msgstr ""
+
+#: ../../index.md:205
+msgid "✨ Code style & Format ✨"
+msgstr ""
+
+#: ../../index.md:208
+msgid "[Code style](package-structure-code/code-style-linting-format.md)"
+msgstr ""
+
+#: ../../index.md:211
+msgid "✨ Want to contribute? ✨"
+msgstr ""
+
+#: ../../index.md:216
+msgid ""
+"We welcome contributions to this guide. Learn more about how you can "
+"contribute."
+msgstr ""
+
+#: ../../index.md:221
+msgid "A group of people building a pyramid with blocks"
+msgstr ""
+
+#: ../../index.md:227
+msgid "A community-created guidebook"
+msgstr ""
+
+#: ../../index.md:229
+msgid ""
+"Every page in this guidebook goes through an extensive community review "
+"process. To ensure our guidebook is both beginner-friendly and accurate, "
+"we encourage reviews from a diverse set of pythonistas and scientists "
+"with a wide range of skills and expertise."
+msgstr ""
+
+#: ../../index.md:232
+msgid "View guidebook contributors"
+msgstr ""
+
+#: ../../index.md:240
+msgid "Who this guidebook is for"
+msgstr ""
+
+#: ../../index.md:242
+msgid ""
+"This guidebook is for anyone interested in learning more about Python "
+"packaging. It is beginner-friendly and will provide:"
+msgstr ""
+
+#: ../../index.md:244
+msgid "Beginning-to-end guidance on creating a Python package."
+msgstr ""
+
+#: ../../index.md:245
+msgid ""
+"Resources to help you navigate the Python packaging ecosystem of tools "
+"and approaches to packaging."
+msgstr ""
+
+#: ../../index.md:246
+msgid ""
+"A curated list of resources to help you get your package into documented,"
+" usable and maintainable shape."
+msgstr ""
+
+#: ../../index.md:248
+msgid "Where this guide is headed"
+msgstr ""
+
+#: ../../index.md:250
+msgid ""
+"If you have ideas of things you'd like to see here clarified in this "
+"guide, [we invite you to open an issue on "
+"GitHub.](https://github.com/pyOpenSci/python-package-guide/issues)."
+msgstr ""
+
+#: ../../index.md:253
+msgid ""
+"If you have questions about our peer review process or packaging in "
+"general, you are welcome to use our [GitHub "
+"Discussions](https://github.com/orgs/pyOpenSci/discussions)."
+msgstr ""
+
+#: ../../index.md:255
+msgid ""
+"This living Python packaging guide is updated as tools and best practices"
+" evolve in the Python packaging ecosystem. We will be adding new content "
+"over the next year."
+msgstr ""
diff --git a/locales/bg/LC_MESSAGES/maintain-automate.po b/locales/bg/LC_MESSAGES/maintain-automate.po
new file mode 100644
index 000000000..6dd08486a
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/maintain-automate.po
@@ -0,0 +1,1807 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../maintain-automate/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:12
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:14
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:18
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:23
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:25
+msgid ""
+"When you're ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:28
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:29
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:30
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:32
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:34
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:35
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:37
+msgid "What is continuous deployment (CD)?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:39
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:41
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:42
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:44
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:47
+msgid "Why use CI?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:49
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:54
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:58
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:63
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:68
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:71
+msgid "CI/CD platforms"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:73
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:78
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:83
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:85
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:91
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:94
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:97
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:100
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:105
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:107
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:1
+msgid "Installing your own code"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:3
+msgid ""
+"You have a conda environment. It works. Maybe it has packages that were "
+"hard to install, like GDAL, HDF5, or other compiled scientific "
+"dependencies."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:5
+msgid ""
+"You also have code that you are writing locally. Maybe it started as a "
+"script, or maybe it is already organized as a Python package. You want to"
+" use that code inside the same environment with GDAL, HDF5, and the other"
+" tools you already installed."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:7
+msgid ""
+"The instructions to install your code into a conda environment is to "
+"first activate your conda environment `conda activate your_env_name` and "
+"then run this: `python -m pip install -e . --no-deps`. You may also see "
+"this written as `pip install -e .`. See [The Full Command](the-full-"
+"command) section below for more info as to the details of this command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:9
+msgid ""
+"If this is the first time you're seeing pip install commands, you may not"
+" be totally sure what is going on here. Conda created the environment, "
+"why am I using `pip` to install things now? You may have heard guidance "
+"to generally try and avoid mixing conda and pip? You may already be "
+"mixing conda and pip and things are totally fine. You may also not care "
+"at all because `pip install -e .` seems to work fine and you can get back"
+" to what you're actually trying to do. (If that last one is you, you're "
+"also probably not reading this page). In any event, all of these "
+"situations are perfectly understandable and totally okay for you to be "
+"going through."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:11
+msgid ""
+"So... why pip? The short answer is that conda and pip are doing different"
+" jobs here."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:13
+msgid ""
+"The slightly longer, mostly apologetic, answer is this is just sort of "
+"the current ergonomics of how python packaging works and, honestly? Most "
+"of us have turned this confusing pain point into muscle memory. But not "
+"you. You're new here. And you're like... wat? And you're totally "
+"justified to feel this way."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:15
+msgid ""
+"So, what is happening here? `conda` manages the environment: the Python "
+"runtime, compiled libraries, command line tools, and the packages your "
+"project depends on. This is stuff that you've already been doing and "
+"you're comfortable with (or at least familiar with). `pip` is doing one "
+"Python-packaging-specific job: installing your local package into the "
+"active environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:17
+msgid ""
+"In editable mode, the `-e` flag, `pip` connects the active environment to"
+" the source files you are editing. And... why exactly is that useful?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:19
+msgid "It's useful because it gives you a pretty quick development loop:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:21
+msgid "Edit your code in your editor."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:22
+msgid "Run it from a terminal, test suite, or Jupyter notebook."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:23
+msgid "Edit the code again."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:24
+msgid "Run it again without reinstalling your package."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:26
+msgid ""
+"So the goal is not to switch from conda to pip. The goal is to keep using"
+" your conda environment while making your local package importable inside"
+" that environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:28
+msgid "Should I use pip for everything now?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:30
+msgid "Probably not?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:32
+msgid ""
+"If conda is already working well for your project, keep using conda to "
+"manage the environment. Use pip only for this one task: installing your "
+"local package in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:34
+msgid ""
+"If you are curious about other tools like uv, pixi, Hatch, or pip-only "
+"workflows, see [Environment Managers](environment-managers.md). Those "
+"tools can be great choices. But you do not need to switch tools just to "
+"develop your local package inside a conda environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:36
+msgid ""
+"As a final note, people in the conda ecosystem are actively working on "
+"better conda/pip interoperability. In the future, this workflow may "
+"become less awkward. For now, `python -m pip install -e . --no-deps` is "
+"the standard bridge."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:39
+msgid "The full command"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:41
+msgid ""
+"`python -m pip install -e . --no-deps` is a mouthful. I know it. You know"
+" it. Why do we do these things?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:43
+msgid "The simplest version of this is:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:48
+msgid "But we recommend the longer version in conda environments for two reasons."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:50
+msgid ""
+"The `python -m pip` part ensures that you're using pip from the active "
+"conda environment. Sometimes this results in `pip not found`, which is "
+"actually a good error to get because it means you prevented an annoying-"
+"to-debug failure mode. If this happens just `conda install pip` and try "
+"again. So, why? Sometimes `pip` from a different python environment can "
+"be on your PATH which means that you'll accidentally install your code "
+"into an unrelated python environment. This can be confusing to debug. "
+"This has happened to most (all?) of us. It usually hits when you're least"
+" prepared to debug and fix it. So we recommend the `python -m` in front "
+"to prevent this from happening. But it does add to the length of the "
+"command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:52
+msgid ""
+"The `--no-deps` flag tells pip not to install your package's "
+"dependencies, if you have any listed in your project. If you do have them"
+" listed, probably in your `pyproject.toml` file, then `pip install -e .` "
+"will try to install the dependencies that are listed in that file. In a "
+"conda environment, that can range from \"mostly fine\" to \"now my "
+"environment is broken and I am not sure how to recover.\""
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:54
+msgid ""
+"With `--no-deps`, pip installs only your local package. You remain "
+"responsible for managing the environment dependencies with conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:2
+msgid "Environment Managers for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:4
+msgid "Quick Decision Guide"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:6
+msgid "**Python-only project, want simplicity?** → venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:7
+msgid "**Python-only, want speed?** → **uv** (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:8
+msgid "**Installing CLI tools globally?** → pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:9
+msgid ""
+"**Need conda packages or cross-language dependencies?** → **pixi** "
+"(recommended) or conda/mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:10
+msgid ""
+"**Creating a Python package?** → Use Hatch -- with UV as a dependency "
+"manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:12
+msgid ""
+"You can mix tools! For example, use **pipx** to install tools you use "
+"often (at the command line) like Hatch, ruff or pre-commit, then use "
+"**uv** within your projects for package and environment management."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:15
+msgid "Environment and package managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:17
+msgid ""
+"Package and environment managers are important tools in your Python "
+"packaging workflows. To make Your packaging experience when selecting a "
+"tool will be easier if you understand the difference between the two."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:20
+msgid ""
+"A **package manager** is used to install, update, and remove Python "
+"packages (libraries and tools) and their dependencies in your "
+"environment. When you use a package manager, you are often downloading "
+"packages from a repository like PyPI (Python Package Index) or a local "
+"repository like GitHub / GitLab."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:23
+msgid ""
+"When you run `pip install numpy`, pip acts as a package manager and "
+"installs numpy from PyPI. Pip's default repository when you install a "
+"package is PyPI, but it can be used to install packages from other "
+"repositories such as GitHub."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:26
+msgid ""
+"An **environment manager** creates isolated spaces (environments) for "
+"your Python projects. Each environment has its own Python installation "
+"and its own installed packages. Using isolated environments for different"
+" projects reduces the change of environment conflicts when using the same"
+" environment across different projects with different dependencies."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:28
+msgid ""
+"There are many tools listed below, but if you're short on time, you may "
+"want to consider"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:30
+msgid ""
+"Hatch combined with UV if you are managing a Python package. [Check out "
+"our tutorials for more on this workflow.](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:31
+msgid ""
+"Pixi or mamba as faster alternatives to conda if you are working in the "
+"non-Pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:33
+msgid "Where environment managers save your environment"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:35
+msgid ""
+"Environment managers save environments in different locations by default."
+" For instance, `venv`, an environment manager that ships with Python, "
+"saves an environment by default in your current working directory. UV has"
+" the same native behavior. In contrast, conda and mamba save environments"
+" in a global location, allowing you to access them easily across "
+"projects."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:38
+msgid ""
+"UV does have a global cache even tho its default behavior is to create an"
+" environment in your current working directory."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:42
+msgid "Some tools do everything"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:44
+msgid ""
+"Some modern tools handle both package installation and environment "
+"management. For instance, UV, conda and mamba can be used to both create "
+"environments, add dependencies, and build and install tools."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:46
+msgid "Comparison Table: pip ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Tool"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Type"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Language"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Speed"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Default Environment Location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Description"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pip**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Package manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+#: ../../maintain-automate/task-runners.md
+msgid "Python"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Slower"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "N/A (uses existing environment)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's standard package installer. pip also builds packages"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pipx**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (isolated per tool)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid ""
+"Installs tools that you need to regularly use across projects such as "
+"nox, pytest or ruff in a global location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**uv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Both"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Rust"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fastest"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fast package installer and environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**venv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's built-in environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**virtualenv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Moderate"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Feature-rich alternative to venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:56
+msgid "Comparison Table: conda ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**conda**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python/C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (`~/anaconda3/envs/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Cross-language package and environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**mamba**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster drop-in replacement for conda"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pixi**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory (`.pixi/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Modern conda-based tool with lock files"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:64
+msgid ""
+"**Speed comparison:** Rust-based tools (uv, pixi) are significantly "
+"faster when installing packages and resolving complex environments than "
+"Python-based tools. Mamba is faster than conda but might be slower than "
+"Rust-based alternatives such as Pixi."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:67
+msgid "Package Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:69
+msgid "pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:71
+msgid ""
+"Pip is Python's standard package installer. It is included with Python by"
+" default."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:72
+msgid ""
+"Pip is great for installing packages from PyPI and GitHub / GitLab into "
+"existing environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:73
+msgid ""
+"It is also great for development if you want to install your package "
+"locally in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:75
+#: ../../maintain-automate/environment-managers.md:87
+#: ../../maintain-automate/environment-managers.md:99
+#: ../../maintain-automate/environment-managers.md:127
+#: ../../maintain-automate/environment-managers.md:189
+#: ../../maintain-automate/environment-managers.md:211
+#: ../../maintain-automate/environment-managers.md:261
+#: ../../maintain-automate/environment-managers.md:280
+msgid "**Basic usage:**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:81
+msgid "pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:83
+msgid ""
+"Pipx is can be used to install a tool that you need to use across "
+"projects (like `riff`, `pytest`, `sphinx`, `nox`), globally."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:85
+msgid ""
+"Why use it: You might use it to avoid reinstalling the same tool over and"
+" over on your machine."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:93
+msgid "conda / mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:95
+msgid ""
+"Conda is a cross-language package manager that installs Python packages, "
+"R packages, system libraries, and more. Mamba is a faster, drop-in "
+"replacement for conda and we highly recommend mamba over conda if you are"
+" still using conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:97
+msgid ""
+"These tools are best for scientific computing projects and environments "
+"that need non-Python dependencies (like C libraries, GDAL, or R "
+"packages)."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:109
+msgid "Conda and mamba also function as environment managers - see below!"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:112
+#: ../../maintain-automate/index.md:51
+msgid "Environment Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:114
+msgid "hatch for pure Python packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:116
+#: ../../maintain-automate/environment-managers.md:204
+#: ../../maintain-automate/environment-managers.md:273
+msgid "pyOpenSci Recommends"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:118
+msgid ""
+"We recommend **hatch** as a complete project management tool for Python "
+"packaging. Hatch manages environments, builds packages, runs tests, and "
+"handles publishing—all in one tool. It can use **uv** as its backend for "
+"even faster operations."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:121
+msgid ""
+"Hatch is a comprehensive modern Python project manager that handles "
+"environments, package building, testing, and publishing. Hatch creates "
+"isolated environments for different tasks (testing, docs, development). "
+"Hatch uses UV under the hood to install Python, and can be set to use UV "
+"to manage environment installations too."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:123
+msgid ""
+"Hatch is best for Python package developers who want an all-in-one tool "
+"that handles the entire packaging workflow from development to "
+"publication."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:125
+msgid "[Check out our tutorial](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch with uv backend"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:160
+msgid ""
+"Hatch acts as a task runner and can manage multiple environments that you"
+" define. It also handles project and dependency installation, making it "
+"ideal for package maintainers who want consistency across development "
+"tasks."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:163
+msgid "venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:165
+msgid ""
+"venv is Python's built-in environment creator (included with Python "
+"3.3+). It is best for simple pure Python projects. Because venv ships "
+"with Python, and it is used by Hatch, UV and other tools under the hood, "
+"it is the most widely used tool."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:168
+msgid "Basic usage:"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:184
+msgid "virtualenv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:186
+msgid ""
+"virtualenv is a more feature-rich alternative to venv with better "
+"performance and additional options. It's best for you if you need more "
+"control over your environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:202
+msgid "uv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:206
+msgid ""
+"We recommend **uv** for fast, reliable Python package and environment "
+"management. It's significantly faster than pip and easily handles both "
+"installing packages and creating environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:209
+msgid ""
+"UV is a fast, Rust-based tool that replaces both pip and venv. It "
+"installs packages and creates virtual environments at lightning speed. UV"
+" is best for any pure Python project. Pixi is better if are working in "
+"the non-pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "uv (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+#: ../../maintain-automate/environment-managers.md:272
+msgid "pixi"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:256
+msgid "conda / mamba (as environment managers)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:258
+msgid ""
+"Conda and mamba create isolated environments that can contain Python, R, "
+"system libraries, and more. The conda ecosystem tools are best for "
+"managing complex dependencies across languages or when you need specific "
+"system libraries."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:275
+msgid ""
+"For projects needing conda packages, we recommend **pixi** over "
+"conda/mamba. It's faster, uses lock files for reproducibility, and works "
+"cross-platform."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:278
+msgid ""
+"Pixi is a modern, fast package and environment manager built on conda "
+"ecosystems. Similar to UV, Pixi uses lock files for reproducible "
+"environments. Pixi is best suited for scientific projects that require "
+"conda packages, teams that require exact reproducibility, or cross-"
+"platform development."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:299
+msgid ""
+"Pixi automatically creates a lock file (`pixi.lock`) ensuring everyone on"
+" your team gets identical environments."
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "What is CI?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Task runners"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Development installs with conda"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Maintain & Automate"
+msgstr ""
+
+#: ../../maintain-automate/index.md:2
+msgid "Automate Workflows and Maintain Your Package"
+msgstr ""
+
+#: ../../maintain-automate/index.md:4
+msgid ""
+"Once you've [created your package](create-pure-python-package), "
+"[published it](publish-pypi-tutorial), and set up a repository for it, "
+"the next step is to automate development and maintenance workflows. "
+"Automation makes maintaining your package easier, more robust, and more "
+"secure. It also helps new contributors get started quickly without having"
+" to manually set up complex development environments and testing "
+"workflows."
+msgstr ""
+
+#: ../../maintain-automate/index.md:11
+msgid "Why automate?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:13
+msgid ""
+"When you automate repetitive tasks like running tests, checking code "
+"style, and building documentation, you ensure that these important steps "
+"happen consistently every time. This consistency helps you catch bugs "
+"early, maintain code quality, and make it easier for others to contribute"
+" to your package. Automation also saves you time—instead of remembering "
+"and typing long command sequences, you can run everything with simple "
+"commands or have workflows run automatically when you push code to "
+"GitHub."
+msgstr ""
+
+#: ../../maintain-automate/index.md:22
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../maintain-automate/index.md:24
+msgid ""
+"This section will walk you through two key automation strategies for "
+"Python packages:"
+msgstr ""
+
+#: ../../maintain-automate/index.md:27
+msgid ""
+"[**Task runners**](task-runners-intro) help you automate common "
+"development tasks locally— things like running tests, building "
+"documentation, formatting code, and checking for errors. Instead of "
+"typing out long command sequences every time, you define tasks once and "
+"run them with simple commands. Task runners like Hatch and Nox also "
+"manage isolated environments for different workflows, ensuring you have "
+"the right dependencies for each task."
+msgstr ""
+
+#: ../../maintain-automate/index.md:35
+msgid ""
+"[**Continuous Integration (CI)**](ci-cd) takes automation further by "
+"running your tests and checks automatically every time code is pushed to "
+"GitHub or when someone opens a pull request. CI ensures that all changes "
+"are tested across different Python versions and operating systems before "
+"they're merged. You can also use Continuous Deployment (CD) to automate "
+"publishing your package to PyPI and deploying your documentation."
+msgstr ""
+
+#: ../../maintain-automate/index.md:42
+msgid ""
+"Together, task runners and CI/CD create a robust development workflow "
+"that makes your package easier to maintain and more welcoming to "
+"contributors."
+msgstr ""
+
+#: ../../maintain-automate/index.md:46
+msgid ""
+"[**Development installs in conda environments**](dev-installs) help you "
+"connect conda-based scientific development environments with local Python"
+" package development. This is especially useful when your package depends"
+" on compiled or system-level dependencies that conda manages well."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:2
+msgid "Task Runners for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:4
+msgid "What is a Task Runner?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:6
+msgid ""
+"A task runner is a tool that automates repetitive development workflows. "
+"Instead of typing out long command sequences every time you need to test "
+"your code, build documentation, or check your package, you define these "
+"tasks once and run them with simple commands."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:11
+msgid "For example, rather than running:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:19
+msgid "You can define a task and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:25
+msgid ""
+"Most modern task runners also include environment management features "
+"that make it quick and easy to run tasks. Task runners ensure that "
+"workflows are executed consistently every time, whether you're running "
+"them on your laptop or in continuous integration, and they also make it "
+"easier for contributors to recreate the same workflows in their local "
+"environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:32
+msgid "Benefits of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:34
+msgid ""
+"Task runners provide several benefits for package development. When you "
+"use a task runner, everyone on your team runs tasks the same way, "
+"reducing environment-specific issues and \"works on my machine\" "
+"problems. Complex multi-step processes become single commands, so "
+"contributors don't need to memorize or look up lengthy command sequences."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:41
+msgid ""
+"Many task runners also create isolated environments for different "
+"workflows, ensuring the right dependencies are available for each task "
+"without conflicts. This means your tasks run the same way locally and in "
+"continuous integration, making debugging easier and builds more reliable."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:47
+msgid "Two types of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:49
+msgid ""
+"The most common task runners used in the Python ecosystem fall into two "
+"categories:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:51
+msgid "Environment + command managers"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:53
+msgid ""
+"You can use these to both create custom isolated environments and also to"
+" run your tasks."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:55
+msgid ""
+"**[Hatch](https://hatch.pypa.io/):** Hatch is an all-in-one package "
+"management tool that includes a built-in task runner. It uses a "
+"declarative TOML configuration in your `pyproject.toml` file, which means"
+" everything related to your package—metadata, dependencies, and "
+"tasks—lives in one place. Hatch also integrates with UV for fast "
+"environment creation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:56
+msgid ""
+"**[Nox](https://nox.thea.codes/):** Nox is a flexible Python-based task "
+"runner that uses a code-based (imperative) configuration approach. You "
+"write Python functions to define your tasks in a `noxfile.py`, which "
+"gives you maximum flexibility for complex testing scenarios and "
+"conditional logic. It's especially popular in the Scientific Python "
+"ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:57
+msgid ""
+"**[Tox](https://tox.wiki/):** Tox is a mature declarative tool that uses "
+"INI or TOML configuration files. It's particularly well-suited for "
+"testing across multiple Python versions and dependency combinations, and "
+"has been a standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:59
+msgid "Command-only tools"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:61
+msgid "These tools execute your commands but don't manage environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:63
+msgid ""
+"**[Make](https://www.gnu.org/software/make/):** Make is a traditional "
+"build automation tool that uses Makefiles. It's widely known and "
+"available on most systems, making it a good choice for simple task "
+"automation when you don't need Python-specific features. However, it can "
+"have cross-platform compatibility issues, especially on Windows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:64
+msgid ""
+"**[Just](https://just.systems/):** Just is a modern command runner "
+"written in Rust with simple, Make-like syntax. It's fast, cross-platform,"
+" and easy to learn, making it a good lightweight alternative when you "
+"need basic task running without environment management."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:66
+msgid ""
+"Generally the two task runners that pyOpenSci suggests and uses are "
+"[Nox](https://nox.thea.codes/en/stable/) and [Hatch (also a package "
+"management tool)](https://hatch.pypa.io/latest/). Below, you will learn "
+"about the differences between all of the tools and can make a decision "
+"for yourself depending on your needs."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:71
+msgid "pyOpenSci recommends: Hatch and Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:73
+msgid ""
+"At pyOpenSci, the recommendation is **Hatch** for Python package "
+"development. Hatch also includes a task and environment system feature. "
+"Using Hatch means you don't need to setup another tool like Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:77
+msgid ""
+"However, **Nox** is also an excellent choice, particularly if you need "
+"complex testing, build or workflow logic."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:80
+msgid ""
+"You'll find many of the pyOpenSci documentation repositories use Nox to "
+"automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:83
+msgid "Why use Hatch?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:85
+msgid ""
+"Hatch is an all-in-one tool that helps you manage metadata, dependencies,"
+" build configuration, and tasks together in `pyproject.toml`. Using "
+"Hatch, everything related to your package lives in one place. It combines"
+" packaging (building and publishing) with everyday development tasks like"
+" testing, docs, and formatting, making workflows easier to run and share."
+" Hatch also integrates with UV making it extremely fast. Finally, Hatch "
+"follows modern packaging practices (for example, PEP 621), so your "
+"project stays aligned with community standards."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:95
+msgid "Why use Nox?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:97
+msgid ""
+"Python-based configuration gives Nox maximum flexibility, making it easy "
+"to express complex logic and conditionals directly. Because sessions are "
+"written in Python, they are explicit and easy to inspect and debug. Nox "
+"is particularly powerful for handling complex test and build scenarios "
+"that some packages require."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:103
+msgid "Declarative vs. imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:105
+msgid "An important distinction between these tools is how you configure them:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:107
+msgid ""
+"Hatch is a **Declarative tool**. This means it uses a configuration file "
+"where you specify *what* you want. See the example below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:119
+msgid ""
+"Nox uses an **Imperative** approach to defining workflows. With Nox, you "
+"write Python code that defines how to perform a task. An example of a Nox"
+" function (which would live in a separate noxfile.py file) is shown "
+"below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:132
+msgid "Trade-offs: declarative vs. imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:134
+msgid ""
+"**Declarative (Hatch, Tox):** Simpler syntax, easier to read and "
+"maintain. Might be slightly less flexible for complex logic (this is user"
+" dependent)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:137
+msgid ""
+"**Imperative (Nox):** You can easily include complex logic and "
+"conditionals. Because it uses Python, it might be more familiar to you!"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:141
+msgid ""
+"Neither approach is inherently better—it depends on your needs and "
+"preferences. Projects with complex testing scenarios may benefit from "
+"Nox's flexibility, while projects wanting simple, standardized workflows "
+"may prefer the clarity of declarative configuration."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:146
+msgid "An overview of the core task runners tools that you will find in"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:147
+msgid "the Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:149
+msgid "Comparison table"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:151
+msgid ""
+"Below you will see a comparison of features associated with each tool. "
+"Each tool is then described in a bit more detail just in case you want a "
+"better lay of the land."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Feature"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:167
+msgid "Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:223
+msgid "Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:275
+msgid "Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:321
+msgid "Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:360
+msgid "Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "noxfile.py"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "tox.ini"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Makefile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "justfile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration Style**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Declarative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Language**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "INI/TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Make syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Just syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Python-specific**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Yes"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "No"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Environment Management**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Matrix Testing**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Packaging Integration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Cross-platform**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Limited"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Best For**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complete package development"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complex testing workflows and other builds"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Legacy projects, standard testing"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple commands"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:169
+msgid ""
+"[Hatch](https://hatch.pypa.io/) is a modern, all-in-one packaging and "
+"task automation tool that simplifies Python package development by "
+"handling everything from building and publishing to running tests and "
+"formatting code. Hatch is what we use [in our packaging tutorials found "
+"in this guidebook](packaging-101)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:174
+msgid "Why we like Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:176
+msgid ""
+"Hatch stands out because it's a single tool that handles both packaging "
+"AND task running. Instead of juggling multiple tools, you configure "
+"everything in your `pyproject.toml` file—no extra configuration files "
+"needed. Hatch creates isolated environments for different tasks (like "
+"testing or building docs) and integrates with UV for extremely fast "
+"environment setup. It uses a declarative, clean syntax that's easy to "
+"read and maintain, and it supports matrix testing so you can easily test "
+"your package across multiple Python versions."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:185
+msgid "When to use Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:187
+msgid ""
+"Hatch is ideal for complete package development workflows. You can use it"
+" for testing across Python versions, building documentation, running code"
+" formatters and linters, and building and publishing your package to "
+"PyPI. If you want a modern, all-in-one solution that follows current "
+"Python packaging standards (like PEP 621), Hatch is an excellent choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:194
+#: ../../maintain-automate/task-runners.md:251
+#: ../../maintain-automate/task-runners.md:299
+#: ../../maintain-automate/task-runners.md:344
+#: ../../maintain-automate/task-runners.md:383
+msgid "Example configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:196
+msgid ""
+"Below is an example of how you'd set up a test environment in Hatch. This"
+" configuration creates a `test` environment with pytest and pytest-cov "
+"installed, defines a `run` script to execute your tests, and sets up "
+"matrix testing to run tests on Python 3.10, 3.11, and 3.12:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:217
+#: ../../maintain-automate/task-runners.md:269
+#: ../../maintain-automate/task-runners.md:315
+#: ../../maintain-automate/task-runners.md:356
+#: ../../maintain-automate/task-runners.md:396
+msgid "You would run the above in your terminal using:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:219
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:221
+msgid "**Learn more:** [Hatch documentation](https://hatch.pypa.io/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:225
+msgid ""
+"[Nox](https://nox.thea.codes/) is a Python-based automation toolkit "
+"focused on testing across environments. It uses a code-based (imperative)"
+" configuration approach that gives you maximum flexibility for complex "
+"testing workflows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:230
+msgid "Why we like Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:232
+msgid ""
+"Nox stands out because it uses Python code to define your tasks, which "
+"means you can include complex logic and conditionals directly in your "
+"automation workflows. Because sessions are written in Python, they're "
+"explicit, easy to inspect, and straightforward to debug. Nox is "
+"particularly powerful for handling complex test and build scenarios that "
+"some packages require, and it's especially popular in the Scientific "
+"Python ecosystem. You'll find many pyOpenSci documentation repositories "
+"use Nox to automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:242
+msgid "When to use Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:244
+msgid ""
+"Nox is ideal when you need complex testing scenarios with conditional "
+"logic or when you prefer Python-based configuration over declarative "
+"formats. It's excellent for testing across Python versions and managing "
+"multiple testing environments. If packaging is handled separately and you"
+" want maximum flexibility in your task automation, Nox is a great choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:253
+msgid ""
+"Below is an example of a Nox session that runs tests across multiple "
+"Python versions. The `@nox.session` decorator defines a session (similar "
+"to a task), and you specify which Python versions to test with. Nox will "
+"create isolated environments for each version and run your tests:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:271
+msgid "`nox -s tests`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:273
+msgid "**Learn more:** [Nox documentation](https://nox.thea.codes/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:277
+msgid ""
+"[Tox](https://tox.wiki/) is a mature automation tool for testing in "
+"multiple environments. It uses declarative configuration and has been a "
+"standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:281
+msgid "Why people use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:283
+msgid ""
+"Tox is mature and stable, with a long history in the Python ecosystem. It"
+" uses declarative configuration (traditionally INI format, though TOML "
+"support was added recently) and is particularly good for testing across "
+"Python versions and dependency sets. Many projects use Tox because it "
+"integrates well with CI/CD systems and has a robust plugin ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:290
+msgid "When to use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:292
+msgid ""
+"Tox is ideal if you're maintaining a legacy project that already uses it,"
+" or if you have existing `tox.ini` configuration you want to preserve. "
+"It's also a good choice if you need specific Tox plugins or prefer "
+"declarative configuration separate from your packaging tools. However, "
+"keep in mind that Tox can be slower than modern alternatives like Hatch."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:301
+msgid ""
+"Below is an example of a Tox configuration that runs tests across "
+"multiple Python versions. The `envlist` specifies which Python versions "
+"to test, and the `testenv` section defines what to install and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:317
+msgid ""
+"`tox` (runs all environments) or `tox -e py310` (runs a specific "
+"environment)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:319
+msgid "**Learn more:** [Tox documentation](https://tox.wiki/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:323
+msgid ""
+"[Make](https://www.gnu.org/software/make/) is a traditional build "
+"automation tool that uses Makefiles. It's been around since the 1970s and"
+" is widely used across many programming languages."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:327
+msgid "Why people use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:329
+msgid ""
+"Make is widely known and available on most systems, making it a familiar "
+"choice for many developers. It has simple syntax for basic tasks and "
+"executes very quickly. Because it's not Python-specific, you can use it "
+"to coordinate tasks across different languages in the same project."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:335
+msgid "When to use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:337
+msgid ""
+"Make is best for simple task automation when you don't need Python-"
+"specific features or environment management. It's a good lightweight "
+"option if you want something fast and universally available. However, be "
+"aware that Make can have cross-platform compatibility issues, especially "
+"on Windows, and you'll need to handle Python environment management "
+"separately."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:346
+msgid ""
+"Below is an example of a simple Makefile with tasks for testing and "
+"building documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:358
+msgid "`make test` or `make docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:362
+msgid ""
+"[Just](https://just.systems/) is a modern command runner written in Rust "
+"that offers a simpler, more user-friendly alternative to Make."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:365
+msgid "Why people use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:367
+msgid ""
+"Just has simple, Make-like syntax but with better error messages and more"
+" intuitive behavior. It's fast, truly cross-platform (unlike Make), and "
+"easy to learn. The tool is written in Rust, which makes it very "
+"performant, and it avoids many of the quirks and gotchas that Make has "
+"accumulated over decades."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:373
+msgid "When to use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:375
+msgid ""
+"Just is ideal when you need a lightweight command runner for simple tasks"
+" and don't require Python-specific features or environment management. "
+"It's a great choice if you want something faster and more modern than "
+"Make, with better cross-platform support. However, keep in mind that Just"
+" requires separate installation and has less integration with the Python "
+"packaging ecosystem compared to tools like Hatch or Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:385
+msgid ""
+"Below is an example of a justfile with tasks for testing and building "
+"documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:398
+msgid "`just test` or `just docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:400
+msgid "**Learn more:** [Just documentation](https://just.systems/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:402
+msgid "Choosing the right task runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:404
+msgid "**Choose Hatch if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:406
+msgid "You're building a Python package"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:407
+msgid "You want an all-in-one tool"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:408
+msgid "You prefer configuration in pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:409
+msgid "You want fast environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:410
+msgid "You prefer declarative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:412
+msgid "**Choose Nox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:414
+msgid "You need complex testing scenarios with conditional logic"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:415
+msgid "You prefer Python-based, imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:416
+msgid "You're working in the Scientific Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:417
+msgid "Packaging is handled separately"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:418
+msgid "You want maximum flexibility"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:420
+msgid "**Choose Tox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:422
+msgid "You're maintaining a legacy project already using it"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:423
+msgid "You have existing tox.ini configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:424
+msgid "You need specific tox plugins"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:425
+msgid "You prefer declarative configuration separate from packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:427
+msgid "**Choose Make or Just if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:429
+msgid "You need a lightweight command runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:430
+msgid "You're not doing Python-specific workflows"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:431
+msgid "You want something simple and fast"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:432
+msgid "You don't need environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:434
+msgid "Next steps"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:436
+msgid ""
+"Learn how to use [Hatch "
+"environments](https://hatch.pypa.io/latest/tutorials/environment/basic-"
+"usage/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:437
+msgid ""
+"[Create a package using the Python package tutorial.](create-pure-python-"
+"package)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:438
+msgid ""
+"Explore and use the [pyOpenSci package "
+"template](https://github.com/pyOpenSci/pyos-package-template) with pre-"
+"configured Hatch tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:441
+msgid ""
+"Read the [Scientific Python development guide on task "
+"runners](https://learn.scientific-python.org/development/guides/tasks/). "
+"This guide is excellent if you plan to use nox as your task runner as it "
+"has lots of examples that you can follow."
+msgstr ""
diff --git a/locales/bg/LC_MESSAGES/package-structure-code.po b/locales/bg/LC_MESSAGES/package-structure-code.po
new file mode 100644
index 000000000..a0125d2ce
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/package-structure-code.po
@@ -0,0 +1,5442 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../package-structure-code/code-style-linting-format.md:1
+msgid "Python Package Code Style, Format and Linters"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:3
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:12
+msgid "Take Aways"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:5
+msgid "pyOpenSci requires authors to follow PEP 8 code format guidelines"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:6
+msgid ""
+"Setting up a code formatters like Black and isort will help you enforce "
+"PEP 8 style guidelines and also consistent, readable code format"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:7
+msgid "Some commonly used tools are: Black, Isort, flake8, Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:8
+msgid ""
+"You can also setup pre-commit hooks which will run code formatters "
+"locally each time you make a commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:10
+msgid ""
+"[precommit.ci](https://pre-commit.ci/) is a bot that you can add to your "
+"GitHub repository. It will automagically apply code format to every PR "
+"using the tools specified in your pre-commit-config.yaml file. It can "
+"save significant time and make contributions easier for new contributors."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:11
+msgid ""
+"Automation is good! By making code quality tools care of your code, you "
+"can focus on structural and high values tasks."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:14
+msgid ""
+"Consistent code format and style is useful to both your package and "
+"across the scientific Python ecosystem because using similar formats "
+"makes code easier to read."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:18
+msgid ""
+"For instance, if you saw a sentence like this one without any spaces, or "
+"punctuation, it would take your brain longer to process it."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:25
+msgid ""
+"pyOpenSci peer review process requires that you to follow standard "
+"[Python PEP 8 format rules](https://peps.python.org/pep-0008/) as closely"
+" as you can."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:29
+msgid ""
+"pyOpenSci doesn't require you to use a specific code format tool. "
+"However, we do look for consistency and readability in code style. Below "
+"you will find a discussion of:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:33
+msgid "The benefits of using linters and code format tools in your workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:34
+msgid "Some commonly used tools in the scientific Python space"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:35
+msgid ""
+"Setting up pre-commit hooks and the pre-commit.ci bot to make using code "
+"format tools in daily workflows and in pull requests on GitHub easier."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:39
+msgid "Use a code format tool (or tools) to make your life easier"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:41
+msgid ""
+"We suggest that you use a code format tool, or a set of format tools, "
+"because manually applying all of the PEP 8 format specifications is both "
+"time consuming for maintainers and can be a road block for potential new "
+"contributors. Code formatters will automagically reformat your code for "
+"you, adhering to PEP 8 standards and applying consistent style decisions "
+"throughout."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:47
+msgid "Setting up a code format suite of tools will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:49
+msgid "Save you and your maintainer team time in fixing PEP 8 inconsistencies."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:50
+msgid "Ensure that format and style is consistent across your entire code-base."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:51
+msgid ""
+"Avoid lengthy discussions with contributors and other maintainers about "
+"personalized code format preferences during reviews."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:53
+msgid ""
+"Avoid pure visual edits in the code base so that code reviews focus on "
+"added value"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:55
+msgid ""
+"Many packages use a suite of tools to apply code format rules, taking the"
+" work out of manually implementing code format requirements."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:58
+msgid ""
+"Consistent code format across packages within the (scientific) Python "
+"ecosystem, will also broadly make code easier to scan, understand and "
+"contribute to."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:61
+msgid "Linting vs. format and style"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:63
+msgid "Before we dive in let's get a few definitions out of the way."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:65
+msgid "Code linting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:67
+msgid ""
+"A code linter is a tool that will review your code and identify errors or"
+" issues. A linter typically does not modify your code. It will tell you "
+"what the error is and on what line it was discovered. Flake8, discussed "
+"below, is an example of a commonly-used code linter."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:72
+msgid "Code formatters (and stylers)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:74
+msgid ""
+"Code formatters will reformat your code for you. Python focused code "
+"formatters often follow PEP 8 standards. However, they also make "
+"stylistic decisions about code consistency."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:78
+msgid ""
+"Black is an example of a commonly-used code formatter. Black both applies"
+" PEP 8 standards while also making decisions about things like consistent"
+" use of double quotes for strings, and spacing of items in lists."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:82
+msgid "You will learn more about Black below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:84
+msgid "Code linting, formatting and styling tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:87
+msgid "Black"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:89
+msgid ""
+"[Black](https://black.readthedocs.io/en/stable/) is a code formatter. "
+"Black will automagically (and _unapologetically_) fix spacing issues and "
+"ensure code format is consistent throughout your package. Black also "
+"generally adheres to PEP 8 style guidelines with some exceptions. A few "
+"examples of those exceptions are below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:95
+msgid ""
+"Black defaults to a line length of 88 (79 + 10%) rather than the 79 "
+"character `PEP 8` specification. However, line length is a setting can be"
+" manually overwritten in your Black configuration."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:96
+msgid "Black will not adjust line length in your comments or docstrings."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:97
+msgid ""
+"This tool will not review and fix import order (you need `isort` or "
+"`ruff` to do that - see below)."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:100
+msgid ""
+"If you are interested in seeing how Black will format your code, you can "
+"use the [Black playground](https://black.vercel.app/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:104
+msgid ""
+"Using a code formatter like Black will leave you more time to work on "
+"code function rather than worry about format."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:108
+msgid "Flake8"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:110
+msgid ""
+"To adhere to Python `pep8` format standards, you might want to add "
+"[flake8](https://flake8.pycqa.org/en/latest/) to your code format "
+"toolbox."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:114
+msgid "flake8 will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:116
+msgid ""
+"Flag every line in your code that extends beyond 79 characters (including"
+" those in docstrings and comments)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:117
+msgid ""
+"Flag spacing issues that conflict with PEP 8 guidelines such as missing "
+"spaces after commas"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:119
+msgid ""
+"Flake8 also flags unused imports and unused declared variables in your "
+"modules."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:122
+msgid ""
+"Below you can see the output of running `flake8 filename.py` at the "
+"command line for a Python file within a package called `stravalib`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:126
+msgid "The line length standard for PEP 8 is 79 characters."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:128
+msgid ""
+"Notice that flake8 returns a list of issues that it found in the model.py"
+" module on the command line. The Python file itself is not modified. "
+"Using this output, you can fix each issue line by line manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:143
+msgid "Isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:145
+msgid ""
+"Python imports refer to the Python packages that a module in your package"
+" requires. Imports should always be located at the top of each Python "
+"module in your package."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:149
+msgid ""
+"[PEP 8 has specific standards for the order of these "
+"imports](https://peps.python.org/pep-0008/#imports). These standards are "
+"listed below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:151
+msgid "Imports should be grouped in the following order:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:153
+msgid "Standard library imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:154
+msgid "Related third party imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:155
+msgid "Local application/library specific imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:157
+msgid ""
+"While `flake8` will identify unused imports in your code, it won't fix or"
+" identify issues with the order of package imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:160
+msgid ""
+"`isort` will identify where imports in your code are out of order. It "
+"will then modify your code, automatically reordering all imports. This "
+"leaves you with one less thing to think about when cleaning up your code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:165
+msgid "Example application of isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:167
+msgid "Code imports before `isort` is run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:169
+msgid ""
+"Below, the `pandas` is a third party package, `typing` is a core `Python`"
+" package distributed with `Python`, and `examplePy.temperature` is a "
+"first-party module which means it belongs to the same package as the file"
+" doing the import. Also notice that there are no spaces in the imports "
+"listed below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:179
+msgid "From the project root, run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:185
+msgid "Python file `temporal.py` imports after `isort` has been run"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:193
+msgid "Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:195
+msgid ""
+"[Ruff](https://docs.astral.sh/ruff/) is a new addition to the code "
+"quality ecosystem, gaining some traction since its release. `ruff` is "
+"both a linter and a code formatter for Python, aiming to replace several "
+"tools behind a single interface. As such, `ruff` can be used at a "
+"replacement of all other tools mentioned here, or in complement to some "
+"of them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:201
+msgid ""
+"`ruff` has some interesting features that distinguish it from other "
+"linters:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:203
+msgid "Linter configuration in `pyproject.toml`"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:204
+msgid "Several hundred rules included, many of which are automatically fixable"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:205
+msgid ""
+"Rules explanation, see [F403](https://docs.astral.sh/ruff/rules"
+"/undefined-local-with-import-star/) for an example"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:206
+msgid ""
+"Fast execution time, makes a quick feedback loop possible even on large "
+"projects."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:208
+msgid ""
+"Here is a simple configuration to get started with `ruff`. It would go "
+"into your `pyproject.toml`:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:216
+msgid ""
+"Depending on your project, you might want to add the following to sort "
+"imports correctly:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:224
+msgid "How to use code formatter in your local workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:226
+msgid "Linters, code formatters and your favorite coding tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:228
+msgid ""
+"Linters can be run as a command-line tool as shown above. They also can "
+"be run within your favorite coding tool (e.g. VScode, pycharm, etc). For "
+"example, you might prefer to have tools like Black and isort run when you"
+" save a file. In some editors you can also setup shortcuts that run your "
+"favorite code format tools on demand."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:234
+msgid "Use pre-commit hooks to run code formatters and linters on commits"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:236
+msgid "You can also setup a `pre-commit hook` in your Python package repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:238
+msgid ""
+"A pre-commit hook is a tool that allows an action (or actions) to be "
+"triggered when you apply a commit to your git repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:241
+msgid "Pre-commit hook example workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:243
+msgid "The precommit workflow looks like this: You type and run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:246
+msgid "`git commit -m \"message here\"` at the command line"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:248
+msgid ""
+"Once you hit return, pre-commit will run any tools that you have "
+"configured in a **.pre-commit-config.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:250
+msgid ""
+"If the tools configured in the pre-commit hook run successfully without "
+"making changes or finding errors in your code, the commit will be applied"
+" to the repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:254
+msgid ""
+"If the tools configured in the hook find errors in your files, the commit"
+" will NOT be applied to the repository. Remember from the discussion "
+"above that a code formatter like Black will run and reformat your code. A"
+" linter like _flake8_ will provide you with some output that details "
+"where there are syntax issues in your code. You will then need to fix "
+"those issues, manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:261
+msgid ""
+"Once all of the fixes are applied you can re-add (stage) the files to be "
+"commit. And re-run your commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:265
+msgid "Diagram showing the steps of a pre-commit workflow from left to right."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:267
+msgid ""
+"The pre-commit workflow begins with you adding files that have changes to"
+" be staged in git. Next, you'd run git commit. When you run git commit, "
+"the pre-commit hooks will then run. In this example, Black, the code "
+"formatter and flake8, a linter both run. If all of the files pass Black "
+"and flake8 checks, then your commit will be recorded. If they don't, the "
+"commit is canceled. You will have to fix any flake8 issues, and then re-"
+"add / stage the files to be committed. [_Image "
+"Source_](https://ljvmiranda921.github.io/notebook/2018/06/21/precommits-"
+"using-black-and-flake8/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:280
+msgid ""
+"If have a Python code-base and multiple maintainers actively working on "
+"the code, and you intend to run a tool like Black, be sure to coordinate "
+"across your team. An initial commit that applies Black to your entire "
+"package will likely change a significant amount of your code. This could "
+"lead to merge conflicts on open and new PR's before the new changes are "
+"merged."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:287
+msgid "General pre commit checks"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:289
+msgid ""
+"In addition to calling tools, Pre-commit also has a suite of [built in "
+"format hooks](https://github.com/pre-commit/pre-commit-hooks#hooks-"
+"available) that you can call. Some, such as `trailing-whitespace` can be "
+"also useful to add to your pre-commit workflow to ensure clean, "
+"streamlined code files."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:294
+msgid ""
+"An example pre-commit-config.yaml file is below with examples of how this"
+" is all setup."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:297
+msgid "Pre-commit.ci"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:299
+msgid ""
+"[Pre-commit.ci](https://pre-commit.ci) is a bot that may become your new "
+"best friend. This bot, when setup on a repo can be configured to do the "
+"following:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:302
+msgid "It will check every pull request using all of the pre-commit hook setting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:303
+msgid ""
+"If you wish, it will also submit a pull request to your repo with pre-"
+"commit fixes, saving you, and new contributors the time of reformatting a"
+" pr that has format issues."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:306
+msgid "You can also call the bot on any pull request to run / and fix the code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:308
+msgid ""
+"The pre-commit.ci bot uses the same pre-commit-config.yaml file that you "
+"use to setup pre-commit locally."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:311
+msgid "Setting up a bot like this can be valuable because:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:313
+msgid ""
+"It can make is easier for maintainers as they no longer have to worry at "
+"allows about fixing code format. The bot will do the work for them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:315
+msgid ""
+"It can make it easier for new comers as they never have to setup pre-"
+"commit locally or worry about linting their code. They can even make "
+"small fixes to the code directly on GitHub without worry."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:317
+msgid "Setting up a git pre-commit hook"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:319
+msgid "To setup pre-commit locally, you need to do 3 things:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:321
+msgid ""
+"Install pre-commit (and include it as a development requirement in your "
+"repository)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:331
+msgid ""
+"Create a .pre-commit-config.yaml file in the root of your package "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:333
+msgid ""
+"Below is an example **.pre-commit-cofig.yaml** file that can be used to "
+"setup the pre-commit hook and the pre-commit.ci bot if you chose to "
+"implement that too."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:341
+msgid ""
+"This file specifies a hook that will be triggered automatically before "
+"each `git commit`, in this case, it specifies a `flake8` using version "
+"`6.0.0`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:344
+msgid ""
+"Install your pre-commit hook(s) using `pre-commit install`. This will "
+"install all of the hooks specified in the pre-commit yaml file into your "
+"environment."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:346
+msgid ""
+"Once you have done the above, you are ready to start working on your "
+"code. Pre-commit will run every time you run `git commit`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:349
+msgid "Summary"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:351
+msgid ""
+"pyOpenSci suggests setting up a linter and a code styler for your "
+"package, regardless of whether you use pre-commit hooks, CI or other "
+"infrastructure to manage code format. Setting up these tools will give "
+"you automatic feedback about your code's structure as you (or a "
+"contributor) write it. And using a tool like black that format code for "
+"you, reduce effort that you need to make surrounding decisions around "
+"code format and style."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:1
+msgid "Complex Python package builds"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:3
+msgid ""
+"This guide is focused on packages that are either pure-python or that "
+"have a few simple extensions in another language such as C or C++."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:6
+msgid ""
+"For comprehensive guidance on packaging compiled projects with "
+"C/C++/Fortran/Rust extensions, see the [Scientific Python Development "
+"Guide on compiled packaging](https://learn.scientific-"
+"python.org/development/guides/packaging-compiled/). This is the best "
+"reference for complex builds and covers scikit-build-core, meson-python, "
+"maturin, and other modern build backends."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:8
+msgid ""
+"If you have questions about these types of package, please open an [issue"
+" about this guide specifically in the GitHub repo for this "
+"guide](https://github.com/pyOpenSci/python-package-guide/issues). There "
+"are many nuances to building and distributing Python packages that have "
+"compiled extensions requiring non-Python dependencies at build time. For "
+"an overview and thorough discussion of these nuances, please see [this "
+"site.](https://pypackaging-native.github.io/)"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:10
+msgid "Pure Python packages vs. packages with extensions in other languages"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:12
+msgid ""
+"You can classify Python package complexity into three general categories."
+" These categories can in turn help you select the correct package "
+"frontend and backend tools."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:16
+msgid ""
+"**Pure-python packages:** these are packages that only rely on Python to "
+"function. Building a pure Python package is simpler. As such, you can "
+"chose a tool below that has the features that you want and be done with "
+"your decision!"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:18
+msgid ""
+"**Python packages with non-Python extensions:** These packages have "
+"additional components called extensions written in other languages (such "
+"as C or C++). If you have a package with non-Python extensions, then you "
+"need to select a build backend tool that allows additional build steps "
+"needed to compile your extension code. Further, if you wish to use a "
+"frontend tool to support your workflow, you will need to select a tool "
+"that supports additional build setups. We suggest that you chose build "
+"tool that supports custom build steps like Hatch."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:20
+msgid ""
+"**Python packages that have extensions written in different languages "
+"(e.g. Fortran and C++) or that have non Python dependencies that are "
+"difficult to install (e.g. GDAL):** These packages often have complex "
+"build steps (more complex than a package with just a few C extensions for"
+" instance). As such, these packages require tools such as [scikit-"
+"build](https://scikit-build.readthedocs.io/en/latest/) or [meson-"
+"python](https://mesonbuild.com/Python-module.html) to build. NOTE: you "
+"can use meson-python with PDM."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:23
+msgid "Mixing frontend and backend projects"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:25
+msgid ""
+"It is sometimes necessary or desirable to use a build frontend with an "
+"alternative build-backend. This is because some frontends do not have a "
+"default backend (`build`), and this choice is placed on the maintainer. "
+"Other backends (`hatch`) have a preferred backend (`hatchling`) but allow"
+" the maintainer to migrate to another, while some backends (`poetry`) "
+"only work with a single backend (`poetry-core`). Refer to (#python-"
+"package-build-tools) for more information about frontend and backend "
+"compatibility."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:31
+msgid ""
+"In this packaging guide we recommend using `hatch` along with its "
+"preferred backend `hatchling`. While this will be suitable for most "
+"packages, an alternate backend may be used with Hatch if needed when "
+"creating an extension module. A Python extension module is one that is "
+"made up, either in part or entirely, of compiled code. In this case the "
+"backend chosen (such as `meson-python`) must know how to compile the "
+"extension language and bind it to Python. `hatchling` does not know how "
+"to do this all on its own and must either make use of "
+"[plugins](https://hatch.pypa.io/1.9/plugins/about/) or be replaced by a "
+"backend that is already capable of building extension modules."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:39
+msgid ""
+"In order to use a different backend you will need to edit your project's "
+"`pyproject.toml`. If you have a `pyproject.toml` generated by the `hatch`"
+" command, or from following the packaging tutorial, you may have to make "
+"a change like this"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:6
+msgid "Dependencies for your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:8
+msgid ""
+"In the [pyproject.toml overview page](pyproject-toml-python-package-"
+"metadata), you learned how to set up a **pyproject.toml** file with basic"
+" metadata for your package. On this page, you will learn how to specify "
+"different types of dependencies in your `pyproject.toml`."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:14
+msgid "What is a package dependency?"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:16
+msgid ""
+"A Python package dependency refers to an external package or A tool that "
+"is needed when using or working on your Python project. Declare your "
+"dependencies in your `pyproject.toml` file. This keeps all package "
+"metadata in one place, making it simpler for users and contributors to "
+"understand your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:19
+msgid "Older ways to declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:22
+msgid ""
+"While `pyproject.toml` is now the standard, you may sometimes encounter "
+"older approaches to storing dependencies \"in the wild\":"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:24
+msgid ""
+"**requirements.txt**: Previously common for dependencies, still used by "
+"some projects for local development"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:25
+msgid ""
+"**setup.py or setup.cfg**: May be needed for packages with extensions in "
+"other languages"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:27
+msgid ""
+"[Learn more in the setuptools "
+"documentation](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html"
+"#declaring-required-dependency)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:30
+msgid "Why specify dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:32
+msgid ""
+"Specifying dependencies in the `project.dependencies` array of your "
+"`pyproject.toml` file ensures that libraries needed to run your package "
+"are correctly installed into a user's environment. For instance, if your "
+"package requires Pandas to run properly, and you add Pandas to the "
+"`project.dependencies` array, Pandas will be installed into the users' "
+"environment when they install your package using uv, pip, or conda."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:45
+msgid ""
+"Development dependencies make it easier for contributors to work on your "
+"package. You can set up instructions for running specific workflows, such"
+" as tests, linting, and even typing, that automatically install groups of"
+" development dependencies. These dependencies can be stored in arrays "
+"(lists of dependencies) within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:55
+msgid "Types of dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:57
+msgid ""
+"There are three different types of dependencies that you will learn about"
+" on this page:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:59
+msgid ""
+"**Required dependencies:** These are dependencies that need to be "
+"installed for your package to work correctly in a user's environment. You"
+" add these dependencies to the `project.dependencies` table in your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:60
+msgid ""
+"**Feature Dependencies:** These are dependencies that are required if a "
+"user wants to access additional functionality (that is not core) to your "
+"package. Store these in the `[project.optional-dependencies]` table or "
+"your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:61
+msgid ""
+"**Development Dependencies:** These dependencies are required if someone "
+"wants to develop or work on your package. These include instance linters,"
+" testing tools like pytest and mypy are examples of development "
+"dependencies. Store these in the `[dependency-groups]` table of your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:64
+msgid ""
+"A dependency is not part of your project's codebase. It is a package or "
+"software called within the code of your project or used during the "
+"development of your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:69
+msgid "1. Required dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:71
+msgid ""
+"Required dependencies are imported and called directly within your "
+"package's code. They are needed for your package to run."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:74
+msgid ""
+"You can add your required dependencies to the `dependencies` array in the"
+" `[project]` table of your **pyproject.toml** file. When users install "
+"your package with uv, pip, or conda, these dependencies will be "
+"automatically installed alongside your package in their environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:92
+msgid ""
+"Try your best to minimize dependencies whenever possible. Remember that "
+"fewer dependencies reduce the possibility of version conflicts in user "
+"environments."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add Required Dependencies with UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:102
+#: ../../package-structure-code/declare-dependencies.md:162
+#: ../../package-structure-code/declare-dependencies.md:222
+msgid "You can use uv to add dependencies to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:104
+msgid "**Add a required dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:110
+msgid "Will add numpy as a dependency to your `project.dependencies` array:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:121
+msgid "Requiring packages from GitHub / Gitlab"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:124
+msgid ""
+"If you have dependencies that need to be installed directly from GitHub, "
+"you can specify them in your pyproject.toml file like this:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:133
+msgid ""
+"IMPORTANT: If your library depends on a GitHub-hosted project, you should"
+" point to a specific commit/tag/hash of that repository before you upload"
+" your project to PyPI. You never know how the project might change over "
+"time. Commit hashes are more reliable as they can't be changed"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:140
+msgid "2. Optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:142
+msgid ""
+"Optional (also referred to as feature) dependencies can be installed by "
+"users as needed. Optional dependencies add specific features to your "
+"package that not all users need. For example, if your package has an "
+"optional interactive plotting feature that uses Bokeh, you would list "
+"Bokeh under `[project.optional-dependencies]`. Users who want interactive"
+" plotting will install it. Users who don't need plotting don't have to "
+"install it."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:144
+msgid "Place these dependencies in the `[project.optional-dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:155
+msgid ""
+"When a user installs your package, uv, pip, or conda automatically "
+"installs all required dependencies. Optional dependencies are only "
+"installed if the user explicitly requests them."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add optional dependencies using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:164
+msgid "**Add an optional dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:170
+msgid "Will add this to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:181
+msgid "3. Dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:183
+msgid ""
+"Development dependencies include packages needed to work on your package "
+"locally. They are used to perform tasks such as:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:186
+msgid "running your test suite (pytest, pytest-cov)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:187
+msgid "building your documentation (sphinx, sphinx-theme packages)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:188
+msgid "linting and formatting code (ruff, black)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:189
+msgid "building package distribution files (build, twine)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:191
+msgid ""
+"Dependency groups are optional because they are not required for users to"
+" install and use your package. However, they will make it easier for "
+"contributors to your project to setup development environments locally."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:196
+msgid "New: PEP 735 dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:199
+msgid ""
+"`[dependency-groups]` is a newer specification introduced by PEP 735. "
+"They are intended to organize development dependencies and are "
+"intentionally separate from `[project.optional-dependencies]`, which can"
+" be installed into a user's environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:203
+msgid "How to declare dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:205
+msgid ""
+"You declare development dependencies in your **pyproject.toml** file "
+"within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:208
+msgid ""
+"Similar to optional-dependencies, you can create separate subgroups or "
+"arrays with names using the syntax: `group-name = [\"dep1\", \"dep2\"]`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add [dependency-groups] using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:224
+msgid "**Add a development dependency group:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:231
+msgid "Will add the following to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:244
+#: ../../package-structure-code/declare-dependencies.md:250
+#: ../../package-structure-code/declare-dependencies.md:294
+#: ../../package-structure-code/declare-dependencies.md:413
+#: ../../package-structure-code/declare-dependencies.md:495
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:14
+msgid "Todo"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:245
+msgid ""
+"i'll pick back up here tomorrow - this section is all about how things "
+"install and what \"ships\" with your package vs what just gets installed "
+"via commands (ie development)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:248
+msgid "Understanding required vs. optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:251
+msgid ""
+"The purpose of this section is to help users understand how dependencies "
+"relate to what is installed in their environment. We have two graphics on"
+" this page - one that breaks out the two buckets of tools (required and "
+"optional) that both get installed into a user's envt vs development "
+"groups, which are contributor/ development facing, not user-facing. When "
+"we originally wrote this section, development groups didn't exist, and we"
+" were using optional dependencies for dev groups."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:253
+msgid ""
+"The graphic below is two circles representing optional vs regular / "
+"required deps - created before development groups existed... there is "
+"another graphi that shows what gets installed into a uses envt."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:257
+msgid ""
+"Diagram showing two main groups of Python package dependencies: required "
+"and optional. Required dependencies include core packages needed to use "
+"your package. Optional dependencies include development dependencies for "
+"working on the package locally and feature dependencies for additional "
+"functionality."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:259
+msgid ""
+"Python package dependencies fall into two categories: **required** "
+"dependencies that users need to run your package, and **optional** "
+"dependencies for development work or additional features."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:264
+msgid "Additional dependency resources"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:266
+msgid ""
+"[Learn more: View PyPA's overview of declaring optional "
+"dependencies](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/#dependencies-optional-dependencies)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:267
+msgid ""
+"[Dependency "
+"specifiers](https://packaging.python.org/en/latest/specifications"
+"/dependency-specifiers/)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:271
+msgid "Install dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:273
+msgid ""
+"When someone installs your package, only core dependencies are installed "
+"by default. To install optional dependencies, you need to specify which "
+"groups to include when installing the package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:279
+msgid ""
+"Diagram showing a Venn diagram with three sections representing "
+"dependency groups - docs, feature, and tests. In the center it shows "
+"your-package with core dependencies seaborn and numpy. Two arrows on the "
+"right demonstrate: first, python -m pip install your-package installs "
+"only the package and core dependencies. Second, python -m pip install "
+"your-package[tests] installs the package, core dependencies, and test "
+"dependencies including pytest and pytest-cov."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:281
+msgid ""
+"When a user installs your package using `pip install your-package`, only "
+"your package and its core dependencies get installed. When they install "
+"with `pip install your-package[tests]`, pip will install your package, "
+"core dependencies, and the test dependencies from the `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:288
+msgid "Using uv or pip for installation"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:290
+msgid ""
+"UV streamlines this process, allowing you to sync a venv in your project "
+"directory with both an editable install of your package and its "
+"dependencies automatically. You can also use pip and install dependencies"
+" into the environment of your choice."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:295
+msgid ""
+"We shouldn't show UV pip install, so how do you add optional feature deps"
+" with UV??"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:298
+#: ../../package-structure-code/declare-dependencies.md:340
+msgid "**Install dependency groups:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:304
+msgid "You can use uv sync to sync dependency groups in your uv-managed venv"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:312
+#: ../../package-structure-code/declare-dependencies.md:333
+msgid "**Install optional dependencies:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:320
+msgid "**Install everything (package + all dependencies):**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:326
+msgid ""
+"`uv sync` is the recommended command for development workflows. It "
+"manages your virtual environment and keeps your lockfile up to date. Use "
+"`uv pip install` when you need pip-compatible behavior."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use pip (version >=25.1)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:347
+msgid ""
+"Always call pip using `python -m pip` to ensure you're using the pip from"
+" your current active Python environment. This helps avoid installation "
+"conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:351
+msgid ""
+"**Note:** Some shells (like zsh on Mac) require quotes around brackets to"
+" run successfully:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:353
+msgid "`python -m pip install \".[tests]\"`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:359
+msgid "Combining dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:361
+msgid "You can also create combined groups that reference other groups:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:370
+msgid "Then install everything with pip install or uv sync as needed:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:379
+msgid ""
+"When you install optional dependencies, pip and uv install your package "
+"and its core dependencies automatically."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:383
+msgid "Version specifiers for dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:385
+msgid ""
+"Version specifiers control which versions of a dependency work with your "
+"package. Use them to specify minimum versions, exclude buggy releases, or"
+" set version ranges."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:389
+msgid "Common operators"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:391
+msgid ""
+"**`>=`** Minimum version set: `numpy>=1.20` (This is the most common "
+"approach and is recommended)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:392
+msgid ""
+"**`==`** Exact version: `requests==2.28.0` (Avoid pinning dependencies "
+"like this unless necessary)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:393
+msgid ""
+"**`~=`** Compatible release: `django~=4.2.0` (Allows patches: "
+">=4.2.0,<4.3.0)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:394
+msgid "**`<` or `>`** - Upper/lower bounds: `pandas>=1.0,<3.0`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:395
+msgid ""
+"**`!=`** Exclude version: `scipy>=1.7,!=1.8.0` (Rare but allows you to "
+"skip a buggy release version)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:398
+msgid ""
+"**Best practice:** Use `>=` to specify your minimum tested version and "
+"avoid upper bounds unless you know at what version that dependency is no "
+"longer compatible. UV will do this by default when it adds a dependency "
+"to your pyproject.toml file. This keeps your package flexible and reduces"
+" dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:414
+msgid "Using conda and Pixi"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:418
+msgid ""
+"The `pyproject.toml` file works great for pure-Python packages. However, "
+"some packages (particularly in the scientific Python ecosystem) require "
+"dependencies written in other languages like C or Fortran. Conda was "
+"created to support the distribution of tools with non-Python "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:423
+msgid "**For conda users:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:425
+msgid ""
+"You can maintain an `environment.yml` file to help users and contributors"
+" set up conda environments. This is especially useful for packages with "
+"system-level dependencies like GDAL."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:429
+msgid "**Consider Pixi for conda package focused workflows:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:431
+msgid ""
+"[Pixi](https://pixi.sh) is a modern package manager built on top of both "
+"the conda and Python package ecosystems. Pixi is able to treat conda and "
+"Python package requirements with parity when resolving environments, but "
+"uses a \"conda-first\" approach of using already resolved conda packages "
+"if possible when resolving Python dependencies. Pixi [can also use "
+"`pyproject.toml` for "
+"configuration](https://pixi.sh/latest/python/pyproject_toml/). If your "
+"project relies heavily on conda packages, Pixi offers a streamlined "
+"workflow with faster dependency resolution and automatic lock file "
+"support for full environment reproducibility. If you already have an "
+"existing conda environment definition file, like an `environment.yml`, "
+"you can [import the "
+"environment](https://pixi.sh/latest/tutorials/import/) into a new Pixi "
+"workspace with"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:449
+msgid "A note for conda users"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:452
+msgid ""
+"If you use a conda environment for development and install your package "
+"with `python -m pip install -e .` dependencies will be installed from "
+"PyPI, potentially overwriting conda packages that had already been "
+"installed. This can cause conflicts, especially for packages with system "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:457
+msgid "To avoid this, install your package without dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:463
+msgid "Then install dependencies through your conda `environment.yml` file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:466
+msgid "Dependencies in Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:468
+msgid ""
+"Once you've specified dependencies in your `pyproject.toml`, you can use "
+"them in other workflows like building documentation on Read the Docs."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:471
+msgid ""
+"[Read the Docs](https://readthedocs.org) is a documentation platform that"
+" automatically builds and publishes your documentation. To install your "
+"dependencies during the build process, configure them in a "
+"**readthedocs.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:476
+msgid "Here's an example that installs your `docs` optional dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:487
+msgid "Learn more about Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:490
+msgid ""
+"[Creating a readthedocs.yaml file](https://docs.readthedocs.io/en/stable"
+"/config-file/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:491
+msgid ""
+"[Using uv with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:492
+msgid ""
+"[Using Poetry with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html#install-dependencies-with-poetry)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:497
+msgid ""
+"Keep this comment - in this file for now - Jeremiah "
+"did a nice inventory of common shells and whether they need quotes or "
+"not. It's really comprehensive. But do we want it in the guide?? It's "
+"really useful for more advanced users."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:499
+msgid ""
+"Following this comment: "
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:502
+msgid "Jonny will add a section that talks about:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:504
+msgid ""
+"Why you specify dependencies How to specify dependencies When you use "
+"different specifiers"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Intro"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Python package structure"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "pyproject.toml Package Metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Package Build Tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Complex Builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Create & Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish with Conda / PyPI"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Package versions"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Code style"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish your package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:1
+msgid "Python Package Structure & Code"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:3
+msgid ""
+"This section covers everything you need to structure your Python package,"
+" configure metadata, choose build tools, and publish your package to PyPI"
+" and conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:9
+msgid "New to Python packaging?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:13
+msgid "**Start with our step-by-step tutorials:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:15
+msgid "Follow along as we create a package from scratch"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:16
+msgid "Learn by doing with guided examples"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:17
+msgid "Perfect for your first package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:19
+msgid "Start the tutorial series"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:27
+msgid "Already have code to package?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:30
+msgid "**Jump into the reference guides:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:32
+msgid "Learn about package structure and metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:33
+msgid "Compare build tools and choose what's right for you"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:34
+msgid "Understand the publishing process"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:36
+msgid "Start with the cards below ↓"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:40
+msgid "How this content is developed"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:43
+msgid ""
+"All of the content in this guide has been vetted by community members, "
+"including maintainers and developers of the core packaging tools."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:46
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:48
+msgid "In this section, you'll learn how to:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:50
+msgid ""
+"**Structure your package** - Choose between src and flat layouts, "
+"organize tests and documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:51
+msgid ""
+"**Configure metadata** - Set up `pyproject.toml` with project "
+"information, dependencies, and versioning"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:52
+msgid ""
+"**Choose build tools** - Compare Hatch, PDM, Poetry, and setuptools to "
+"find the right fit"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:53
+msgid ""
+"**Build distributions** - Create sdist and wheel files ready for "
+"publication"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:54
+msgid ""
+"**Publish your package** - Make your package available on PyPI and "
+"optionally conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:55
+msgid ""
+"**Maintain code quality** - Set up linters and formatters to keep your "
+"code consistent"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:57
+msgid ""
+"Our recommendations align with current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/), while "
+"prioritizing tools that are beginner-friendly and well-maintained."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:59
+msgid "Package setup"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:66
+msgid "✨ Package file structure ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:68
+msgid ""
+"Learn how to organize your package files using [src or flat layouts"
+"](package-source-layout). This page helps you decide on a package "
+"structure that follows modern Python best practices, including where to "
+"place [tests](src-layout-test) and [documentation](package-source-"
+"layout)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:71
+msgid "✨ Add metadata ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:73
+msgid ""
+"Learn how to add [project metadata](pyproject-toml-python-package-"
+"metadata) to your Python package to support both filtering on PyPI and "
+"also the metadata that a package installer needs to build and install "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:78
+msgid "✨ Declare dependencies ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:80
+msgid ""
+"Learn how to specify [required dependencies](required-dependencies), "
+"[optional feature dependencies](optional-dependencies), and [development "
+"dependencies](dependency-groups) in your [pyproject.toml file](pyproject-"
+"toml-overview)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:83
+msgid "✨ Setup package versioning ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:85
+msgid ""
+"Learn how to manage package versions using [semantic versioning (SemVer"
+")](package-versioning) or [calendar versioning (CalVer)](package-"
+"versioning). This page helps you choose the right versioning strategy and"
+" set up [automated version management](tools-version-management) using "
+"tools like hatch_vcs or setuptools-scm."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:89
+msgid "Development practices"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:96
+msgid "✨ Code style & linters ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:98
+msgid ""
+"Learn how to set up [code formatters and linters](code-style-tools) "
+"([Black](about-black), [Ruff](about-ruff), [flake8](about-flake8)) to "
+"ensure your package follows [PEP 8 standards](code-style-tools) and "
+"maintains consistent code style throughout your project."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:102
+msgid "Build & publish"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:109
+msgid "✨ Choose your build tool ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:111
+msgid ""
+"Learn how to choose the right packaging tool for your project. Compare "
+"[Hatch](about-hatch), [PDM](about-pdm), [Poetry](about-poetry), and "
+"[setuptools](about-setuptools) to find the best fit for your workflow. "
+"See the [summary comparison](summary-build-tools) to help decide."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:114
+msgid "✨ Build your package ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:116
+msgid ""
+"Learn how to build your Python package into [distribution files](build-"
+"package) ([sdist](python-source-distribution) and [wheel](python-wheel)) "
+"that can be published on [PyPI](publish-pypi-conda)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:119
+msgid "✨ Publish to PyPI and Conda ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:121
+msgid ""
+"Learn how to publish your package to [PyPI](publish-pypi-conda) and "
+"optionally to [conda-forge](how-to-submit-to-conda-forge). This page "
+"covers the complete process for making your package available to users, "
+"including the [conda-forge submission process](how-to-submit-to-conda-"
+"forge) after publishing to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:125
+msgid "Choosing the right tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:127
+msgid ""
+"Not sure which build tool to use? This decision tree can help you choose "
+"based on your package's needs:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:131
+msgid ""
+"Figure showing a decision tree with the various packaging tool front-end "
+"and back-end options."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:133
+msgid ""
+"Use this decision tree to help select a packaging tool. See the "
+"[packaging tools page](python-package-build-tools) for detailed "
+"comparisons and recommendations."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:136
+msgid "Our recommendations"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:138
+msgid "We suggest tools and approaches based on three principles:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:140
+msgid ""
+"**Beginner-friendly** - Tools that are easy to learn and use for those "
+"new to packaging"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:141
+msgid "**Well-maintained** - Tools with active development and good documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:142
+msgid ""
+"**Standards-aligned** - Tools that follow current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/)"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:144
+msgid "Pure Python vs. complex builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:146
+msgid ""
+"**Pure Python packages** can use any modern tool (Hatch, PDM, Poetry, "
+"Flit) - choose based on the features you want"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:147
+msgid ""
+"**Packages with C/C++ extensions** may need additional build steps. See "
+"our [complex builds page](complex-python-package-builds) for guidance. "
+"For comprehensive information on packaging compiled projects, see the "
+"[Scientific Python Development Guide on compiled packaging](https://learn"
+".scientific-python.org/development/guides/packaging-compiled/)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:149
+msgid ""
+"Most scientific Python packages start simple and can evolve to handle "
+"more complex requirements as needed."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:151
+msgid "Submitting your package for peer review?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:153
+msgid ""
+"If you're planning to submit your package to pyOpenSci for [peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), check "
+"out our [editor checklist](https://www.pyopensci.org/software-peer-review"
+"/how-to/editor-in-chief-guide.html#editor-checklist-template) for the "
+"minimum requirements. These checks are useful for anyone creating a "
+"Python package, not just those submitting for review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:155
+msgid "These are recommendations, not requirements"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:158
+msgid ""
+"The suggestions in this guide are designed to help you create a well-"
+"structured package. They are **not** specific requirements for pyOpenSci "
+"peer review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:160
+msgid ""
+"If you're submitting to pyOpenSci, see our [package "
+"scope](https://www.pyopensci.org/software-peer-review/about/package-"
+"scope.html) and [author guide](https://www.pyopensci.org/software-peer-"
+"review/how-to/author-guide.html#) for actual review requirements."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:1
+msgid "Publishing Your Package In A Community Repository: PyPI or Anaconda.org"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:5
+msgid ""
+"pyOpenSci requires that your package has an distribution that can be "
+"installed from a public community repository such as PyPI or a conda "
+"channel such as `bioconda` or `conda-forge` on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:9
+msgid ""
+"Below you will learn more about the various publishing options for your "
+"Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:14
+msgid ""
+"Installing packages in the same environment using both pip and conda can "
+"lead to package conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:16
+msgid ""
+"To minimize conflicts for users who may be using conda (or pip) to manage"
+" local environments, consider publishing your package to both PyPI and "
+"the conda-forge channel on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:18
+msgid ""
+"Below you will learn more specifics about the differences between PyPI "
+"and conda publishing of your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:23
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:6
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:25
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires a source distribution on PyPI in order to build"
+" your package on conda-forge. You do not need to rebuild your package to "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:29
+msgid "What is PyPI"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:31
+msgid ""
+"[PyPI](https://pypi.org/) is an online Python package repository that you"
+" can use to both find and install and publish your Python package. There "
+"is also a test PyPI repository where you can test publishing your package"
+" prior to the final publication on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:36
+msgid ""
+"Many if not most Python packages can be found on PyPI and are thus "
+"installable using `pip`."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:38
+msgid ""
+"The biggest different between using pip and conda to install a package is"
+" that conda can install any package regardless of the language(s) that it"
+" is written in. Whereas `pip` can only install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:43
+msgid "Click here for a tutorial on publishing your package to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:51
+msgid ""
+"On the package build page, we discussed the [two package distribution "
+"types that you will create when making a Python package](python-package-"
+"distribution-files-sdist-wheel): SDist (packaged as a .tar.gz or .zip) "
+"and Wheel (.whl) which is really a zip file. Both of those file "
+"\"bundles\" will be published on PyPI when you use [a standard build tool"
+"](python-package-build-tools) to build your package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:59
+msgid "What is conda and Anaconda.org?"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:61
+msgid ""
+"conda is an open source package and environment management tool. conda "
+"can be used to install tools from the [Anaconda "
+"repository](https://repo.anaconda.com/)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:65
+msgid ""
+"Anaconda.org contains public and private repositories for packages. These"
+" repositories are known as channels (discussed below)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:68
+msgid "A brief history of conda's evolution"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:71
+msgid ""
+"The conda ecosystem evolved years ago to provide support for, and "
+"simplify the process of, managing software dependencies in scientific "
+"Python projects."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:75
+msgid ""
+"Many of the core scientific Python projects depend upon or wrap around "
+"tools and extensions that are written in other languages, such as C++. In"
+" the early stages of the scientific ecosystem's development, these non-"
+"Python extensions and tools were not well supported on PyPI, making "
+"publication difficult. In recent years there is more support for complex "
+"builds that allow developers to bundle non-Python code into a Python "
+"distribution using the [wheel distribution format](python-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:77
+msgid ""
+"Conda provides a mechanism to manage these dependencies and ensure that "
+"the required packages are installed correctly."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:81
+msgid ""
+"While conda was originally created to support Python packages, it is now "
+"used across all languages. This cross-language support makes it easier "
+"for some packages to include and have access to tools written in other "
+"languages, such as C/C++ (gdal), Julia, or R. Creating an environment "
+"that mixes all of these packages is usually easier and more consistent "
+"with full-fledged package managers like conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:89
+msgid "conda channels"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:91
+msgid ""
+"conda built packages are housed within repositories that are called "
+"channels. The conda package manager can install packages from different "
+"channels."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:94
+msgid ""
+"There are several core public channels that most people use to install "
+"packages using conda, including:"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:97
+msgid ""
+"**defaults:** this is a channel managed by Anaconda. It is the version of"
+" the Python packages that you will install if you install the Anaconda "
+"Distribution. Anaconda (the company) decides what packages live on the "
+"`defaults` channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:98
+msgid ""
+"[**conda-forge:**](https://conda-forge.org/) this is a community-driven "
+"channel that focuses on scientific packages. This channel is ideal for "
+"tools that support geospatial data. Anyone can publish a package to this "
+"channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:99
+msgid ""
+"[**bioconda**](https://bioconda.github.io/): this channel focuses on "
+"biomedical tools."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:101
+msgid ""
+"**conda-forge** emerged as many of the scientific packages did not exist "
+"in the `defaults` Anaconda channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:106
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"Anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI. And test PyPI. A "
+"testbed server for you to practice."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:108
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:111
+msgid "conda channels, PyPI, conda, pip - Where to publish your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:113
+msgid ""
+"You might be wondering why there are different package repositories that "
+"can be used to install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:116
+msgid ""
+"And more importantly you are likely wondering how to pick the right "
+"repository to publish your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:119
+msgid "The answer to both questions relates dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:123
+msgid ""
+"Image showing an XKCD comic that shows a web of Python environments and "
+"tools and installations. At the bottom is says - My python environment "
+"has become so degraded that my laptop has been declared a superfund site."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:125
+msgid ""
+"Installing Python and Python packages from different repositories can "
+"lead to environment conflicts where a version of on package doesn't work "
+"with a version of another package. To keep your environments clean and "
+"working, it's best to install packages from the same repository. So use "
+"pip to install everything. Or use conda. If you can, try to avoid "
+"installing package from both pip and conda into the same environment."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:133
+msgid "Managing Python package dependency conflicts"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:135
+msgid ""
+"Python environments can encounter conflicts because Python tools can be "
+"installed from different repositories. Broadly speaking, Python "
+"environments have a smaller chance of dependency conflicts when the tools"
+" are installed from the same package repository. Thus environments that "
+"contain packages installed from both pip and conda are more likely to "
+"yield dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:142
+msgid ""
+"Similarly installing packages from the default anaconda channel mixed "
+"with the conda-forge channel can also lead to dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:144
+msgid ""
+"Many install packages directly from conda `defaults` channel. However, "
+"because this channel is managed by Anaconda, the packages available on it"
+" are limited to those that Anaconda decides should be core to a stable "
+"installation. The conda-forge channel was created to complement the "
+"`defaults` channel. It allows anyone to submit a package to be published "
+"in the channel . Thus, `conda-forge` channel ensures that a broad suite "
+"of user-developed community packages can be installed from conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:148
+msgid ""
+"Take-aways: If you can, publish on both PyPI and conda-forge to "
+"accommodate more users of your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:150
+msgid ""
+"The take-away here for maintainers is that if you anticipate users "
+"wanting to use conda to manage their local environments (which many do), "
+"you should consider publishing to both PyPI and the conda-forge channel "
+"(_more on that below_)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:155
+msgid "Additional resources"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:157
+msgid ""
+"[learn more about why conda-forge was created, here](https://conda-"
+"forge.org/docs/user/introduction.html)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:159
+msgid ""
+"[To learn more about conda terminology, check out their "
+"glossary.](https://docs.conda.io/projects/conda/en/latest/glossary.html )"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:165
+msgid "How to submit to conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:167
+msgid ""
+"While pyOpenSci doesn't require you to add your package to conda-forge, "
+"we encourage you to consider doing so!"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:170
+msgid ""
+"Once your package is on PyPI, the process to add your package to conda-"
+"forge is straight forward to do. [You can follow the detailed steps "
+"provided by the conda-forge maintainer team.](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:174
+msgid "Click here for a tutorial on adding your package to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:181
+msgid "If you want a step by step tutorial, click here."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:183
+msgid ""
+"Once your package is added, you will have a feedstock repository on "
+"GitHub with your packages name"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:186
+msgid ""
+"[Here is an example conda-forge feedstock for the pyOpenSci approved "
+"package - movingpandas](https://github.com/conda-forge/movingpandas-"
+"feedstock)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:189
+msgid "Maintaining your conda-forge package repository"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:191
+msgid ""
+"Once your package is on the conda-forge channel, maintaining it is "
+"simple. Every time that you push a new version of your package to PyPI, "
+"it will kick off a continuous integration build that updates your package"
+" in the conda-forge repository. Once that build is complete, you will get"
+" a notification to review the update."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:197
+msgid ""
+"You can merge the pull request for that update once you are happy with "
+"it. A ready-to-merge PR usually means ensuring that your project's "
+"dependencies (known as runtime requirements) listed in the updated YAML "
+"file found in the pull request match the PyPI metadata of the new "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:2
+msgid "Use a pyproject.toml file for your package configuration & metadata"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:4
+msgid "pyproject.toml takeaways"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:6
+msgid ""
+"There are only two tables that are required for an installable Python "
+"package: **[build-system]** and **[project]**. The **[project]** table "
+"stores your package's metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:7
+msgid ""
+"There are two _required_ fields in the **[project]** table: **name=** and"
+" **version=**."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:8
+msgid ""
+"Add metadata to the classifiers section of your `pyproject.toml` file to "
+"make it easier for users to find your project on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:9
+msgid ""
+"When you are adding classifiers to the [project] table, only use valid "
+"values from [PyPI’s classifier page](https://PyPI.org/classifiers/). An "
+"invalid value here will raise an error when you build your package or "
+"publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:10
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However fields need to be placed within the correct table sections. For "
+"example `requires =` always need to be associated with the **[build-"
+"system]** table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:16
+msgid "when these are published, remove this todo"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:25
+msgid ""
+"Need help creating your pyproject.toml file? This tutorial will walk you"
+" through the process."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:39
+msgid ""
+"Click here if need help migrating from setup.py/setup.cfg to "
+"pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:50
+msgid "About the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:52
+msgid ""
+"Every modern Python package should include a `pyproject.toml` file. For "
+"pure Python packages, this file replaces the `setup.py` and/or "
+"`setup.cfg` file to describe project metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:54
+msgid ""
+"If your project isn’t pure Python, you might still require a `setup.py` "
+"file to build the non-Python extensions. However, a `pyproject.toml` file"
+" should still be used to store your project’s metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:56
+msgid "Tutorial"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:59
+msgid ""
+"If you are migrating from a **setup.py** or **setup.cfg** file, and want "
+"help, [check out this tutorial.](migrate-pyproj) [specify build "
+"requirements and metadata is called a "
+"**pyproject.toml**](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:64
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:66
+msgid ""
+"The **pyproject.toml** file is written in [TOML (Tom's Obvious, Minimal "
+"Language) format](https://toml.io/en/). TOML is an easy-to-read structure"
+" based on key/value pairs. Each section in the **pyproject.toml** file "
+"contains a `[table identifier]`. Below that table identifier are "
+"key/value pairs that support configuration for that particular table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:70
+msgid "Below `[build-system]` is considered a table in the toml language."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:71
+msgid "Within the `build-system` table, `requires =` is a key."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:72
+msgid ""
+"The associated value for `requires` is an array containing the value "
+"`\"hatchling\"`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:80
+msgid "How the pyproject.toml is used when you build a package"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:84
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let’s have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:86
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:82
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:91
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:87
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:96
+msgid "Benefits of using a pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:98
+msgid ""
+"Including your package's metadata in a separate human-readable "
+"**pyproject.toml** format also allows someone to view the project's "
+"metadata in a GitHub repository."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:101
+msgid "Setup.py is still useful for complex package builds"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:105
+msgid ""
+"Using **setup.py** to manage package builds and metadata [can cause "
+"problems with package "
+"development](https://blog.ganssle.io/articles/2021/10/setup-py-"
+"deprecated.html). In some cases where a Python package build is complex, "
+"a **setup.py** file may be required. While this guide will not cover "
+"complex builds, we will provide resources working with complex builds in "
+"the future."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:111
+msgid "Optional vs. required pyproject.toml file fields"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:113
+msgid ""
+"When you create your `pyproject.toml` file, there are numerous metadata "
+"fields that you can use. Below we suggest specific fields to get you "
+"started that support publication on PyPI and users finding your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:115
+msgid ""
+"[An overview of all of the project metadata elements can be found "
+"here.](https://packaging.python.org/en/latest/specifications/core-"
+"metadata/#project-url-multiple-use)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:117
+msgid "Required fields for the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:119
+msgid ""
+"As mentioned above, your `pyproject.toml` file needs to have a **`name`**"
+" and **`version`** field in order to properly build your package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:121
+msgid "`name`: This is the name of your project provided as a string"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:122
+msgid ""
+"`version`: This is the version of your project. If you are using a SCM "
+"tool for versioning (using git tags to determine versions), then the "
+"version may be dynamic (more on that below)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:124
+msgid "Optional fields to include in the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:126
+msgid ""
+"We strongly suggest that you also add the metadata keys below as they "
+"will help users finding your package on PyPI. These fields will make it "
+"clear how your package is structured, what platforms you support and what"
+" dependencies your package requires."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:131
+msgid "**Description:** this is a short one-line description of your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:132
+msgid ""
+"**Readme:** A link to your README.md file is used for the long long-"
+"description. This information will be published on your packages PyPI "
+"landing page."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:133
+msgid ""
+"**Requires-python** (used by pip): this is a field that is used by pip. "
+"Here you tell the installer whether you are using Python 2.x or 3.x. Most"
+" projects will be using 3.x."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:134
+msgid "**License:** the license you are using"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:135
+msgid ""
+"**Authors:** these are the original authors of the package. Sometimes the"
+" authors are different from the maintainers. Other times they might be "
+"the same."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:136
+msgid ""
+"**Maintainers:** you can choose to populate this or not. You can populate"
+" this using a list with a sub element for each author or maintainer name,"
+" email"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:144
+msgid ""
+"**project.dependencies:** The dependency group is optional because not "
+"all packages require dependencies. However, if your project has specific "
+"dependencies, include this section in your `pyproject.toml`. Dependencies"
+" declared in the pyproject.toml file will be installed by uv or pip when "
+"your project is installed."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:146
+msgid ""
+"**project.optional-dependencies:** Optional or feature dependencies will "
+"be installed if someone runs `python -m pip install "
+"projectname[feature]`. Use this array to declare dependencies that add "
+"specific features to your package that are not installed by default when "
+"a user runs `uv sync` or `python -m pip install packagename`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:147
+msgid ""
+"**dependency-groups:** Dependency groups organize packages and tools that"
+" a contributor or developer would need to work on your package. These "
+"dependencies may include tools for building and running tests, linters, "
+"and code formatters. This is an optional but highly suggested way to "
+"organize and install dependencies. This section can replace a "
+"requirements.txt file. [Learn more about adding these to your package in "
+"the PyPA guide "
+"here.](https://packaging.python.org/en/latest/specifications/dependency-"
+"groups/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:148
+msgid ""
+"**keywords:** These are the keywords that will appear on your PyPI "
+"landing page. Think of them as words that people might use to search for "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:149
+msgid ""
+"**classifiers:** The classifiers section of your metadata is also "
+"important for the landing page of your package in PyPI and for filtering "
+"of packages in PyPI. A list of [all options for classifiers can be found "
+"here](https://PyPI.org/classifiers/). Some of the classifiers that you "
+"should consider including"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:150
+msgid "Development Status"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:151
+msgid "Intended Audience"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:152
+msgid "Topic"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:153
+msgid "Programming language"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:155
+msgid "Advanced options in the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:157
+msgid ""
+"**`[project.scripts]` (Entry points):** Entry points are optional. If you"
+" have a command line tool that runs a specific script hosted in your "
+"package, you may include an entry point to call that script directly at "
+"the command line (rather than at the Python shell)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:159
+msgid ""
+"Here is an example of[a package that has entry point "
+"script](https://github.com/pyOpenSci/pyosMeta/blob/main/pyproject.toml#L60)s."
+" Notice that there are several core scripts defined in that package that "
+"perform sets of tasks. The pyOpenSci is using those scripts to process "
+"their metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:160
+msgid ""
+"Use **Dynamic Fields** If you have fields that are dynamically populated."
+" For example, you may wish to automatically update your package's version"
+" using Git tags (SCM/version control-based versioning). Example: "
+"**dynamic = [\"version\"]**"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:162
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Add dependencies to your pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:164
+msgid ""
+"The `pyproject.toml` file is a modern replacement for the "
+"`requirements.txt` file, which has been traditionally used to store "
+"development dependencies and also configuration for tools such as pytest,"
+" black, and others."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:166
+msgid ""
+"To add development dependencies to your build, add a `[dependency-"
+"groups]` array to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:168
+msgid "Then specify dependency groups as follows:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:176
+msgid "Following the above example, you install dependencies like this:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:178
+msgid "`python -m pip install -e .[tests]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:180
+msgid "pip install --group test _# requires pip 25.1 or greater_"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:182
+msgid ""
+"The above will install both your package in editable mode and all of the "
+"dependencies declared in the tests section of your `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:184
+msgid "To install all dependencies and also your package, you'd use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:186
+msgid "`python -m pip install -e .[tests,lint,docs]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:188
+msgid "Recursive dependencies"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:192
+msgid ""
+"You can also setup sets of recursive dependencies. [See this blog post "
+"for more.](https://hynek.me/articles/python-recursive-optional-"
+"dependencies/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:195
+msgid "Example pyproject.toml for building using hatchling"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:197
+msgid ""
+"Below is an example build configuration for a Python project. This "
+"example package setup uses **hatchling** to build the [package's sdist "
+"and wheels](python-package-distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:205
+msgid "Notice that dependencies are specified in this file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:207
+msgid "Example pyproject.toml for building using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:209
+msgid ""
+"The package metadata including authors, keywords, etc is also easy to "
+"read. Below you can see the same TOML file that uses a different build "
+"system (setuptools). Notice how simple it is to swap out the tools needed"
+" to build this package!"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:213
+msgid "In this example package setup you use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:215
+msgid ""
+"**setuptools** to build the [package's sdist and wheels](python-package-"
+"distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:216
+msgid ""
+"**setuptools_scm** to manage package version updates using version "
+"control tags"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:218
+msgid ""
+"In the example below `[build-system]` is the first table of values. It "
+"has two keys that specify the build backend API and containing package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:221
+msgid "`requires =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:222
+msgid "`build-back-end =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:229
+msgid ""
+"[Click here to read about our packaging build tools including PDM, "
+"setuptools, Poetry and Hatch.](/package-structure-code/python-package-"
+"build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:1
+msgid "Python Packaging Tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:4
+msgid "Tools for building your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:6
+msgid ""
+"There are a several different build tools that you can use to [create "
+"your Python package's _sdist_ and _wheel_ distributions](python-package-"
+"distribution-files-sdist-wheel). Below, we discuss the features, benefits"
+" and limitations of the most commonly used Python packaging tools. We "
+"focus on pure-python packages in this guide. However, we also highlight "
+"tools that currently support packages with C/C++ and other language "
+"extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:14
+msgid ""
+"Decision tree diagram showing the various front and back end packaging "
+"tools. You can decide what packaging tool to use by thinking about what "
+"features you need. PDM and Hatch are currently the most flexible tools "
+"as they also using different build back-ends. As such currently PDM and "
+"Hatch are the tools we think beginners might appreciate most with Poetry "
+"being a close second. Poetry is nice for pure Python projects."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:16
+msgid ""
+"Diagram showing the different front end build tools available to use in "
+"the Python package ecosystem that you can select from. We selected tools "
+"to include in this diagram based upon the PyPI survey which helped us "
+"understand the most populate tools in the ecosystem. Each tool has "
+"different features as highlighted below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:19
+msgid ""
+"If you want to know more about Python packages that have extensions "
+"written in other languages, [check out the page on complex package builds"
+".](complex-python-package-builds)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:22
+msgid "Tools that we review here"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:24
+msgid ""
+"In this section we have selected tools that were returned as the most "
+"popular packaging tools in the PyPA survey. You will learn more about the"
+" following tools on this page:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:28
+msgid ""
+"[Twine](https://twine.readthedocs.io/en/stable/), [Build](https://pypa-"
+"build.readthedocs.io/en/stable/) + "
+"[setuptools](https://setuptools.pypa.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:29
+msgid "[Flit](https://flit.pypa.io/en/stable/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:30
+msgid "[Hatch](https://hatch.pypa.io/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:31
+msgid "[PDM](https://pdm-project.org/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:32
+msgid "[Poetry](https://python-poetry.org/docs/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:35
+msgid "Summary of tools Hatch vs. PDM vs. Poetry (and setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:37
+msgid "If you are looking for a quick summary, read below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:39
+msgid ""
+"In general, any modern tool that you select from this page will be great "
+"to build your package. Selecting a tool comes down to the features that "
+"you are looking for in your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:40
+msgid ""
+"We suggest that beginners start with a modern workflow tool like PDM as "
+"opposed to navigating the complexities of setuptools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:41
+msgid ""
+"If you are going to use Poetry (it is the most popular tool and does have"
+" the best documentation) beware of the upper bounds dependency additions "
+"and consider overriding dependencies when you add them. If you do that "
+"Poetry will work well for pure-python builds! Poetry also has an active "
+"discord where you can ask questions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:43
+msgid "Below are some features that Hatch and PDM offer that Poetry does not."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:45
+msgid "PDM:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:47
+msgid ""
+"Supports other back-ends making it ideal for builds that are not pure "
+"Python. This means PDM is a great option for both pure python and more "
+"complex Python builds as it supports meson-python and other build "
+"backends."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:48
+msgid "Offers flexibility in dependency management which we like"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:49
+msgid "Offers lock files if you need them"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:51
+msgid "Hatch:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:53
+msgid ""
+"Offers matrix environment management that allows you to run tests across "
+"Python versions. If this feature is important to you, then Hatch is a "
+"clear winner."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:54
+msgid ""
+"Offers a Nox / Make file like tool to streamline your build workflow. If "
+"you are looking to reduce the number of tools in your workflow, Hatch "
+"might be for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:57
+msgid "Build front-end vs. build back-end tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:59
+msgid ""
+"To better understand your options, when it comes to building a Python "
+"package, it's important to first understand the difference between a "
+"build tool front-end and build back-end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:64
+msgid "Build back-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:66
+msgid ""
+"Most packaging tools have a back-end build tool that builds you package "
+"and creates associated [(sdist and wheel) distribution files](python-"
+"package-distribution-files-sdist-wheel). Some tools, such as **Flit**, "
+"only support pure-Python package builds. A pure-Python build refers to a "
+"package build that does not have extensions that are written in another "
+"programming language (such as `C` or `C++`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:73
+msgid ""
+"Other packages that have C and C++ extensions (or that wrap other "
+"languages such as fortran) require additional code compilation steps when"
+" built. Back-ends such as **setuptools.build**, **meson.build** and "
+"**scikit-build** support complex builds with custom steps. If your build "
+"is particularly complex (i.e. you have more than a few `C`/`C++` "
+"extensions), then we suggest you use **meson.build** or **scikit-build**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:79
+msgid "Python package build front-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:81
+msgid ""
+"A packaging front-end tool refers to a tool that makes it easier for you "
+"to perform common packaging tasks using similar commands. These tasks "
+"include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:84
+msgid ""
+"[Build your packages (create the sdist and wheel distributions)](python-"
+"package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:85
+msgid ""
+"Installing your package in a development mode (so it updates when you "
+"update your code)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:86
+msgid "Publishing to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:87
+msgid "Running tests"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:88
+msgid "Building documentation"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:89
+msgid ""
+"Managing an environment or multiple environments in which you need to run"
+" tests and develop your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:91
+msgid ""
+"There are several Python packaging tools that you can use for pure Python"
+" builds. Each front-end tool discussed below supports a slightly "
+"different set of Python packaging tasks."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:95
+msgid ""
+"For instance, you can use the packaging tools **Flit**, **Hatch** or "
+"**PDM** to both build and publish your package to PyPI. However while "
+"**Hatch** and **PDM** support versioning and environment management, "
+"**Flit** does not. If you want a tool that supports dependency locking, "
+"you can use **PDM** or **Poetry** but not **Hatch**. If you only need to "
+"build your package's sdist and wheel distribution files, then you can "
+"stick with PyPA's Build. You'd then use Twine to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:102
+msgid ""
+"If you are using **Setuptools**, there is no default user-friendly build "
+"front-end that performs multiple tasks. You will need to use **build** to"
+" build your package and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:105
+msgid "Example build steps that can be simplified using a front-end tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:107
+msgid ""
+"Below, you can see how a build tool streamlines your packaging "
+"experience. Example to build your package with **Hatch**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:117
+msgid "Example build steps using the **setuptools** back-end and **build**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:127
+msgid "Choosing a build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:129
+msgid ""
+"Most front-end packaging tools have their own back-end build tool. The "
+"build tool creates your package's (sdist and wheel) distribution files. "
+"For pure Python packages, the main difference between the different build"
+" back-ends discussed below is:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:134
+msgid ""
+"How configurable they are - for example, do they allow you to add build "
+"steps that support non python extensions?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:135
+msgid ""
+"How much you need to configure them to ensure the correct files are "
+"included in your sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:137
+msgid "Build back-end support for non pure-python packages"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:139
+msgid ""
+"It is important to note that some build back-ends, such as **Flit-core**,"
+" only support pure Python builds. Other back-ends support C and C++ "
+"extensions as follows:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:142
+msgid "setuptools supports builds using C / C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:143
+msgid ""
+"Hatchling (hatch's back-end) supports C / C++ extensions via plugins that"
+" the developer creates to customize a build"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:144
+msgid "PDM's back-end supports C / C++ extensions by using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:145
+msgid ""
+"Poetry's back-end supports C/C++ extensions however this functionality is"
+" currently undocumented. As such we don't recommend using Poetry for "
+"complex or non pure Python builds until it is documented."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:147
+msgid ""
+"While we won't discuss more complex builds below, we will identify which "
+"tools have documented support for C / C++ extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:150
+msgid "An ecosystem of Python build tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:152
+msgid ""
+"Below we introduce several of the most commonly used Python packaging "
+"build front-end tools. We highlight the features that each tool offers as"
+" a way to help you decide what tool might be best for your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:156
+msgid "We do not suggest using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:159
+msgid ""
+"We suggest that you pick one of the modern tools listed above rather than"
+" setuptools because setuptools will require some additional knowledge to "
+"set up correctly."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:163
+msgid ""
+"We review setuptools as a back-end because it is still popular. However "
+"it is not the most user friendly option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:167
+msgid ""
+"The most commonly used tools in the ecosystem are setuptools back-end "
+"(with build) and Poetry (a front end tool with numerous features and "
+"excellent documentation)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:173
+msgid ""
+"Graph showing the results of the 2022 PyPA survey of Python packaging "
+"tools. On the x axis is percent response and on the y axis are the tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:175
+msgid ""
+"The Python developers survey results (n=>8,000 PyPI users) show "
+"setuptools and poetry as the most commonly used Python packaging tools. "
+"The core tools that we've seen being used in the scientific community are"
+" included here. [You can view the full survey results by clicking "
+"here.](https://drive.google.com/file/d/1U5d5SiXLVkzDpS0i1dJIA4Hu5Qg704T9/view)"
+" NOTE: this data represent maintainers across domains and is likely "
+"heavily represented by those in web development. So this represents a "
+"snapshot across the broader Python ecosystem."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:178
+msgid "Chose a build workflow tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:180
+msgid "The tools that we review below include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:182
+msgid "Twine, Build + setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:183
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:294
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:184
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:336
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:185
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:233
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:186
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:380
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:188
+msgid ""
+"When you are selecting a tool, you might consider this general workflow "
+"of questions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:191
+msgid ""
+"**Is your tool pure python? Yes?** You can use any tool that you wish! "
+"Pick the tool that has the features that you want to use in your build "
+"workflow. We suggest:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:193
+msgid "Flit, Hatch, PDM or Poetry (read below for more)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:195
+msgid ""
+"**Does your tool have a few C or C++ extensions?** Great, we suggest "
+"using **PDM** for the time being. It is the only tool in the list below "
+"that has both documented workflow to support such extensions and support "
+"for other back-ends in the case that build hooks are not enough for your "
+"workflow. PDM supports other back-ends such as scikit-build and meson-"
+"python that will allow you to fully customize your package's build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:199
+msgid ""
+"NOTE: You can also use Hatch for non pure python builds. Hatch, similar "
+"to PDM, allows you to write your own build hooks or plugins to support "
+"custom build steps. But currently, hatch does not support other build "
+"back ends. Many of the core scientific packages are moving to meson-"
+"python to build their packages. Thus, we appreciate that PDM can work "
+"with meson-python specifically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:201
+msgid "Python packaging tools summary"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:203
+msgid ""
+"Below, we summarize features offered by the most popular build front end "
+"tools. It is important to keep in mind that these front-end tools remove "
+"the need to use other core tools in your workflow. For example if you use"
+" setuptools, you will need to also use Build and Twine to build your "
+"package and publish to PyPI. But if you use Poetry, Hatch or PDM you can "
+"do all of those things using the same tool (e.g. `hatch build`, `hatch "
+"publish` or `pdm build`, `pdm publish`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:206
+msgid ""
+"Note that because setuptools does not offer a front-end interface, it is "
+"not included in the table."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:210
+msgid "Package tool features table"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Feature"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Default Build Back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Flit-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Poetry-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Use Other Build Backends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✖"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "✅"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Dependency management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Version Control based versioning (using `git tags`)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Environment Management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "More than one maintainer? (bus factor)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:227
+msgid "Notes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:229
+msgid "_Hatch plans to support dependency management in the future_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:230
+msgid ""
+"Poetry supports semantic versioning. Thus, it will support version "
+"bumping following commit messages if you use a tool such as Python "
+"Semantic Release"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:235
+msgid ""
+"[PDM is a Python packaging and dependency management tool](https://pdm-"
+"project.org/latest/). PDM supports builds for pure Python projects. It "
+"also provides multiple layers of support for projects that have C and C++"
+" extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:239
+msgid "PDM support for C and C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:241
+msgid ""
+"PDM supports using the PDM-back-end and setuptools at the same time. This"
+" means that you can run setuptools to compile and build C extensions. "
+"PDM's build back-end receives the compiled extension files (.so, .pyd) "
+"and packages them with the pure Python files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:247
+msgid "PDM features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Notes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you setup PDM it allows you to select one of several build back ends"
+" including: PDM-core, flit-core and hatchling. PDM also can work with "
+"Meson-Python which supports move complex python builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Dependency specifications"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has flexible support for managing dependencies. PDM defaults to "
+"using an open bound (e.g. `requests >=1.2`) approach to dependencies. "
+"However you can [customize how you want to add dependencies in case you "
+"prefer another approach such as that of Poetry which uses an upper bound "
+"limit](https://pdm-project.org/en/latest/usage/dependency/#about-update-"
+"strategy).**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Environment lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM and Poetry are currently the only tools that create environment lock "
+"files. Lock files are often most useful to developers creating web apps "
+"where locking the environment is critical for consistent user experience."
+" For community-used packages, you will likely never want to use a lock "
+"file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Environment management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM provides environment management support. It supports Python virtual "
+"environments, conda and a local `__pypackages__` environment which is a "
+"newer option in the Python ecosystem. No extensions are needed for this "
+"support."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Select your environment type on install"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you run `PDM init`, PDM will discover environments that are already "
+"on your system and allow you to select one to use for your project."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version Control based versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has a setuptools_scm like tool built into it which allows you to use "
+"dynamic versioning that rely on git tags."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Follows current packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Install your package in editable mode"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Build your sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"Similar to all of the other tools PDM builds your packages sdist and "
+"wheel files for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:267
+msgid "PDM vs. Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:268
+msgid ""
+"The functionality of PDM is similar to Poetry. However, PDM also offers "
+"additional, documented support for C extensions and version control based"
+" versioning. As such, PDM is preferred for those working on non pure-"
+"Python packages."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:272
+msgid ""
+"If you are deciding between the Poetry and PDM, a smaller difference is "
+"the default way that dependencies are added to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:274
+msgid ""
+"Poetry by default follows strict semantic versioning adding dependencies "
+"to your pyproject.toml file [using an upper bounds constraint "
+"(`^`)](https://python-poetry.org/docs/dependency-specification/#version-"
+"constraints). Upper bounds lock means that Poetry will never bump a "
+"dependency to the next major version (i.e. from 1.2 to 2.0). However, you"
+" can tell Poetry to use an open bound approach by explicitly adding the "
+"package like this: `poetry add requests >= 1.2` rather than just using "
+"`poetry add requests` which will result in a upper bound locked (ie Upper"
+" bound locks means that requests 2.0 could never be installed even if it "
+"came out and your package could benefit from it)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:275
+msgid ""
+"PDM defaults to open-bounds (`>=`) dependency additions which is the "
+"preferred approach in the scientific python ecosystem. However, PDM also "
+"allows you to specify the way dependencies are added by default. As such,"
+" you can also specify upper-bounds (`^`) using PDM if require that "
+"approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:277
+msgid ""
+"Finally there are some nuanced differences in how both tools create lock "
+"files which we will not go into detail about here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:280
+msgid "Challenges with PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:282
+msgid ""
+"PDM is a full-featured packaging tool. However it is not without "
+"challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:284
+msgid ""
+"Its documentation can be confusing, especially if you are new to "
+"packaging. For example, PDM doesn't provide an end to end beginning "
+"workflow in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:286
+msgid ""
+"PDM also only has one maintainer currently. We consider individual "
+"maintainer teams to be a potential risk. If the maintainer finds they no "
+"longer have time to work on the project, it leaves users with a gap in "
+"support. Hatch and Flit also have single maintainer teams."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:291
+msgid ""
+"[You can view an example of a package that uses PDM "
+"here](https://github.com/pyOpenSci/examplePy/tree/main/example4_pdm). The"
+" README file for this directly provides you with an overview of what the "
+"PDM command line interface looks like when you use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:296
+msgid ""
+"[Flit is a no-frills, streamlined packaging "
+"tool](https://flit.pypa.io/en/stable/) that supports modern Python "
+"packaging standards. Flit is a great choice if you are building a basic "
+"package to use in a local workflow that doesn't require any advanced "
+"features. And if your package structure is already created. More on that "
+"below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:300
+msgid "Flit features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Publish to PyPI and test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Helps you add metadata to your **pyproject.toml** file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit does support adding metadata to your **pyproject.toml** file "
+"following modern packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports installing your package in editable mode.**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit can be used to build your packages sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:314
+msgid ""
+"NOTE: _If you are using the most current version of pip, it supports both"
+" a symlink approach `flit install -s` and `python -m pip install -e .`_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:316
+msgid "Learn more about flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:318
+msgid "[Why use flit?](https://flit.pypa.io/en/stable/rationale.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:321
+msgid "Why you might not want to use Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:323
+msgid ""
+"Because Flit is no frills, it is best for basic, quick builds. If you are"
+" a beginner you may want to select Hatch or PDM which will offer you more"
+" support in common operations."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:327
+msgid "You may NOT want to use flit if:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:329
+msgid ""
+"You want to setup more advanced version tracking and management (using "
+"version control for version bumping)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:330
+msgid ""
+"You want a tool that handles dependency versions (use PDM or Poetry "
+"instead)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:331
+msgid "You have a project that is not pure Python (Use Hatch, PDM or setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:332
+msgid "You want environment management (use PDM, Hatch or Poetry)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:338
+msgid ""
+"[**Hatch**](https://hatch.pypa.io/latest/), similar to Poetry and PDM, "
+"provides a unified command line interface. To separate Hatch from Poetry "
+"and PDM, it also provides an environment manager for testing that will "
+"make it easier for you to run tests locally across different versions of "
+"Python. It also offers a nox / makefile like feature that allows you to "
+"create custom build workflows such as building your documentation "
+"locally. This means that you could potentially drop a tool like **Make** "
+"or **Nox** from your workflow and use Hatch instead."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:345
+msgid "Hatch features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch is used with the backend Hatchling by default, but allows you to "
+"use another backend by switching the declaration in pyproject.toml."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Currently you have to add dependencies manually with Hatch. However a "
+"feature to support dependencies management may be added in a future "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports Python virtual environments. If you wish to use other "
+"types of environments such as Conda, you will need to [install a plugin "
+"such as hatch-conda for conda support](https://github.com/OldGrumpyViking"
+"/hatch-conda)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch offers `hatch_vcs` which is a plugin that uses setuptools_scm to "
+"support versioning using git tags. The workflow with `hatch_vcs` is the "
+"same as that with `setuptools_scm`."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch will install your package into any of its environments by default "
+"in editable mode. You can install your package in editable mode manually "
+"using `python -m pip install -e .` Hatch mentions [editable "
+"installs](https://hatch.pypa.io/latest/config/build/#dev-mode) but refers"
+" to pip in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch will build the sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨Matrix environment creation to support testing across Python versions✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"The matrix environment creation is a feature that is unique to Hatch in "
+"the packaging ecosystem. This feature is useful if you wish to test your "
+"package locally across Python versions (instead of using a tool such as "
+"tox)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"✨[Nox / MAKEFILE like "
+"functionality](https://hatch.pypa.io/latest/environment/#selection)✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"This feature is also unique to Hatch. This functionality allows you to "
+"create workflows in the **pyproject.toml** configuration to do things "
+"like serve docs locally and clean your package build directory. This "
+"means you may have one less tool in your build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨A flexible build backend: **hatchling**✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"**The hatchling build backend offered by the maintainer of Hatch allows "
+"developers to easily build plugins to support custom build steps when "
+"packaging."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:367
+msgid ""
+"_There is some argument about this approach placing a burden on "
+"maintainers to create a custom build system. But others appreciate the "
+"flexibility. The Hatch build hook approach is also comparable with the "
+"features offered by PDM._"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:369
+msgid "Why you might not want to use Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:371
+msgid ""
+"There are a few features that hatch is missing that may be important for "
+"some. These include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:374
+msgid ""
+"Hatch doesn't support adding dependencies. You will have to add them "
+"manually."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:375
+msgid "Hatch won't by default recognize Conda environments without a plugin."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:376
+msgid ""
+"Similar to PDM, Hatch's documentation can difficult to work through, "
+"particularly if you are just getting started with creating a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:377
+msgid "Hatch, similar to PDM and Flit currently only has one maintainer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:382
+msgid ""
+"[Poetry is a full-featured build tool.](https://python-poetry.org/) It is"
+" also the second most popular front-end packaging tool (based upon the "
+"PyPA survey). Poetry is user-friendly and has clean and easy-to-read "
+"documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:387
+msgid ""
+"While some have used Poetry for Python builds with C/C++ extensions, this"
+" support is currently undocumented. Thus, we don't recommend using Poetry"
+" for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:391
+msgid "Poetry features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry helps you add dependencies to your `pyproject.toml` metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Dependency specification"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to be specific about version of dependencies that you "
+"add to your package's pyproject.toml file. However, it's default upper "
+"bound approach can be problematic for some packages (We suggest you "
+"override the default setting when adding dependencies). Read below for "
+"more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to either use its built in environment or you can "
+"select the environment type that you want to use for managing your "
+"package. [Read more about its built in environment management "
+"options](https://python-poetry.org/docs/basic-usage/#using-your-virtual-"
+"environment)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry creates a **poetry.lock** file that you can use if you need a lock"
+" file for your build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"The plugin [Poetry dynamic versioning](https://github.com/mtkennerly"
+"/poetry-dynamic-versioning) supports versioning using git tags with "
+"Poetry."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Since version 2.0, Poetry supports most current project metadata "
+"standards. However, not all standards are supported, and it also supports"
+" the legacy Poetry format. Read below for more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry will build your sdist and wheel distributions using `poetry build`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:413
+msgid "Challenges with Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:415
+msgid "Some challenges of Poetry include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:417
+msgid ""
+"Poetry has its own concept of grouped dependencies (`poetry add "
+"--group=GROUP_NAME DEPENDENCY`). Dependencies added as grouped "
+"dependencies are not optional and there is no Python standard for this "
+"type of dependency. This should not be confused with \"optional\" "
+"dependencies (`poetry add --optional=GROUP_NAME DEPENDENCY`), which is "
+"standardised and lets you group your dependencies into several optional "
+"groups."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:418
+msgid ""
+"While Poetry supports \"development\" dependencies (i.e. dependencies you"
+" use for development but not running the code, such as `pytest`), Poetry "
+"does not yet follow the standardised format for specifying such "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:419
+msgid ""
+"Poetry, by default, pins dependencies using an \"upper bound\" limit "
+"(which is specified with the `^` symbol in the legacy format). However, "
+"this behavior can be over-written by specifying the dependency when you "
+"use `poetry add` as follows: `poetry add \"requests>=2.1\"` See breakout "
+"below for more discussion on issues surrounding upper-bounds pinning."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:421
+msgid ""
+"Poetry is a popular packaging tool and introduced many very useful "
+"features. However, if you decide to use it, then use caution when adding "
+"dependencies as Poetry's approach to pinning can be problematic for many "
+"builds. If you use Poetry, we strongly suggest that you override the "
+"default upper bound dependency option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:426
+msgid "Challenges with Poetry dependency pinning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:429
+msgid ""
+"By default, Poetry pins dependencies using `^` by default. This `^` "
+"symbol means that there is an \"upper bound\" to the dependency. Thus "
+"poetry won't bump a dependency version to a new major version. Thus, if "
+"your package uses a dependency that is at version 1.2.3, Poetry will "
+"never bump the dependency to 2.0 even if there is a new major version of "
+"the package. Poetry will instead bump up to 1.9.x."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:435
+msgid ""
+"Poetry does this because it adheres to strict semantic versioning which "
+"states that a major version bump (from 1.0 to 2.0 for example) means "
+"there are breaking changes in the tool. However, not all tools follow "
+"strict semantic versioning. [This approach has been found to be "
+"problematic by many of our core scientific "
+"packages.](https://iscinumpy.dev/post/bound-version-constraints/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:440
+msgid ""
+"This approach also won't support others ways of versioning tools, for "
+"instance, some tools use [calver](https://calver.org/) which creates new "
+"versions based on the date."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:445
+msgid "Using Setuptools back-end for Python packaging with Build front-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:447
+msgid ""
+"[Setuptools](https://setuptools.pypa.io/en/latest/) is the most mature "
+"Python packaging build tool with [development dating back to 2009 and "
+"earlier](https://setuptools.pypa.io/en/latest/history.html#). Setuptools "
+"also has the largest number of community users (according to the PyPA "
+"survey). Setuptools does not offer a user front-end like Flit, Poetry and"
+" Hatch offer. As such you will need to use other tools such as **build** "
+"to create your package distributions and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:455
+msgid ""
+"While setuptools is the most commonly used tool, we encourage package "
+"maintainers to consider using a more modern tool for packaging such as "
+"Poetry, Hatch or PDM."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:458
+msgid ""
+"We discuss setuptools here because it's commonly found in the ecosystem "
+"and contributors may benefit from understanding it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:461
+msgid "Setuptools features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:463
+msgid "Some of features of setuptools include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:465
+msgid "Fully customizable build workflow"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:466
+msgid "Many scientific Python packages use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:467
+msgid ""
+"It offers version control based package versioning using "
+"**setuptools_scm**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:468
+msgid "It supports modern packaging using **pyproject.toml** for metadata"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:469
+msgid "Supports backwards compatibly for older packaging approaches."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:471
+msgid "Challenges using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:475
+msgid "Setuptools has a few challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:477
+msgid ""
+"Setuptools does not support interactive features such as auto / tab "
+"completion by default if you are working in an IDE like VSCODE and using "
+"an editable install for development. [See notes here about pylance "
+"support](https://github.com/microsoft/pylance-"
+"release/blob/main/TROUBLESHOOTING.md#editable-install-modules-not-found)."
+" In comparison, tools such as flit, hatch, PDM support interactive "
+"features such as tab / auto completion when using an IDE like VSCODE or "
+"pycharm (as long as your version of pip is current!)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:478
+msgid ""
+"Because **setuptools** has to maintain backwards compatibility across a "
+"range of packages, it is not as flexible in its adoption of modern Python"
+" packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:481
+msgid ""
+"The above-mentioned backwards compatibility makes for a more complex "
+"code-base."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:482
+msgid ""
+"Your experience as a user will be less streamlined and simple using "
+"setuptools compared to other tools discussed on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:484
+msgid ""
+"There are also some problematic default settings that users should be "
+"aware of when using setuptools. For instance:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:487
+msgid ""
+"setuptools will build a project without a name or version if you are not "
+"using a **pyproject.toml** file to store metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:489
+msgid ""
+"setuptools also will include all of the files in your package repository "
+"if you do not explicitly tell it to exclude files using a **MANIFEST.in**"
+" file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:1
+msgid "Learn about Building a Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:8
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires an source distribution on PyPI in order to "
+"build your package on conda-forge. You do not need to rebuild your "
+"package to publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:11
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"a conda channel). The build process organizes your code and metadata into"
+" a distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:14
+msgid "What is building a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:16
+msgid ""
+"To [publish your Python package](publish-python-package-pypi-conda) and "
+"make it easy for anyone to install, you first need to build it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:18
+msgid "But, what does it mean to build a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:20
+msgid ""
+"[As shown in the figure above](#pypi-conda-channels), when you build your"
+" Python package, you convert the source files into something called a "
+"distribution package. A distribution package contains your source code "
+"and metadata about the package, in the format required by the Python "
+"Package Index, so that it can be installed by tools like pip."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:23
+msgid ""
+"The term package used to mean many different things in Python and other "
+"languages. On this page, we adapt the convention of the [Python Packaging"
+" Authority](https://www.pypa.io/en/latest/) and refer to the product of "
+"the build step as a **distribution package**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:27
+msgid ""
+"This process of organizing and formatting your code, documentation, tests"
+" and metadata into a format that both pip and PyPI can use, is called a "
+"build step."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:31
+msgid "Project metadata and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:33
+msgid ""
+"The metadata that both build tools and PyPI uses to describe and "
+"understand your package is generally stored in a [pyproject.toml file"
+"](pyproject-toml-python-package-metadata). This metadata is used for "
+"several purposes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:35
+msgid ""
+"It helps whatever tool you use to build your package (pip, [pypa's "
+"Build](https://pypi.org/project/build/) or an end-to-end tool such as "
+"poetry, PDM or Hatch) understand how to build your package. Information "
+"it provides to your build tool includes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:37
+msgid ""
+"The `[build-system]` table in your pyproject.toml file tells pip what "
+"[build backend tool](build_backends) you wish to use for creating your "
+"sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:45
+msgid ""
+"And the dependencies section of your project table tells the build tool "
+"and PyPI what dependencies your project requires."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:54
+msgid ""
+"When the build tool creates your package distribution file (the file that"
+" you publish on PyPI), it also creates a METADATA file which PyPI can "
+"read and use to help users find your package. For example:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:56
+msgid ""
+"The `classifiers = ` section of your `[project]` table in the "
+"pyproject.toml file provides information that users on PyPI can use to "
+"filter for packages that address different topics or that support "
+"specific versions of python."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:72
+msgid "What happened to setup.py and setup.cfg for metadata?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:75
+msgid ""
+"Project metadata used to be stored in either a setup.py file or a "
+"setup.cfg file. The current recommended practice for storing package "
+"metadata is to use a pyproject.toml file. [Learn more about the "
+"pyproject.toml file here.](pyproject-toml-python-package-metadata)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:78
+msgid "An example - xclim"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:80
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let's have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:93
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:95
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:100
+msgid ""
+"This screenshot shows the metadata on PyPI for the xclim package. On it "
+"you can see the name of the license, the author and maintainer names "
+"keywords associated with the package and the base python version it "
+"requires which is 3.8."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:102
+msgid "PyPI screenshot showing metadata for the xclim package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:109
+msgid ""
+"Here you see the maintainer metadata as it is displayed on PyPI. For "
+"xclim there are three maintainers listed with their profile pictures and "
+"github user names to the right."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:111
+msgid ""
+"Maintainer names and GitHub usernames for the xclim package as they are "
+"displayed on PyPI. This information is recorded in your pyproject.toml "
+"and then processed by your build tool and stored in your packages sdist "
+"and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:114
+msgid "How to create the distribution format that PyPI and Pip expects?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:116
+msgid ""
+"You could in theory create your own scripts to organize your code the way"
+" PyPI wants it to be. However, just like there are packages that handle "
+"known structures such as Pandas for data frames and Numpy for arrays, "
+"there are packages and tools that help you create package build "
+"distribution files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:120
+msgid ""
+"There are a suite of packaging tools that can either help you with the "
+"entire packaging process or just one step of the process. For instance "
+"setuptools is a commonly used build back end that can be used to create "
+"your sdist and wheel. Whereas tools like Hatch, PDM, Poetry and flit help"
+" with other parts of the packaging process."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:126
+msgid ""
+"While this can cause some confusion and complexity in the packaging "
+"ecosystem - for the most part, each tool provides the same distribution "
+"output (with minor differences that most users may not care about). Learn"
+" more about those tools on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:132
+msgid ""
+"Below, you will learn about the two distribution files that PyPI expects "
+"you to publish: sdist and wheel. You will learn about their structure and"
+" what files belong in each."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:135
+msgid ""
+"There are two core distribution files that you need to create to publish "
+"your Python package to PyPI source distribution (often called an sdist) "
+"and wheel. The sdist contains the raw source code for your package. The "
+"wheel (.whl) contains the built / compiled files that can be directly "
+"installed onto anyones' computer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:141
+msgid "Learn more about both distributions below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:144
+msgid ""
+"If your package is a pure python package with no additional build / "
+"compilation steps then the sdist and wheel distributions will have "
+"similar content. However if your package has extensions in other "
+"languages or is more complex in its build, the two distributions will be "
+"very different."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:149
+msgid ""
+"Also note that we are not discussing conda build workflows in this "
+"section. [You can learn more about conda builds "
+"here.](https://docs.conda.io/projects/conda-build/en/latest/user-"
+"guide/tutorials/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:154
+msgid "What is a source distribution (sdist)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:156
+msgid ""
+"**Source files** are the unbuilt files needed to build your package. "
+"These are the \"raw / as-is\" files that you store on GitHub or whatever "
+"platform you use to manage your code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:160
+msgid ""
+"Source Distributions (**S** + **Dist**) are referred to as sdist. As the "
+"name implies, a SDIST contains the source code; it has not been built or "
+"compiled in any way. Thus, when a user installs your source distribution "
+"using pip, pip needs to run a build step first. For this reason, you "
+"could define a source distribution as a compressed archive that contains "
+"everything required to build a wheel (except for project dependencies) "
+"without network access."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:164
+msgid ""
+"Sdist is normally stored as a `.tar.gz` archive (often called a "
+"\"tarball\"). Thus, when a user installs your source distribution using "
+"pip, pip needs to run a build step first."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:166
+msgid "Below is an example sdist for the stravalib Python package:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:218
+msgid "GitHub archive vs sdist"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:220
+msgid ""
+"When you make a release on GitHub, it creates a `git archive` that "
+"contains all of the files in your GitHub repository. While these files "
+"are similar to an sdist, these two archives are not the same. The sdist "
+"contains a few other items including a metadata directory and if you use "
+"`setuptools_scm` or `hatch_vcs` the sdist may also contain a file that "
+"stores the version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:228
+msgid "What is a Python wheel (whl):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:230
+msgid ""
+"A wheel file is a ZIP-format archive whose filename follows a specific "
+"format (below) and has the extension `.whl`. The `.whl` archive contains "
+"a specific set of files, including metadata that are generated from your "
+"project's pyproject.toml file. The pyproject.toml and other files that "
+"may be included in source distributions are not included in wheels "
+"because it is a built distribution."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:237
+msgid ""
+"The wheel (.whl) is your built binary distribution. **Binary files** are "
+"the built / compiled source files. These files are ready to be installed."
+" A wheel (**.whl**) is a **zip** file containing all of the files needed "
+"to directly install your package. All of the files in a wheel are "
+"binaries - this means that code is already compiled / built. Wheels are "
+"thus faster to install - particularly if you have a package that requires"
+" build steps."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:239
+msgid ""
+"The wheel does not contain any of your package's configuration files such"
+" as **setup.cfg** or **pyproject.toml**. This distribution is already "
+"built so it's ready to install."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:243
+msgid ""
+"Because it is built, the wheel file will be faster to install for pure "
+"Python projects and can lead to consistent installs across machines."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:251
+msgid ""
+"Wheels are also useful in the case that a package needs a **setup.py** "
+"file to support a more complex build. In this case, because the files in "
+"the wheel bundle are pre built, the user installing doesn't have to worry"
+" about malicious code injections when it is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:258
+msgid "The filename of a wheel contains important metadata about your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:260
+msgid "Example: **stravalib-1.1.0.post2-py3-none.whl**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:262
+msgid "name: stravalib"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:263
+msgid "version: 1.1.0"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:264
+msgid ""
+"build-number: 2 (post2) [(read more about post "
+"here)](https://peps.python.org/pep-0440/#post-release-separators)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:265
+msgid "py3: supports Python 3.x"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:266
+msgid "none: is not operating system specific (runs on windows, mac, linux)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:267
+msgid "any: runs on any computer processor / architecture"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:269
+msgid "What a wheel file looks like when unpacked (unzipped):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:303
+msgid "[Read more about the wheel format here](https://pythonwheels.com/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:1
+msgid "Python Package Structure & Layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:3
+msgid ""
+"There are two different layouts that you will commonly see within the "
+"Python packaging ecosystem: src and flat layouts. Both layouts have "
+"advantages for different groups of maintainers."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:8
+msgid ""
+"We strongly suggest, but do not require, that you use the **src/** layout"
+" (discussed below) for creating your Python package. This layout is also "
+"recommended in the [PyPA packaging guide "
+"tutorial](https://packaging.python.org/en/latest/tutorials/packaging-"
+"projects/)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:12
+msgid "pyOpenSci will never require a specific package structure for peer review"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:15
+msgid ""
+"We understand that it would take significant effort for existing "
+"maintainers to move to a new layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:18
+msgid ""
+"The overview on this page presents recommendations that we think are best"
+" for someone getting started with Python packaging or someone who's "
+"package has a simple build and might be open to moving to a more fail-"
+"proof approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:22
+msgid "Other resources you can check out:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:24
+msgid ""
+"[PyPA's overview of src vs flat "
+"layouts](https://packaging.python.org/en/latest/discussions/src-layout-"
+"vs-flat-layout/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:27
+msgid ""
+"You can use tools like Hatch to quickly create a modern Python package "
+"structure. Check out our quickstart tutorial:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:29
+msgid ""
+"Want to learn how to create the structure to build your package? Click "
+"here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:38
+msgid "What is the Python package source layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:40
+msgid "An example of the **src/package** layout structure is below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:62
+msgid "Note the location of the following directories in the example above:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:64
+msgid ""
+"**docs/:** Discussed in our docs chapter, this directory contains your "
+"user-facing documentation website. In a **src/** layout docs/ are "
+"normally included at the same directory level as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:65
+msgid ""
+"**tests/** This directory contains the tests for your project code. In a "
+"**src/** layout, tests are normally included at the same directory level "
+"as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:66
+msgid ""
+"**src/package/**: this is the directory that contains the code for your "
+"Python project. \"Package\" is normally your project's name."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:68
+msgid ""
+"Also in the above example, notice that all of the core documentation "
+"files that pyOpenSci requires live in the root of your project directory."
+" These files include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:72
+msgid "CHANGELOG.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:73
+msgid "CODE_OF_CONDUCT.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:74
+msgid "CONTRIBUTING.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:75
+msgid "LICENSE.txt"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:76
+msgid "README.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:80
+msgid "Click here to read about our packaging documentation requirements."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:87
+msgid "Example scientific packages that use **src/package** layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:89
+msgid "[Sourmash](https://github.com/sourmash-bio/sourmash)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:90
+msgid "[bokeh](https://github.com/bokeh/bokeh)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:91
+msgid "[openscm](https://github.com/openscm/openscm-runner)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:92
+msgid "[awkward](https://github.com/scikit-hep/awkward)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:93
+msgid "[poliastro](https://github.com/poliastro/poliastro/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:98
+msgid "The src layout and testing"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:100
+msgid ""
+"The benefit of using the **src/package** layout is that it ensures tests "
+"are run against the installed version of your package rather than the "
+"files in your package working directory. If you run your tests on your "
+"files rather than the installed version of your package, you may be "
+"missing issues that users encounter when your package is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:106
+msgid ""
+"If `tests/` are outside the **src/package** directory, they aren't "
+"included in the package's [wheel](python-wheel). This makes your package "
+"size slightly smaller, which places a smaller storage burden on PyPI, and"
+" makes them faster to fetch."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:108
+msgid ""
+"[Read more about reasons to use the **src/package** "
+"layout](https://hynek.me/articles/testing-packaging/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:110
+msgid "How Python discovers and prioritizes importing modules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:112
+msgid ""
+"By default, Python adds a module in your current working directory to the"
+" front of the Python module search path."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:114
+msgid ""
+"This means that if you run your tests in your package's working "
+"directory, using a flat layout, `/package/module.py`, Python will "
+"discover `package/module.py` file before it discovers the installed "
+"package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:116
+msgid ""
+"However, if your package lives in a src/ directory structure "
+"**src/package**, then it won't be added to the Python path by default. "
+"This means that when you import your package, Python will be forced to "
+"search the active environment (which has your package installed)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:118
+msgid ""
+"Note: Python versions 3.11 and above have a path setting that can be "
+"adjusted to ensure the priority is to use installed packages first (e.g.,"
+" `PYTHONSAFEPATH`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:121
+msgid "Don't include tests in your package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:123
+msgid ""
+"Writing [tests](tests-intro) for your package is important; however, we "
+"do not recommend including tests as part of your [package wheel](python-"
+"wheel) by default. However, not including tests in your package "
+"distribution will make it harder for people other than yourself to test "
+"whether your package runs properly on their system. If you have a small "
+"test suite (Python files + data), and think your users may want to run "
+"tests locally on their systems, you can include tests by moving the "
+"`tests/` directory into the **src/package** directory (see example "
+"below)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:132
+msgid ""
+"Including the **tests/** directory in your **src/package** directory "
+"ensures that tests will be included in your package's [wheel](python-"
+"wheel)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:134
+msgid ""
+"Be sure to read the [pytest documentation for more about including tests "
+"in your package "
+"distribution](https://docs.pytest.org/en/7.2.x/explanation/goodpractices.html#choosing-a"
+"-test-layout-import-rules)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:136
+msgid "Challenges with including tests and data in a package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:139
+msgid ""
+"Tests, especially when accompanied by test data, can create a few small "
+"challenges, including:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:141
+msgid ""
+"Take up space in your distribution, which will build up over time as "
+"storage space on PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:142
+msgid "Large file sizes can also slow down package installation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:144
+msgid ""
+"However, in some cases, particularly in the scientific Python ecosystem, "
+"you may need to include tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:147
+msgid "**Don't include test suite datasets in your package**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:149
+msgid ""
+"If you include your tests in your package distribution, we strongly "
+"discourage you from including data in your test suite directory. Rather, "
+"host your test data in a repository such as Figshare or Zenodo. Use a "
+"tool such as [Pooch](https://www.fatiando.org/pooch/latest/) to access "
+"the data when you (or a user) runs tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:155
+msgid ""
+"For more information about Python package tests, see the [tests section "
+"of our guide](tests-intro)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:157
+msgid ""
+"The **src/package** layout is semantically more clear. Code is always "
+"found in the **src/package** directory, `tests/` and `docs/`are in the "
+"root directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:161
+msgid ""
+"If your package tests require data, do NOT include that data within your "
+"package structure. Including data in your package structure increases the"
+" size of your distribution files. This places a maintenance toll on "
+"repositories like PyPI and Anaconda.org that have to deal with thousands "
+"of package uploads."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:167
+msgid "Click here for a quickstart tutorial on creating your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:176
+msgid "What is the flat Python package layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:178
+msgid "Many scientific packages use the **flat-layout** given:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:180
+msgid ""
+"This layout is used by many core scientific Python packages such as "
+"NumPy, SciPy, and Matplotlib."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:181
+msgid ""
+"Many Python tools depend upon tools in other languages and/or complex "
+"builds with compilation steps. Many maintainers prefer features of the "
+"flat layout for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:185
+msgid ""
+"While we suggest that you use the **src/package** layout discussed above,"
+" it's important to also understand the flat layout, especially if you "
+"plan to contribute to a package that uses this layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:188
+msgid "Why most scientific Python packages do not use src/ layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:191
+msgid ""
+"Migrating larger scientific packages that already use a flat layout would"
+" consume significant time and resources."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:193
+msgid ""
+"However, the advantages of using the **src/package** layout for a "
+"beginner are significant. As such, we recommend that you use the "
+"**src/package** layout if you are creating a new package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:196
+msgid ""
+"Numerous packages in the ecosystem [have had to move to a **src/package**"
+" layout](https://github.com/scikit-build/cmake-python-"
+"distributions/pull/145)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:200
+msgid "What does the flat layout structure look like?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:202
+msgid "The flat layout's primary characteristics are:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:204
+msgid ""
+"The source code for your package lives in a directory with your package's"
+" name in the root of your directory"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:206
+msgid ""
+"Often the `tests/` directory also lives within that same `package` "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:208
+msgid ""
+"Below you can see the recommended structure of a scientific Python "
+"package using the flat layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:230
+msgid "Benefits of using the flat layout in your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:232
+msgid ""
+"There are some benefits to the scientific community in using the flat "
+"layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:234
+msgid ""
+"This structure has historically been used across the ecosystem and "
+"packages using it are unlikely to change."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:236
+msgid ""
+"You can import the package directly from the root directory. For some "
+"this is engrained in their respective workflows. However, for a beginner "
+"the danger of doing this is that you are not developing and testing "
+"against the installed version of your package. Rather, you are working "
+"directly with the flat files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:242
+msgid "Core scientific Python packages that use the flat layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:245
+msgid "[numpy](https://github.com/numpy/numpy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:246
+msgid "[scipy](https://github.com/scipy/scipy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:247
+msgid "[pandas](https://github.com/pandas-dev/pandas)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:248
+msgid "[xarray](https://github.com/pydata/xarray)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:249
+msgid "[Jupyter-core](https://github.com/jupyter/jupyter_core)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:250
+msgid "[Jupyter notebook](https://github.com/jupyter/notebook)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:251
+msgid "[scikit-learn](https://github.com/scikit-learn/scikit-learn)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:253
+msgid ""
+"It would be a significant maintenance cost and burden to move all of "
+"these packages to a different layout. The potential benefits of the "
+"source layout for these tools are not worth the maintenance investment."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:258
+msgid "Multiple packages in a src/ folder"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:261
+msgid ""
+"In some more advanced cases, you may have more than one package in your "
+"**src/** directory. See [Black's GitHub "
+"repo](https://github.com/psf/black/tree/main/src) for an example of this."
+" However, for most beginners you will likely only have one sub-directory "
+"in your **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:1
+msgid "Creating New Versions of Your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:6
+msgid "Key Takeways"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:8
+msgid ""
+"Follow [semantic versioning guidelines (SemVer) "
+"rules](https://semver.org/) when bumping (increasing) your Python's "
+"package version; for example a major version bump (version 1.0 --> 2.0) "
+"equates to breaking changes in your package's code for a user."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:9
+msgid ""
+"You may want to consider using a plugin like hatch_vsc for managing "
+"versions of your package - if you want to have a GitHub only release "
+"workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:10
+msgid ""
+"Otherwise most major package build tools such as Hatch, Flit and PDM have"
+" a version feature that will help you update your package's version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:11
+msgid "Avoid updating your packages version number manually by hand in your code!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:14
+msgid ""
+"pyOpenSci recommends that you follow the [Python PEP "
+"440](https://peps.python.org/pep-0440) which recommends using [semantic "
+"versioning guidelines](https://www.python.org/dev/peps/pep-0440"
+"/#semantic-versioning) when assigning release values to new versions of "
+"your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:18
+msgid ""
+"[Semantic versioning](https://semver.org/) is an approach to updating "
+"package versions that considers the type and extent of a change that you "
+"are making to the package code. Being consistent with how and when you "
+"update your package versions is important as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:23
+msgid ""
+"It helps your users (which might include other developers that depend on "
+"your package) understand the extent of changes to a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:24
+msgid ""
+"It helps your development team make decisions about when to bump a "
+"package version based on standard rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:26
+msgid ""
+"Consistent version increases following semver rules mean that values of "
+"your package version explain the extent of the changes made in the code "
+"base from version to version. Thus your package version numbers become "
+"\"expressive\" in the same way that naming code variables well can [make "
+"code expressive](https://medium.com/@daniel.oliver.king/writing-"
+"expressive-code-b69ef7a5a2fa)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:28
+msgid "A note about versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:29
+msgid ""
+"In some cases even small version changes can turn a package update into a"
+" breaking change for some users. What is also important is that you "
+"document how you version your code and if you can, also document your "
+"deprecation policy for code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:38
+msgid "SemVer rules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:40
+msgid "Following SemVer, your bump your package version to a:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:42
+msgid "patch (1.1.1 --> 1.1.**2**)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:43
+msgid "minor (1.1.1 --> 1.**2**.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:44
+msgid "major (1.1.1 --> **2**.1.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:46
+msgid "version number change based on the following rules:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:48
+msgid "Given a version number MAJOR.MINOR.PATCH, increment the:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:50
+msgid "**MAJOR version** when you make incompatible API changes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:51
+msgid ""
+"**MINOR version** when you add functionality in a backwards compatible "
+"manner"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:52
+msgid ""
+"**PATCH version** when you make backwards compatible bug fixes Additional"
+" labels for pre-release and build metadata are available as extensions to"
+" the MAJOR.MINOR.PATCH format."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:57
+msgid ""
+"Some people prefer to use [calver](https://calver.org/index.html) for "
+"versioning. It may be a simpler-to-use system given it relies upon date "
+"values associated with released versions. However, calver does not "
+"provide a user with a sense of when a new version might break an existing"
+" build. As such we still suggest semver."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:60
+msgid ""
+"pyOpenSci will never require semver in a peer review as long as a package"
+" has a reasonable approach to versioning!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:64
+msgid "Avoid manually updating Python package version numbers if you can"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:66
+msgid ""
+"Often times you may want to have your package version value in multiple "
+"locations. One example of this is that it might be both an attribute in "
+"your package **version** and also called in your documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:71
+msgid ""
+"We recommend that you avoid manual updates of your package version number"
+" to avoid human-error. It is better practice to keep your version number "
+"in one location."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:75
+msgid ""
+"If you can't implement a single location version, then consider using a "
+"tool like hatch, PDM or bump2version that will update the version values "
+"for you - throughout your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:79
+msgid ""
+"Below we discuss some tools that you can use to manage updating Python "
+"package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:85
+msgid "Tools to manage versions for your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:87
+msgid ""
+"There are a handful of tools that are widely used in the scientific "
+"ecosystem that you can use to manage your package versions. Some of these"
+" tools are built into or work with your chosen [packaging build tools "
+"that discussed in this chapter.](python-package-build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:93
+msgid "Below, we provide an overview of these tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:99
+msgid ""
+"There are three general groups of tools that you can use to manage "
+"package versions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:102
+msgid ""
+"**semantic release tools:** These tools will automagically determine what"
+" type of version bump to use using the text in your commit messages. "
+"Below we discuss [Python Semantic Release](https://python-semantic-"
+"release.readthedocs.io/en/latest/) as a Python tool that implements a "
+"semantic versioning approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:104
+msgid ""
+"**Manual incremental bump tools:** Tools like "
+"[Hatch](https://hatch.pypa.io/latest/version/) offer version bumping "
+"within your package. Normally this is implemented at the command link for"
+" instance `hatch version major` would bump your project from 0.x to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:105
+msgid ""
+"**Version Control System tools:** Finally there are tools that rely on "
+"your version control system to track versions. These tools often are "
+"plugins to your package build tool (ex: setuptools build or hatchling). "
+"We discuss this option below assuming that you are using **.git tags** "
+"and **GitHub** to manage your package repository."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:107
+msgid "Semantic release, vs version control based vs manual version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:109
+msgid ""
+"Generally semantic release and version control system tools can be setup "
+"to run automatically on GitHub using GitHub Actions. This means that you "
+"can create a workflow where a GitHub release and associated new version "
+"tag is used to trigger an automated build that:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:115
+msgid "Builds your package and updates the version following the new tag"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:116
+msgid "Tests the build and publishes to test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:117
+msgid "Publishes the package to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:120
+msgid ""
+"Bumping a package version refers to the step of increasing the package "
+"version after a set number of changes have been made to it. For example, "
+"you might bump from version 0.8 to 0.9 of a package or from 0.9 to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:124
+msgid ""
+"Using semantic versioning, there are three main \"levels\" of versions "
+"that you might consider:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:127
+msgid "Major, minor and patch. These are described in more detail below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:130
+msgid "Tools for bumping Python package versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:132
+msgid ""
+"In this section we discuss the following tools for managing your Python "
+"package's version:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:135
+msgid "hatch &"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:136
+msgid "hatch_vcs plugin for hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:137
+msgid "setuptools-scm"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:138
+msgid "python-semantic-version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:140
+msgid "Tool 1: Hatch and other build tools that offer incremental versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:142
+msgid ""
+"Many of the modern build tool front end tools offer version support that "
+"follow semantic versioning rules. These tools are different from Python "
+"Semantic Version in that they do not require specific commit messages to "
+"implement version. Rather, they allow you to update the version at the "
+"command line using commands such as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:148
+msgid "`tool-name version update major`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:149
+msgid "`tool-name version update minor`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:151
+msgid ""
+"[Hatch](https://hatch.pypa.io/latest/version/), for instance offers "
+"`hatch version minor` which will modify the version of your package "
+"incrementally. With **Hatch** the version value will be found in your "
+"`pyproject.toml` file. "
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:154
+msgid "Hatch (or other tools like PDM) pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:156
+msgid "Easy to use version updates locally using a single tool!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:158
+msgid "Hatch (or other tools like PDM) cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:160
+msgid ""
+"There will be some setup involved to ensure package version is updated "
+"throughout your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:162
+msgid "Tool 2: Hatch_vcs & hatchling build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:164
+msgid ""
+"[hatch_vcs](https://github.com/ofek/hatch-vcs) is a versioning tool that "
+"allows you to manage package versions using **git tags**. Hatch_vcs "
+"creates a **\\_version.py** file in your package ecosystem that keeps "
+"track of the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:169
+msgid ""
+"Hatch keeps track of your package's version in a `_version.py` file. "
+"Storing the version in a single file managed by Hatch provides your "
+"package with a \"single source of truth\" value for the version number. "
+"This in turn eliminates potential error associated with manually updating"
+" your package's version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:175
+msgid ""
+"When you (or your CI system) build your package, hatch checks the current"
+" tag number for your package. If it has increased, it will update the "
+"**\\_version.py** file with the new value."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:178
+msgid ""
+"Thus, when you create a new tag or a new release with a tag and build "
+"your package, Hatch will access the new tag value and use it to update "
+"your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:181
+msgid ""
+"To use **hatch_vcs** you will need to use the **hatchling** build back "
+"end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:184
+msgid ""
+"Hatchling can also be used with any of the modern build tools including "
+"**Flit** and **PDM** if you prefer those for your day to day workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:189
+msgid "Hatch example setup in your pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:198
+msgid ""
+"**Hatch_vcs** supports a fully automated package release and build, and "
+"push to PyPI workflow on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:208
+msgid ""
+"If you use **setuptools_scm**, then you might find **hatch_vcs** and "
+"**hatchling** to be the modern equivalent to your current setuptools / "
+"build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:211
+msgid "hatch_vcs pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:213
+msgid "Hatch supports modern Python packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:214
+#: ../../package-structure-code/python-package-versions.md:240
+msgid "It creates a single-source file that contains your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:215
+#: ../../package-structure-code/python-package-versions.md:241
+msgid "You never manually update the package version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:216
+#: ../../package-structure-code/python-package-versions.md:242
+msgid ""
+"You can automate writing the version anywhere in your package including "
+"your documentation!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:217
+#: ../../package-structure-code/python-package-versions.md:243
+msgid ""
+"It supports a purely GitHub based release workflow. This simplifies "
+"maintenance workflows."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:218
+#: ../../package-structure-code/python-package-versions.md:244
+msgid ""
+"Version number is updated in your package via a hidden `_version.py` "
+"file. There is no manual configuration updates required."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:219
+#: ../../package-structure-code/python-package-versions.md:245
+msgid ""
+"While we like detailed commit messages (See Python Semantic Version "
+"below), we know that sometimes when maintaining a package specific "
+"guidelines around commit messages can be hard to apply and manage."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:221
+msgid "hatch_vcs cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:223
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub. But you could locally develop a build"
+" to \"bump\" tag versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:226
+msgid "Tool 3: setuptools-scm versioning using git tags"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:228
+msgid ""
+"[`Setuptools_scm`](https://github.com/pypa/setuptools-scm/) is an "
+"extension that you can use with setuptools to manage package versions. "
+"**Setuptools_scm** operates the same way that **hatch_vcs** (discussed "
+"above) does. It stores a version in a **\\_version.py** file and relies "
+"on (**git**) tags to determine the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:234
+msgid ""
+"If you are using **setuptools** as your primary build tool, then "
+"`*setuptools-scm` is a good choice as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:238
+msgid "setuptools_scm Pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:246
+msgid "**setuptools** is still the most commonly used Python packaging build tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:248
+msgid "setuptools_scm cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:250
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:251
+msgid "Not well documented"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:252
+msgid ""
+"Because setuptools will always have to support backwards compatibility it"
+" will always be slower in adopting modern Python packaging conventions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:254
+msgid ""
+"As such you might consider using a more modern tool such as **hatch_vcs**"
+" and **hatchling** to build your package and manage package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:266
+msgid ""
+"Tool 4: [Python semantic release](https://python-semantic-"
+"release.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:268
+msgid ""
+"Python semantic release uses a commit message workflow that updates the "
+"version of your package based on keywords found in your commit messages. "
+"As the name implies, Python Semantic Release follows semver release "
+"rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:273
+msgid ""
+"With Python Semantic Release, versions are triggered using specific "
+"language found in a git commit message."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:276
+msgid ""
+"For example, the words `fix(attribute_warning):` trigger Python Semantic "
+"Release to implement a **patch** version bump. For instance if your "
+"package was at version 1.1.0 and you made the commit below with the words"
+" fix(text-here), Python Semantic Release would bump your package to "
+"version 1.1.1."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:286
+msgid ""
+"Similarly a feature (`feat()`) triggers a minor version bump. For example"
+" from version 1.1 to version 1.2"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:294
+msgid ""
+"You can find a thoughtful discussion of python semantic version [in this "
+"Python package guide](https://py-pkgs.org/07-releasing-versioning"
+"#automatic-version-bumping). Note that the guide hasn't been updated "
+"since 2020 and will potentially be updated in the future! But for now, "
+"some of the commands are dated but the content is still excellent."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:297
+msgid "Python Semantic Release pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:299
+msgid "Follows semver versioning closely"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:300
+msgid ""
+"Enforces maintainers using descriptive commit messages which can simplify"
+" troubleshooting and ensure a cleaner and more self-describing git "
+"history."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:302
+msgid "Python Semantic Release cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:304
+msgid ""
+"Requires very specific commit language to work. In practice some "
+"maintainers and contributors may not be able to maintain that level of "
+"specificity in commit messages (NOTE: there are bots that will check git "
+"commit messages in a repo)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:305
+msgid ""
+"Release happens at the command line. This makes is harder to implement a "
+"GitHub based release workflow as the wrong commit message could trigger a"
+" release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:306
+msgid ""
+"The version number is manually updated in a configuration file such as "
+"`pyproject.toml` vs. in a package **\\_version.py** file."
+msgstr ""
diff --git a/locales/bg/LC_MESSAGES/tests.po b/locales/bg/LC_MESSAGES/tests.po
new file mode 100644
index 000000000..127821c2f
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/tests.po
@@ -0,0 +1,1594 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tests/code-cov.md:1
+msgid "Code coverage for your Python package test suite"
+msgstr ""
+
+#: ../../tests/code-cov.md:3
+msgid ""
+"Code coverage measures how much of your package's code runs during "
+"testing. Achieving high coverage can help ensure the reliability of your "
+"codebase, but it’s not a guarantee of quality. Below, we outline key "
+"considerations for using code coverage effectively."
+msgstr ""
+
+#: ../../tests/code-cov.md:8
+msgid "Why aim for high code coverage?"
+msgstr ""
+
+#: ../../tests/code-cov.md:10
+msgid ""
+"A good practice is to ensure that every line of your code runs at least "
+"once during your test suite. This helps you:"
+msgstr ""
+
+#: ../../tests/code-cov.md:13
+msgid ""
+"**Identify untested parts:** Parts of your codebase that are not covered "
+"by tests."
+msgstr ""
+
+#: ../../tests/code-cov.md:15
+msgid "**Catch bugs:** Bugs that might otherwise go unnoticed."
+msgstr ""
+
+#: ../../tests/code-cov.md:16
+msgid "**Build confidence:** Confidence in your software's stability."
+msgstr ""
+
+#: ../../tests/code-cov.md:18
+msgid "Limitations of code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:20
+msgid "While high code coverage is valuable, it has its limits:"
+msgstr ""
+
+#: ../../tests/code-cov.md:22
+msgid ""
+"**Difficult-to-test code:** Some parts of your code might be challenging "
+"to test, either due to complexity or limited resources."
+msgstr ""
+
+#: ../../tests/code-cov.md:24
+msgid ""
+"**Missed edge cases:** Running all lines of code doesn't guarantee that "
+"edge cases are handled correctly."
+msgstr ""
+
+#: ../../tests/code-cov.md:27
+msgid ""
+"Ultimately, you should focus on how your package will be used and ensure "
+"your tests cover those scenarios adequately."
+msgstr ""
+
+#: ../../tests/code-cov.md:30
+msgid "Tools for analyzing Python package code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:32
+msgid ""
+"Some common services for analyzing code coverage are "
+"[codecov.io](https://about.codecov.io/) and "
+"[coveralls.io](https://coveralls.io/). These projects are free for open "
+"source tools and provide dashboards that show how much of your codebase "
+"is covered during your tests. We recommend setting up an account (on "
+"either CodeCov or Coveralls) and using it to keep track of your code "
+"coverage."
+msgstr ""
+
+#: ../../tests/code-cov.md:39
+#, python-format
+msgid ""
+"Screenshot of the code cov service - showing test coverage for the "
+"stravalib package. This image shows a list of package modules and the "
+"associated number of lines and % lines covered by tests. At the top of "
+"the image, you can see what branch is being evaluated and the path to the"
+" repository."
+msgstr ""
+
+#: ../../tests/code-cov.md:44
+msgid ""
+"The CodeCov platform is a useful tool if you wish to track code coverage "
+"visually. Using it, you can get the same summary information that you can"
+" get with the **pytest-cov** extension. You can also see what lines are "
+"covered by your tests and which are not. Code coverage is useful for "
+"evaluating [unit tests](test-types.md#unit-tests) and/or how much of your"
+" package code is \"covered\". It, however, will not evaluate things like "
+"[integration tests](test-types.md#integration-tests) and [end-to-end "
+"workflows](test-types.md)."
+msgstr ""
+
+#: ../../tests/code-cov.md:56
+msgid "Typing & MyPy coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:57
+msgid "You can also create and upload typing reports to CodeCov."
+msgstr ""
+
+#: ../../tests/code-cov.md:60
+msgid "Exporting Local Coverage Reports"
+msgstr ""
+
+#: ../../tests/code-cov.md:62
+msgid ""
+"In addition to using services like CodeCov or Coveralls, you can generate"
+" local coverage reports directly using the **coverage.py** tool. This can"
+" be especially useful if you want to create reports in Markdown or HTML "
+"format for offline use or documentation."
+msgstr ""
+
+#: ../../tests/code-cov.md:67
+msgid "To generate a coverage report in **Markdown** format, run:"
+msgstr ""
+
+#: ../../tests/code-cov.md:73
+msgid ""
+"This command will produce a Markdown-formatted coverage summary that you "
+"can include in project documentation or share with your team."
+msgstr ""
+
+#: ../../tests/code-cov.md:76
+msgid ""
+"To generate an HTML report that provides a detailed, interactive view of "
+"which lines are covered, use:"
+msgstr ""
+
+#: ../../tests/code-cov.md:83
+msgid ""
+"The generated HTML report will be saved in a directory named `htmlcov` by"
+" default. Open the `index.html` file in your browser to explore your "
+"coverage results."
+msgstr ""
+
+#: ../../tests/code-cov.md:87
+msgid ""
+"These local reports are an excellent way to quickly review coverage "
+"without setting up an external service."
+msgstr ""
+
+#: ../../tests/code-cov.md:90 ../../tests/run-tests-nox.md:168
+#: ../../tests/run-tests.md:332 ../../tests/test-types.md:346
+#: ../../tests/write-tests.md:136
+msgid "Next steps"
+msgstr ""
+
+#: ../../tests/code-cov.md:92
+msgid ""
+"Writing meaningful tests is the foundation of useful coverage. See [Write"
+" tests](write-tests.md) and [Test types](test-types.md) to learn more "
+"about developing better test suites. Learn how to run your tests both "
+"[locally](run-tests.md) and in [continuous integration](tests-ci.md)."
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Intro"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Write tests"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Test types"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests locally"
+msgstr ""
+
+#: ../../tests/index.md:70 ../../tests/run-tests-nox.md:7
+msgid "Run tests with Nox"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests online (using CI)"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Code coverage"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Create & Run Tests"
+msgstr ""
+
+#: ../../tests/index.md:2
+msgid "Tests and data for your Python package"
+msgstr ""
+
+#: ../../tests/index.md:4
+msgid ""
+"Adding tests to your package provides a set of checks that ensure that "
+"its functioning how you expect it to."
+msgstr ""
+
+#: ../../tests/index.md:7
+msgid ""
+"In this section, you will learn about the importance of writing tests for"
+" your Python package, different [types of tests that you should consider"
+"](test-types) and how you can set up infrastructure to run your tests "
+"both [locally](run-tests) and [on GitHub](tests-ci)."
+msgstr ""
+
+#: ../../tests/index.md:16
+msgid "✨ Why write tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:21
+msgid ""
+"Learn about the importance of writing tests for your Python package and "
+"how they help you and potential contributors."
+msgstr ""
+
+#: ../../tests/index.md:25
+msgid "✨ Types of tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:30
+msgid ""
+"Get to know the three test types: unit, integration, and end-to-end "
+"tests. Learn when and how to use each."
+msgstr ""
+
+#: ../../tests/index.md:34
+msgid "✨ Run tests locally ✨"
+msgstr ""
+
+#: ../../tests/index.md:39
+msgid ""
+"Learn about testing tools like pytest, nox, and tox to run tests across "
+"different Python versions on your computer. And explore examples of using"
+" Hatch with UV as a task runner to run tests across Python versions."
+msgstr ""
+
+#: ../../tests/index.md:43
+msgid "✨ Run tests locally (using nox) ✨"
+msgstr ""
+
+#: ../../tests/index.md:48
+msgid ""
+"Nox is a python powered task runner that can be used to run tests. Learn "
+"how to use nox to run tests."
+msgstr ""
+
+#: ../../tests/index.md:51
+msgid "✨ Run tests online (using CI) ✨"
+msgstr ""
+
+#: ../../tests/index.md:56
+msgid ""
+"Set up continuous integration with GitHub Actions to run tests across "
+"Python versions and operating systems."
+msgstr ""
+
+#: ../../tests/index.md:60
+msgid "✨ Code coverage ✨"
+msgstr ""
+
+#: ../../tests/index.md:65
+msgid ""
+"Measure how much of your package code runs during tests. Learn to "
+"generate local reports and visualize coverage online."
+msgstr ""
+
+#: ../../tests/run-tests.md:7
+msgid "Run tests for your Python package"
+msgstr ""
+
+#: ../../tests/run-tests.md:9
+msgid ""
+"Running your tests across different Python versions and operating systems"
+" is critical to ensuring your package works for your users. Your users "
+"may be running different versions of Python and operating systems than "
+"you are."
+msgstr ""
+
+#: ../../tests/run-tests.md:13
+msgid ""
+"This page teaches you how to run tests locally in isolated environments "
+"and across multiple Python versions. You'll learn about two main "
+"automation tools: [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/en/stable/index.html). In the next "
+"lesson, you will learn about running your tests online in [continuous "
+"integration (CI)](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:20
+msgid "Why run tests across multiple environments?"
+msgstr ""
+
+#: ../../tests/run-tests.md:22
+msgid ""
+"When you develop a package on your computer, it works in one specific "
+"environment: your Python version, your operating system, and your "
+"installed dependencies. Your users, however, will run your code in many "
+"different environments. By running your tests across multiple Python "
+"versions and operating systems, you catch compatibility issues before "
+"users do."
+msgstr ""
+
+#: ../../tests/run-tests.md:28
+msgid ""
+"Additionally, running tests in isolated environments ensures that your "
+"tests pass because of your code, not because of unexpected dependencies "
+"installed on your computer. This gives you confidence that your package "
+"will work when others install it."
+msgstr ""
+
+#: ../../tests/run-tests.md:33
+msgid ""
+"On this page, you will learn about the tools that you can use to both run"
+" tests in isolated environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:37
+msgid "**Related pages:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:39
+msgid "[Write tests](write-tests.md) for best practices on writing test suites"
+msgstr ""
+
+#: ../../tests/run-tests.md:41
+msgid ""
+"[Test types](test-types.md) to understand unit, integration, and end-to-"
+"end tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:43
+msgid "[Run tests online with CI](tests-ci.md) for GitHub Actions setup"
+msgstr ""
+
+#: ../../tests/run-tests.md:44
+msgid "[Code coverage](code-cov.md) to measure how much code your tests cover"
+msgstr ""
+
+#: ../../tests/run-tests.md:48
+msgid "Tools to run your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:50
+msgid ""
+"There are three categories of tools that will make it easier to setup and"
+" run your tests in various environments:"
+msgstr ""
+
+#: ../../tests/run-tests.md:53
+msgid ""
+"**Testing framework (pytest):** Provides the syntax and tools for writing"
+" and running your tests. Learn more from the [pytest "
+"documentation](https://docs.pytest.org/). Below you will learn about "
+"pytest, the most commonly used testing framework in the scientific Python"
+" ecosystem. Testing frameworks are essential for running tests, but they "
+"don't provide an easy way to run tests across Python versions or in "
+"isolated environments—that's where automation tools come in."
+msgstr ""
+
+#: ../../tests/run-tests.md:61
+msgid ""
+"**Automation tools (Nox, Tox, Hatch):** Allow you to run tests in "
+"isolated environments and across multiple Python versions with a single "
+"command. We focus on [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/) below. These tools create virtual "
+"environments automatically and ensure your tests run consistently. "
+"However, they typically only test on your local operating system."
+msgstr ""
+
+#: ../../tests/run-tests.md:69
+msgid ""
+"**Continuous Integration (CI):** Runs your tests online across different "
+"operating systems (Windows, Mac, and Linux) and Python versions. CI "
+"integrates with platforms like GitHub Actions to automatically test every"
+" pull request and code change."
+msgstr ""
+
+#: ../../tests/run-tests.md:74
+msgid "[Learn about CI here](ci-cd)."
+msgstr ""
+
+#: ../../tests/run-tests.md:76
+msgid "Quick comparison: what each tool does"
+msgstr ""
+
+#: ../../tests/run-tests.md:78
+msgid "**Testing Framework (pytest):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:80
+msgid "Runs your tests locally in your current Python environment"
+msgstr ""
+
+#: ../../tests/run-tests.md:81
+msgid "Provides the core syntax for writing tests (assertions, fixtures, etc.)"
+msgstr ""
+
+#: ../../tests/run-tests.md:83
+msgid "Can be extended with plugins (like pytest-cov for coverage)"
+msgstr ""
+
+#: ../../tests/run-tests.md:85
+msgid "**Automation Tools (Nox, Tox, Hatch):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:87
+msgid "Run tests locally across multiple Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:88
+msgid "Create and manage isolated virtual environments automatically"
+msgstr ""
+
+#: ../../tests/run-tests.md:89
+msgid "Can automate other tasks like building documentation"
+msgstr ""
+
+#: ../../tests/run-tests.md:90
+msgid "Make it easy to reproduce test environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:92
+msgid "**Continuous Integration (GitHub Actions):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:94
+msgid "Runs tests online automatically for every pull request"
+msgstr ""
+
+#: ../../tests/run-tests.md:95
+msgid "Tests across different operating systems (Windows, Mac, Linux)"
+msgstr ""
+
+#: ../../tests/run-tests.md:96
+msgid "Tests across multiple Python versions in parallel"
+msgstr ""
+
+#: ../../tests/run-tests.md:97
+msgid "Can automate deployments, releases, and other workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:99
+msgid "What testing framework / package should I use to run tests?"
+msgstr ""
+
+#: ../../tests/run-tests.md:101
+msgid ""
+"We recommend using `Pytest` to build and run your package tests. Pytest "
+"is the most common testing tool used in the Python ecosystem."
+msgstr ""
+
+#: ../../tests/run-tests.md:103
+msgid ""
+"[The Pytest package](https://docs.pytest.org/en/latest/) also has a "
+"number of extensions that can be used to add functionality such as:"
+msgstr ""
+
+#: ../../tests/run-tests.md:106
+msgid ""
+"[pytest-cov](https://pytest-cov.readthedocs.io/en/latest/) allows you to "
+"analyze the code coverage of your package during your tests, and "
+"generates a report that you can [upload to "
+"codecov](https://about.codecov.io/)."
+msgstr ""
+
+#: ../../tests/run-tests.md:108 ../../tests/tests-ci.md:7
+msgid "Todo"
+msgstr ""
+
+#: ../../tests/run-tests.md:109
+msgid "Learn more about code coverage here. (add link)"
+msgstr ""
+
+#: ../../tests/run-tests.md:113
+msgid ""
+"Your editor or IDE may add additional convenience for running tests, "
+"setting breakpoints, and toggling the `–no-cov` flag. Check your editor's"
+" documentation for more information."
+msgstr ""
+
+#: ../../tests/run-tests.md:116
+msgid "Run tests using pytest"
+msgstr ""
+
+#: ../../tests/run-tests.md:118
+msgid "If you are using **pytest**, you can run your tests locally by calling:"
+msgstr ""
+
+#: ../../tests/run-tests.md:121
+msgid "`pytest`"
+msgstr ""
+
+#: ../../tests/run-tests.md:123
+msgid ""
+"Or if you want to run a specific test file - let's call this file "
+"\"`test_module.py`\" - you can run:"
+msgstr ""
+
+#: ../../tests/run-tests.md:125
+msgid "`pytest test_module.py`"
+msgstr ""
+
+#: ../../tests/run-tests.md:127
+msgid ""
+"Learn more about pytest [here](https://docs.pytest.org/en/stable/getting-"
+"started.html)."
+msgstr ""
+
+#: ../../tests/run-tests.md:129
+msgid ""
+"Running pytest on your computer is going to run your tests in whatever "
+"Python environment you currently have activated. This means that tests "
+"will be run on a single version of Python and only on the operating "
+"system that you are running locally."
+msgstr ""
+
+#: ../../tests/run-tests.md:134
+msgid ""
+"An automation tool can simplify the process of running tests in various "
+"Python environments."
+msgstr ""
+
+#: ../../tests/run-tests.md:137
+msgid "Tests across operating systems"
+msgstr ""
+
+#: ../../tests/run-tests.md:138
+msgid ""
+"If you want to run your tests on different operating systems you can use "
+"continuous integration. [Learn more here](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:141
+msgid "Tools to automate running your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:143
+msgid ""
+"To run tests on various Python versions or in various specific "
+"environments with a single command, you can use an automation tool such "
+"as `nox` or `tox`. Both `nox` and `tox` can create an isolated virtual "
+"environments. This allows you to easily run your tests in multiple "
+"environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:146
+msgid ""
+"We will focus on Hatch on this page as Hatch is the default tool that we "
+"use in our [tutorials](create-pure-python-package) and for our [Python "
+"package template](https://github.com/pyOpenSci/pyos-package-template)."
+msgstr ""
+
+#: ../../tests/run-tests.md:149
+msgid ""
+"If you are not a hatch fan, then [Nox](https://nox.thea.codes/) is an "
+"alternative tool that we cover in the next lesson. `nox` is a Python-"
+"based automation tool that builds upon the features of both `make` and "
+"`tox`. `nox` is designed to simplify and streamline testing and "
+"development workflows. Everything that you do with `nox` can be "
+"implemented using a Python-based interface. You will learn more about "
+"using nox [here](run-tests-nox)."
+msgstr ""
+
+#: ../../tests/run-tests.md:151
+msgid "Other automation tools you'll see in the wild"
+msgstr ""
+
+#: ../../tests/run-tests.md:154
+msgid ""
+"**[Tox](https://tox.wiki/en/latest/index.html#useful-links)** is an "
+"automation tool that supports common steps such as building "
+"documentation, running tests across various versions of Python, and more."
+msgstr ""
+
+#: ../../tests/run-tests.md:159
+msgid ""
+"**[Make](https://www.gnu.org/software/make/manual/make.html)** is a build"
+" automation tool that some developers use for running tests due to its "
+"versatility. However, Make's unique syntax can be challenging to learn, "
+"and it won't manage environments for you like Hatch and Nox do."
+msgstr ""
+
+#: ../../tests/run-tests.md:166
+msgid "Run tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:168
+msgid ""
+"**Hatch** is a modern Python packaging and environment manager that "
+"integrates test running capabilities directly into your `pyproject.toml`."
+" Unlike Nox (which uses a separate `noxfile.py`), Hatch keeps all your "
+"project configuration in one place, making it ideal if you're already "
+"using Hatch for packaging workflows."
+msgstr ""
+
+#: ../../tests/run-tests.md:174
+msgid "Why Hatch for testing?"
+msgstr ""
+
+#: ../../tests/run-tests.md:176
+msgid "Configuration lives in `pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:178
+msgid "Integrates seamlessly with Hatch's packaging and build workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:179
+msgid "No separate Python file needed (unlike Nox)"
+msgstr ""
+
+#: ../../tests/run-tests.md:180
+msgid "Easy to share standardized test environments across your team"
+msgstr ""
+
+#: ../../tests/run-tests.md:182
+msgid "Setting up Hatch environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:184
+msgid ""
+"Hatch environments are defined in your `pyproject.toml`. Rather than "
+"duplicating dependencies, use `dependency-groups` to reference your test "
+"dependencies:"
+msgstr ""
+
+#: ../../tests/run-tests.md:205
+msgid ""
+"This approach keeps your test dependencies in one place and avoids "
+"duplication. For a complete example, see our [packaging template "
+"tutorial](https://www.pyopensci.org/tutorials/create-python-package.html)"
+" which shows a full `pyproject.toml` configuration."
+msgstr ""
+
+#: ../../tests/run-tests.md:210
+msgid "Running tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:212
+msgid ""
+"Once you've defined your test environment, you can run tests with simple "
+"commands:"
+msgstr ""
+
+#: ../../tests/run-tests.md:215
+msgid "**List available environments:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:221
+msgid "**Run pytest in the test environment:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:228
+msgid "Testing across Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:230
+msgid ""
+"To test across multiple Python versions, define a matrix in your "
+"`pyproject.toml`:"
+msgstr ""
+
+#: ../../tests/run-tests.md:249
+msgid "Then run all versions with a single command:"
+msgstr ""
+
+#: ../../tests/run-tests.md:255
+msgid ""
+"Hatch will automatically run your tests on Python 3.10, 3.11, and 3.12. "
+"If you only want to test a specific Python version:"
+msgstr ""
+
+#: ../../tests/run-tests.md:262
+msgid "Using Hatch in GitHub Actions"
+msgstr ""
+
+#: ../../tests/run-tests.md:264
+msgid "Hatch integrates well with CI/CD. Here's a minimal GitHub Actions setup:"
+msgstr ""
+
+#: ../../tests/run-tests.md:288
+msgid ""
+"Since all of your test dependencies are declared in the `dependency-"
+"group` table of your `pyproject.toml`, your CI environment is "
+"reproducible and consistent with the environments that you are using for "
+"local testing."
+msgstr ""
+
+#: ../../tests/run-tests.md:292
+msgid "Nox vs Hatch: choosing the right tool"
+msgstr ""
+
+#: ../../tests/run-tests.md:294
+msgid ""
+"Both Hatch and Nox are excellent automation tools / task runners for "
+"running tests across Python versions. Here's how they compare to help you"
+" decide which fits your workflow:"
+msgstr ""
+
+#: ../../tests/run-tests.md:298
+msgid "Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:300
+msgid ""
+"**Configuration:** Hatch uses a `declarative` configuration approach. You"
+" tell it what goes into an environment and that empowers Hatch to create "
+"the environment for you. All configuration settings live in your "
+"`pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:302
+msgid ""
+"**Integration:** Hatch is package management tool that also has an "
+"integrated automation / task runner. Using Hatch means you are using the "
+"same tool for all of your packaging and automation needs."
+msgstr ""
+
+#: ../../tests/run-tests.md:303
+msgid ""
+"**Learning curve:** Easier if you prefer declarative configuration over a"
+" code based workflow"
+msgstr ""
+
+#: ../../tests/run-tests.md:304
+msgid ""
+"**packaging scope** Hatch is better for simpler workflows that focus on "
+"testing and packaging. If you have more complex builds or are creating a "
+"non pure python package you might prefer Nox. The scientific Python "
+"development guide has more details on this."
+msgstr ""
+
+#: ../../tests/run-tests.md:305
+msgid ""
+"**Best for:** Teams using Hatch for packaging, or those who want "
+"standardized configuration in one place"
+msgstr ""
+
+#: ../../tests/run-tests.md:308
+msgid "Nox"
+msgstr ""
+
+#: ../../tests/run-tests.md:310
+msgid "**Configuration:** Python-driven via `noxfile.py` for maximum flexibility"
+msgstr ""
+
+#: ../../tests/run-tests.md:311
+msgid "**Customization:** Great for complex workflows that need custom logic"
+msgstr ""
+
+#: ../../tests/run-tests.md:312
+msgid ""
+"**Learning curve:** Easier if you already know Python and want flexible "
+"session control"
+msgstr ""
+
+#: ../../tests/run-tests.md:314
+msgid ""
+"**Best for:** Complex automation needs, building docs alongside tests, or"
+" workflows that don't fit the standard model"
+msgstr ""
+
+#: ../../tests/run-tests.md:317
+msgid "What we recommend"
+msgstr ""
+
+#: ../../tests/run-tests.md:319
+msgid ""
+"**If you're using Hatch for packaging:** Use Hatch for testing too. You "
+"get everything in one place and one consistent tool."
+msgstr ""
+
+#: ../../tests/run-tests.md:322
+msgid ""
+"**If you need maximum flexibility:** Choose Nox. Its Python-driven "
+"approach lets you implement almost any workflow."
+msgstr ""
+
+#: ../../tests/run-tests.md:325
+msgid ""
+"**If you're just starting out:** Start with Hatch. It's simpler to set up"
+" and understand, and you can always switch to Nox later if you need to."
+msgstr ""
+
+#: ../../tests/run-tests.md:328
+msgid ""
+"**Both tools are good choices.** For a more comprehensive guide to using"
+" Nox, see [Run tests with Nox](run-tests-nox.md) and the [Scientific "
+"Python testing guide](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests.md:334
+msgid ""
+"Now that you understand how to run tests locally across Python versions, "
+"you can learn about [running tests automatically in GitHub Actions with "
+"continuous integration](tests-ci). You can also review [test types](test-"
+"types) and [write tests](write-tests) for your package."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:9
+msgid ""
+"**Nox** is a Python-based automation tool for running tests across "
+"multiple Python versions and managing isolated test environments. If you "
+"prefer Python-driven configuration over TOML, or need complex automation "
+"workflows, Nox is an excellent choice."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:14
+msgid ""
+"For more information about Nox, see the [official Nox "
+"documentation](https://nox.thea.codes/) or the [Scientific Python guide "
+"to testing](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:18
+msgid "Why Nox?"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:20
+msgid "**Nox** is a great automation tool because it:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:22
+msgid "Is Python-based, making it accessible if you already know Python"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:23
+msgid "Will create isolated environments to run workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:24
+msgid "Supports complex, custom automation beyond standard testing"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:25
+msgid "Is flexible and powerful for intricate build and test scenarios"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:27
+msgid ""
+"`nox` simplifies creating and managing testing environments. With `nox`, "
+"you can set up virtual environments and run tests across Python versions "
+"using the environment manager of your choice with a single command."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:31
+msgid "Set up Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:33
+msgid ""
+"To get started with Nox, you create a `noxfile.py` file at the root of "
+"your project directory. You then define commands using Python functions."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:37
+msgid "Nox installations"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:39
+msgid ""
+"When you install and use Nox to run tests across different Python "
+"versions, Nox will create and manage individual `venv` environments for "
+"each Python version that you specify in the Nox function. Nox will manage"
+" each environment on its own."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:45
+msgid ""
+"Nox can also be used for other development tasks such as building "
+"documentation, creating your package distribution, and testing "
+"installations across both PyPI-related environments (e.g., venv, "
+"virtualenv) and `conda` (e.g., `conda-forge`)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:50
+msgid "Test environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:52
+msgid ""
+"By default, `nox` uses Python's built-in `venv` environment manager. A "
+"virtual environment (`venv`) is a self-contained Python environment that "
+"allows you to isolate and manage dependencies for different Python "
+"projects. It helps ensure that project-specific libraries and packages do"
+" not interfere with each other, promoting a clean and organized "
+"development environment."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:58
+msgid "Nox with venv environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:60
+msgid ""
+"Below is an example of setting up Nox to run tests using `venv`, which is"
+" the built-in environment manager that comes with base Python."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:63
+msgid ""
+"Note that the example below assumes that you have setup your "
+"`pyproject.toml` to declare test dependencies using `project.optional-"
+"dependencies`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:83
+msgid ""
+"With this setup, you can use `session.install(\".[tests]\")` to install "
+"your test dependencies. Notice that below one single Nox session allows "
+"you to run your tests on 4 different Python environments (Python 3.9, "
+"3.10, 3.11, and 3.12)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:89
+msgid ""
+"For this to run you will need to have python3.9, python3.10, python3.11, "
+"and python3.12 installed on your computer. Otherwise nox will skip "
+"running tests for whatever versions are missing."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:107
+msgid ""
+"Above you create a Nox session in the form of a function with a "
+"`@nox.session` decorator. Notice that within the decorator you declare "
+"the versions of Python that you wish to run."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:111
+msgid ""
+"To run the above, you'd execute the following command, specifying which "
+"session with `--session` (sometimes shortened to `-s`). Your function "
+"above is called `test`, therefore the session name is `test`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:119
+msgid "Nox with conda / mamba"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:121
+msgid ""
+"Below is an example for setting up Nox to use mamba (or conda) for your "
+"environment manager. Unlike venv, conda can automatically install the "
+"various versions of Python that you need. You won't need to install all "
+"four Python versions if you use conda/mamba, like you do with `venv`."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:127
+msgid ""
+"For `conda` to work with `nox`, you will need to ensure that either "
+"`conda` or `mamba` is installed on your computer."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:150
+msgid "To run the above session you'd use:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:156
+msgid "Hatch vs Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:158
+msgid ""
+"If you're trying to decide between Hatch and Nox, see the [comparison and"
+" recommendations on the main testing page](run-tests.md)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:161
+msgid "In summary"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:163
+msgid ""
+"**Choose Hatch** if you're already using Hatch for packaging and want "
+"everything in one place"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:165
+msgid ""
+"**Choose Nox** if you need maximum flexibility, prefer Python-driven "
+"configuration, or need complex automation workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:170
+msgid ""
+"Now that you understand how to run tests locally with Nox, you can learn "
+"about [running tests automatically with continuous integration](tests-ci)"
+" or [running tests with Hatch](run-tests.md)."
+msgstr ""
+
+#: ../../tests/test-types.md:1
+msgid "Test Types for Python packages"
+msgstr ""
+
+#: ../../tests/test-types.md:3
+msgid "Three types of tests: unit, integration, and functional tests"
+msgstr ""
+
+#: ../../tests/test-types.md:5
+msgid ""
+"There are different types of tests that you want to consider when "
+"creating your test suite:"
+msgstr ""
+
+#: ../../tests/test-types.md:8 ../../tests/test-types.md:15
+msgid "Unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:9 ../../tests/test-types.md:93
+msgid "Integration tests"
+msgstr ""
+
+#: ../../tests/test-types.md:10
+msgid "End-to-end (also known as functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:12
+msgid ""
+"Each type of test has a different purpose. Here, you will learn about all"
+" three types of tests by working through simple examples."
+msgstr ""
+
+#: ../../tests/test-types.md:17
+msgid ""
+"A unit test involves testing individual components or units of code in "
+"isolation to ensure that they work correctly. The goal of unit testing is"
+" to verify that each part of the software, typically at the function or "
+"method level, performs its intended task correctly."
+msgstr ""
+
+#: ../../tests/test-types.md:22
+msgid ""
+"Unit tests can be compared to examining each piece of your puzzle to "
+"ensure parts or subsections of it are not broken. If all of the pieces of"
+" that section of your puzzle don't fit together, you will never complete "
+"it. Similarly, when working with code, tests ensure that each function, "
+"attribute, class, and method works properly when isolated."
+msgstr ""
+
+#: ../../tests/test-types.md:28
+msgid ""
+"**Unit test example:** Suppose you have a function that adds two numbers "
+"together. A unit test for that function ensures that when provided with "
+"two numbers, it returns the correct sum. This is a unit test because it "
+"checks a single unit (function) in isolation."
+msgstr ""
+
+#: ../../tests/test-types.md:54
+msgid ""
+"Example unit test for the above function. You'd run this test using the "
+"`pytest` command in your **tests/** directory."
+msgstr ""
+
+#: ../../tests/test-types.md:76
+msgid ""
+"Notice that the tests above don't just test one case where numbers are "
+"added together. Instead, they test multiple scenarios: adding positive "
+"numbers, adding a negative number, and adding zero. This helps ensure "
+"that the `add_numbers` function behaves correctly in different situations"
+" and is the beginning of thinking about programming defensively."
+msgstr ""
+
+#: ../../tests/test-types.md:83
+msgid ""
+"You can run this test from your terminal using `pytest "
+"tests/test_math_utils.py`."
+msgstr ""
+
+#: ../../tests/test-types.md:86 ../../tests/test-types.md:215
+msgid ""
+"image of puzzle pieces that all fit together nicely. The puzzle pieces "
+"are colorful - purple, green and teal."
+msgstr ""
+
+#: ../../tests/test-types.md:90
+msgid ""
+"Your unit tests should ensure each part of your code works as expected on"
+" its own."
+msgstr ""
+
+#: ../../tests/test-types.md:95
+msgid ""
+"Integration tests involve testing how parts of your package work together"
+" or integrate. Integration tests can be compared to connecting a bunch of"
+" puzzle pieces together to form a whole picture. Integration tests focus "
+"on how different pieces of your code fit and work together."
+msgstr ""
+
+#: ../../tests/test-types.md:100
+msgid ""
+"For example, suppose you have functions that convert temperatures and "
+"calculate statistics. An integration test would ensure that these "
+"functions work together correctly in a workflow where you convert "
+"temperatures and then analyze them."
+msgstr ""
+
+#: ../../tests/test-types.md:178
+msgid ""
+"Here's an integration test that checks how the conversion and statistics "
+"functions work together:"
+msgstr ""
+
+#: ../../tests/test-types.md:204
+msgid ""
+"This integration test verifies that the conversion and averaging "
+"functions work together as expected in a real workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:207
+msgid ""
+"image of two puzzle pieces with some missing parts. The puzzle pieces are"
+" purple teal yellow and blue. The shapes of each piece don’t fit "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:212
+msgid ""
+"If puzzle pieces have missing ends, they can’t work together with other "
+"elements in the puzzle. The same is true with individual functions, "
+"methods and classes in your software. The code needs to work both "
+"individually and together to perform certain sets of tasks."
+msgstr ""
+
+#: ../../tests/test-types.md:220
+msgid ""
+"Your integration tests should ensure that parts of your code that are "
+"expected to work together, do so as expected."
+msgstr ""
+
+#: ../../tests/test-types.md:224
+msgid "End-to-end (functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:226
+msgid ""
+"End-to-end tests (also referred to as functional tests) in Python are "
+"like comprehensive checklists for your software. They simulate real user "
+"workflows to make sure the code base supports real-life applications and "
+"use-cases from start to finish. These tests help catch issues that might "
+"not show up in smaller tests and ensure your entire application behaves "
+"correctly. Think of them as a way to give your software a final check "
+"before it's put into action, making sure it's ready to deliver a smooth "
+"user experience."
+msgstr ""
+
+#: ../../tests/test-types.md:235
+msgid "Image of a completed puzzle showing a daisy"
+msgstr ""
+
+#: ../../tests/test-types.md:240
+msgid ""
+"End-to-end or functional tests represent an entire workflow that your "
+"package supports."
+msgstr ""
+
+#: ../../tests/test-types.md:244
+msgid ""
+"**End-to-end test example:** Let's say your package opens and "
+"processes/converts temperature data from Celsius to Fahrenheit and then "
+"calculates the average temperature. An end-to-end test would simulate "
+"this entire workflow, ensuring that the package correctly handles the "
+"input temperature data and returns a summary average value. An end-to-end"
+" test would provide sample data, run the entire workflow, and verify that"
+" the final output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:274
+msgid ""
+"This end-to-end test exercises the entire user workflow: providing sample"
+" data, converting and averaging it, and verifying the output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:278
+msgid ""
+"End-to-end tests also verify how a program runs from start to finish. A "
+"tutorial that you add to your documentation and run in CI is another "
+"example of an end-to-end test. For example, a Jupyter (`.ipynb`) notebook"
+" or `.md` file with embedded code that demonstrates a complete user "
+"workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:285
+msgid ""
+"For scientific packages, creating short tutorials that highlight core "
+"workflows that your package supports, that are run when your "
+"documentation is built, could also serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:290
+msgid "When to use which test type"
+msgstr ""
+
+#: ../../tests/test-types.md:292
+msgid ""
+"If you’re new to testing, start with unit tests. They are the simplest to"
+" write, fastest to run, and easiest to debug. As your package grows, you "
+"can then add integration and end-to-end tests where they add the most "
+"value."
+msgstr ""
+
+#: ../../tests/test-types.md:294
+msgid "Start by writing unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:296
+msgid "Are you testing a single function, method, or class in isolation?"
+msgstr ""
+
+#: ../../tests/test-types.md:298
+msgid "→ Yes: Write a [unit test](test-types.md#unit-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:300
+msgid "Example: Check that add_numbers(2, 3) returns 5"
+msgstr ""
+
+#: ../../tests/test-types.md:301
+msgid "Unit tests don’t rely on other parts of your code"
+msgstr ""
+
+#: ../../tests/test-types.md:302
+msgid "These tests form the foundation of your test suite"
+msgstr ""
+
+#: ../../tests/test-types.md:303
+msgid "If something breaks, unit tests make it easy to find where"
+msgstr ""
+
+#: ../../tests/test-types.md:305
+msgid "Add integration tests next"
+msgstr ""
+
+#: ../../tests/test-types.md:307
+msgid "Are you testing how multiple components work together?"
+msgstr ""
+
+#: ../../tests/test-types.md:309
+msgid "→ **Yes:** Write [integration tests](test-types.md#integration-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:311
+msgid "Example: Converting temperatures and then computing their average"
+msgstr ""
+
+#: ../../tests/test-types.md:312
+msgid "Integration tests assume individual pieces already work"
+msgstr ""
+
+#: ../../tests/test-types.md:313
+msgid "These tests verify that components interact correctly"
+msgstr ""
+
+#: ../../tests/test-types.md:315
+msgid "Use end-to-end tests for core workflows"
+msgstr ""
+
+#: ../../tests/test-types.md:317
+msgid "Are you testing a complete, realistic user workflow from start to finish?"
+msgstr ""
+
+#: ../../tests/test-types.md:319
+msgid ""
+"→ **Yes:** Use an [end-to-end test](test-types.md#end-to-end-functional-"
+"tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:321
+msgid "Example: Run a full data-processing workflow a user would follow"
+msgstr ""
+
+#: ../../tests/test-types.md:322
+msgid "These tests often mirror examples in your documentation"
+msgstr ""
+
+#: ../../tests/test-types.md:323
+msgid "Use them sparingly for the most important workflows."
+msgstr ""
+
+#: ../../tests/test-types.md:324
+msgid "Tutorials run during documentation builds can serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:326
+msgid "Comparing unit, integration, and end-to-end tests"
+msgstr ""
+
+#: ../../tests/test-types.md:328
+msgid ""
+"Unit tests, integration tests, and end-to-end tests have complementary "
+"advantages and disadvantages. The fine-grained nature of unit tests makes"
+" them well-suited for isolating where errors are occurring. However, unit"
+" tests are not useful for verifying that different sections of code work "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:334
+msgid ""
+"Integration and end-to-end tests verify that different portions of the "
+"program work together, but are less valuable for immediately isolating "
+"exactly where errors are occurring."
+msgstr ""
+
+#: ../../tests/test-types.md:338
+msgid "Tests don't have to be perfect"
+msgstr ""
+
+#: ../../tests/test-types.md:339
+msgid ""
+"It is important to note that you don't need to spend energy worrying "
+"about the specifics of test types. When you begin to work on your test "
+"suite, consider what your package does and how you may need to test parts"
+" of it. Being familiar with different test types provides a framework to "
+"help you think about writing tests and how they can complement each "
+"other."
+msgstr ""
+
+#: ../../tests/test-types.md:348
+msgid ""
+"Now that you understand test types, learn how to [write effective tests"
+"](write-tests) for your package. Then explore how to [run tests locally"
+"](run-tests) and in [continuous integration](tests-ci). You can also "
+"learn about tracking test coverage using tools like [CodeCov](code-cov)."
+msgstr ""
+
+#: ../../tests/tests-ci.md:1
+msgid "Run tests with Continuous Integration"
+msgstr ""
+
+#: ../../tests/tests-ci.md:3
+msgid ""
+"Running your [test suite locally](run-tests) is useful as you develop "
+"code and also test new features or changes to the code base. However, you"
+" also will want to setup Continuous Integration (CI) to run your tests "
+"online. CI allows you to run all of your tests in the cloud. While you "
+"may only be able to run tests locally on a specific operating system, "
+"using CI you can specify tests to run both on various versions of Python "
+"and across different operating systems."
+msgstr ""
+
+#: ../../tests/tests-ci.md:5
+msgid ""
+"CI can also be triggered for pull requests and pushes to your repository."
+" This means that every pull request that you, your maintainer team or a "
+"contributor submit, can be tested. In the end CI testing ensures your "
+"code continues to run as expected even as changes are made to the code "
+"base."
+msgstr ""
+
+#: ../../tests/tests-ci.md:9
+msgid ""
+"Learn more about Continuous Integration and how it can be used, here. "
+"(add link)"
+msgstr ""
+
+#: ../../tests/tests-ci.md:13
+msgid "CI & pull requests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:15
+msgid ""
+"CI is invaluable if you have outside people contributing to your "
+"software. You can setup CI to run on all pull requests submitted to your "
+"repository. CI can make your repository more friendly to new potential "
+"contributors. It allows users to contribute code, documentation fixes and"
+" more without having to create development environments, run tests and "
+"build documentation locally."
+msgstr ""
+
+#: ../../tests/tests-ci.md:22
+msgid "Example GitHub Actions that runs tests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:24
+msgid ""
+"Below is an example GitHub Actions that runs tests using nox across both "
+"Windows, Mac and Linux and on Python versions 3.9-3.11."
+msgstr ""
+
+#: ../../tests/tests-ci.md:28
+msgid ""
+"To work properly, this file should be located in a root directory of your"
+" GitHub repository:"
+msgstr ""
+
+#: ../../tests/write-tests.md:1
+msgid "Write tests for your Python package"
+msgstr ""
+
+#: ../../tests/write-tests.md:3
+msgid ""
+"**Writing code** that tests your package code, also known as test suites,"
+" is important for you as a maintainer, your users, and package "
+"contributors. Test suites consist of sets of functions, methods, and "
+"classes that are written with the intention of making sure a specific "
+"part of your code works as you expected it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:9
+msgid "Why write tests for your package?"
+msgstr ""
+
+#: ../../tests/write-tests.md:11
+msgid ""
+"Tests act as a safety net for code changes. They help you identify and "
+"fix bugs before they affect users. Tests also instill confidence that "
+"code changes from contributors won't break existing functionality."
+msgstr ""
+
+#: ../../tests/write-tests.md:15
+msgid "Writing tests for your Python package is important because:"
+msgstr ""
+
+#: ../../tests/write-tests.md:17
+msgid ""
+"**Catch mistakes:** Tests are a safety net. When you make changes or add "
+"new features to your package, tests can quickly tell you if you "
+"accidentally broke something that was working fine before."
+msgstr ""
+
+#: ../../tests/write-tests.md:20
+msgid ""
+"**Save time:** Imagine you have a magic button that can automatically "
+"check if your package is still working properly. Tests are like that "
+"magic button! They can run all those checks for you, saving you time."
+msgstr ""
+
+#: ../../tests/write-tests.md:23
+msgid ""
+"**Easier collaboration:** If you're working with others or have outside "
+"contributors, tests help everyone stay on the same page. Your tests "
+"explain how your package is supposed to work, making it easier for others"
+" to understand and contribute to your project."
+msgstr ""
+
+#: ../../tests/write-tests.md:27
+msgid ""
+"**Fearless refactoring:** Refactoring means making improvements to your "
+"code structure without changing its behavior. Tests empower you to make "
+"these changes; if you break something, test failures will let you know."
+msgstr ""
+
+#: ../../tests/write-tests.md:30
+msgid ""
+"**Documentation:** Tests serve as technical examples of how to use your "
+"package. This can be helpful for new technical contributors who want to "
+"contribute code to your package. They can look at your tests to "
+"understand how parts of your code functionality fits together."
+msgstr ""
+
+#: ../../tests/write-tests.md:34
+msgid ""
+"**Long-term ease of maintenance:** As your package evolves, tests ensure "
+"that your code continues to behave as expected, even as you make changes "
+"over time. Thus you are helping your future self when writing tests."
+msgstr ""
+
+#: ../../tests/write-tests.md:38
+msgid ""
+"**Easier pull request reviews:** By running your tests in a CI framework "
+"such as GitHub Actions, each time you or a contributor makes a change to "
+"your code-base, you can catch issues and things that may have changed in "
+"your code base. This ensures that your software behaves the way you "
+"expect it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:44
+msgid "Tests for user edge cases"
+msgstr ""
+
+#: ../../tests/write-tests.md:46
+msgid ""
+"Edge cases refer to unexpected or \"outlier\" ways that some users may "
+"use your package. Tests enable you to address various edge cases that "
+"could impair your package's functionality. For example, what occurs if a "
+"function expects a pandas `dataframe` but a user supplies a numpy "
+"`array`? Does your code gracefully handle this situation, providing clear"
+" feedback, or does it leave users frustrated by an unexplained failure?"
+msgstr ""
+
+#: ../../tests/write-tests.md:55
+msgid ""
+"For a good introduction to testing, see [this Software Carpentry "
+"lesson](https://swcarpentry.github.io/python-novice-"
+"inflammation/10-defensive.html)"
+msgstr ""
+
+#: ../../tests/write-tests.md:59
+msgid "Test examples"
+msgstr ""
+
+#: ../../tests/write-tests.md:62
+msgid "Let's say you have a Python function that adds two numbers together."
+msgstr ""
+
+#: ../../tests/write-tests.md:84
+msgid ""
+"A test to ensure that function runs as you might expect when provided "
+"with different numbers might look like this:"
+msgstr ""
+
+#: ../../tests/write-tests.md:103
+msgid "🧩🐍 How do you know what type of tests to write?"
+msgstr ""
+
+#: ../../tests/write-tests.md:105
+msgid "As you begin to write tests for your package, you should consider:"
+msgstr ""
+
+#: ../../tests/write-tests.md:107
+msgid ""
+"there are [three types of tests Test Types for Python Packages](test-"
+"types.md) that can help guide your development."
+msgstr ""
+
+#: ../../tests/write-tests.md:108
+msgid ""
+"your tests should consider how a user might use (and misuse!) your "
+"package."
+msgstr ""
+
+#: ../../tests/write-tests.md:111
+msgid ""
+"This section has been adapted from [a presentation by Nick "
+"Murphy](https://zenodo.org/records/8185113)."
+msgstr ""
+
+#: ../../tests/write-tests.md:115
+msgid "But, what should you be testing in your package? Below are a few examples:"
+msgstr ""
+
+#: ../../tests/write-tests.md:118
+msgid ""
+"**Test some typical cases:** Test that the package functions as you "
+"expect it to when users use it. For instance, if your package is supposed"
+" to add two numbers, test that the outcome value of adding those two "
+"numbers is correct."
+msgstr ""
+
+#: ../../tests/write-tests.md:123
+msgid ""
+"**Test special cases:** Sometimes there are special or outlier cases. For"
+" instance, if a function performs a specific calculation that may become "
+"problematic closer to the value of 0, test it with the input of both 0 "
+"and nearby values."
+msgstr ""
+
+#: ../../tests/write-tests.md:128
+msgid ""
+"**Test at and near expected boundaries:** If a function requires a value "
+"that is greater than or equal to 1, make sure that the function still "
+"works with the values 1 and 0.999, as well as 1.001 (values close to the "
+"constraint). Make sure that the function fails gracefully when given "
+"unexpected values and that the user can easily understand why it failed "
+"by providing a useful error message."
+msgstr ""
+
+#: ../../tests/write-tests.md:138
+msgid ""
+"Now that you understand what and why to test, explore the [three types of"
+" tests](test-types.md) (unit, integration, and end-to-end) to determine "
+"which style of tests best fits your package. Then, learn how to [run your"
+" tests locally](run-tests.md) and [in continuous integration](tests-"
+"ci.md). Finally, track your progress with [code coverage](code-cov.md) "
+"metrics."
+msgstr ""
diff --git a/locales/bg/LC_MESSAGES/tutorials.po b/locales/bg/LC_MESSAGES/tutorials.po
new file mode 100644
index 000000000..8f36de362
--- /dev/null
+++ b/locales/bg/LC_MESSAGES/tutorials.po
@@ -0,0 +1,6885 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: bg\n"
+"Language-Team: bg \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tutorials/add-license-coc.md:6
+msgid "Add a `LICENSE` & `CODE_OF_CONDUCT` to your Python package"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:8
+msgid "In the [previous lesson](add-readme) you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:10
+msgid ""
+" "
+"Created a basic `README.md` file for your scientific Python package"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:12
+msgid ""
+" "
+"Learned about the core components that are useful to have in a `README` "
+"file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:14 ../../tutorials/add-readme.md:15
+msgid "Learning objectives"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:17 ../../tutorials/add-readme.md:17
+#: ../../tutorials/pyproject-toml.md:30
+msgid "In this lesson you will learn:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:19
+msgid ""
+"How to select a license and add a `LICENSE` file to your package "
+"repository, with a focus on the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:20
+msgid "How to add a `CODE_OF_CONDUCT` file to your package repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:21
+msgid ""
+"How you can use the Contributors Covenant website to add generic language"
+" as a starting place for your `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:24
+msgid "What is a license?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:26
+msgid ""
+"A license contains legal language about how users can use and reuse your "
+"software. To set the `LICENSE` for your project, you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:28
+msgid ""
+"Create a `LICENSE` file in your project directory that specifies the "
+"license that you choose for your package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:29
+msgid ""
+"Describe your choice of license in your `pyproject.toml` data where "
+"metadata are set."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:31
+msgid ""
+"By adding this metadata to your [pyproject.toml](pyproject-toml) file, "
+"the choice of license will be included in your package's metadata which "
+"is used to populate your package's PyPI landing page. The `LICENSE` file "
+"is also used in your GitHub repository's landing page interface, and "
+"makes its way into your distributions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:36
+msgid "What license should you use?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:38
+msgid ""
+"We suggest that you use a permissive license that accommodates the other "
+"most commonly used licenses in the scientific Python ecosystem (MIT[^mit]"
+" and BSD-3-Clause[^bsd3]). If you are unsure, use MIT given it's the "
+"generally recommended license on "
+"[choosealicense.com](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:41
+msgid "Licenses for the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:42
+msgid ""
+"[We discuss licenses for the scientific Python ecosystem in more detail "
+"here in our guidebook.](../documentation/repository-files/license-files)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:45
+msgid "Where should the `LICENSE` file live"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:47
+msgid ""
+"Your `LICENSE` file should be placed at the root of your package's "
+"repository. When you add the `LICENSE` at the root, GitHub will "
+"automagically discover it and provide users with a direct link to your "
+"`LICENSE` file within your GitHub repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:53
+msgid ""
+"Image showing the GitHub repository for SunPy an accepted pyOpenSci "
+"package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:55
+msgid ""
+"Notice at the top of the README portion of the GitHub landing page, there"
+" are three tabs directly linking to the `README` file which is visible, "
+"the `CODE_OF_CONDUCT` file and one that specifies the license that SunPy "
+"uses. These files are discovered by GitHub because they are placed in the"
+" root of the project directory using standard naming conventions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:62
+msgid "How to add a `LICENSE` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:64
+msgid "There are several ways to add a `LICENSE` file:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:66
+msgid ""
+"When you create a new repository on GitHub, it will ask you if you wish "
+"to add a `LICENSE` file at that time. If you select yes, it will create "
+"the file for you."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:67
+msgid ""
+"You can add a `LICENSE` through the GitHub gui following the [ instructions "
+"here](https://docs.github.com/en/communities/setting-up-your-project-for-"
+"healthy-contributions/adding-a-license-to-a-repository)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:68
+msgid "You can add the file manually as we are doing in this lesson."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:71
+msgid "If you completed the past lessons including"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:73
+msgid "[Making your code installable](create-python-package.md) and"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:74
+msgid "[publishing your package to PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:76
+msgid ""
+"then you already have a `LICENSE` file containing text for the MIT "
+"license in your Python package. Thus you can skip to the next section of "
+"this tutorial which walks you through adding a `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:78
+msgid ""
+"If you don't yet have a `LICENSE` file in your directory, then continue "
+"reading."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:81
+msgid "How to add a `LICENSE` to your package - the manual way"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:83
+msgid ""
+"If you don't already have a `LICENSE` file, and you are not yet using a "
+"platform such as GitHub or GitLab, then you can create a `LICENSE` file "
+"by"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:85
+msgid "Create a new file called `LICENSE`. If you are using shell you can type:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:92
+msgid "Go to [choosealicense.com](https://choosealicense.com/)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:93
+msgid "Select permissive license"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:94
+msgid ""
+"It will suggest that you use the [MIT "
+"license](https://choosealicense.com/licenses/mit/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:95
+msgid ""
+"Copy the license text that it provides into your `LICENSE` file that you "
+"created above."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:96
+msgid "Save your file. You're all done!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:98
+msgid "An overview of licenses in the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:101
+msgid ""
+"In the pyOpenSci [packaging guidebook](../documentation/repository-files"
+"/license-files), we provide an overview of licenses in the scientific "
+"Python ecosystem. We review why license files are important, which ones "
+"are most commonly used for scientific software and how to select the "
+"correct license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:103
+msgid ""
+"If you want a broad overview of why licenses are important for protecting"
+" open source software, [check out this blog post that overviews the legal"
+" side of things.](https://opensource.guide/legal/#just-give-me-the-tldr-"
+"on-what-i-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Instructions for adding a `LICENSE` file within the GitHub interface"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add license: new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:114
+msgid ""
+"When you create a new GitHub repository you can add a `LICENSE` file "
+"through the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:119
+msgid ""
+"Screenshot of the create new repository interface that GitHub provides. "
+"The elements of this are the owner and repository name for the new repo. "
+"Below that you can add a description of the repository. Below that you "
+"can set it to be public or private. At the bottom of the interface there "
+"is an Add a README checkbox where it will add a blank readme file for "
+"you. At the very bottom there is a line to add a .gitignore file and "
+"another to choose a license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:121
+msgid ""
+"Image showing the GitHub interface that allows you to add a `LICENSE` and"
+" `README` file when you create a new repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add `LICENSE`: Existing GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:127
+msgid ""
+"If you already have a GitHub repository for your package, then you can "
+"add a `LICENSE` using the GitHub interface by adding a new file to the "
+"repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:129
+msgid ""
+"Follow the instructions to select and add a license to your repository on"
+" the [GitHub LICENSE page](https://docs.github.com/en/communities"
+"/setting-up-your-project-for-healthy-contributions/adding-a-license-"
+"to-a-repository) ."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:130
+msgid ""
+"Once you have added your `LICENSE` file, be sure to sync your git local "
+"repository with the repository on GitHub.com. This means running `git "
+"pull` to update your local branch."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:133
+msgid ""
+"Image showing what the LICENSE file looks like in the GItHub interface. "
+"At the top you can see the actual license which in this image is BSD "
+"3-clause New or revised license. Then there is some text describing both "
+"what the license is and the associated permissions for that specific "
+"license. At the bottom of the image, the actual text for the license is "
+"shown in the LICENSE file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:135
+msgid ""
+"You can view a summary of the `LICENSE` chosen on your project's GitHub "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:142
+msgid ""
+"Now you know how to add a `LICENSE` to your project. Next, you'll learn "
+"about the `CODE_OF_CONDUCT.md` file and how to add it to your package "
+"directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:147
+msgid "What is a code of conduct file?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:149
+#, python-brace-format
+msgid ""
+"A `CODE_OF_CONDUCT` file is a {term}`Code of conduct` used to establish "
+"guidelines for how people in your community interact."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:152
+msgid ""
+"This file is critical to supporting your community as it grows. The "
+"`CODE_OF_CONDUCT`:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:155
+msgid ""
+"Establishes guidelines for how users and contributors interact with each "
+"other and you in your software repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:156
+msgid "Identifies negative behaviors that you don't want in your interactions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:158
+msgid ""
+"You can use your code of conduct as a tool that can be referenced when "
+"moderating challenging conversations."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:160
+msgid "What to put in your `CODE_OF_CONDUCT` file"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:162
+msgid ""
+"If you are unsure of what language to add to your `CODE_OF_CONDUCT` file,"
+" we suggest that you adopt the [contributor covenant "
+"language](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/) as a starting place."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid "Contributor Covenant"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:167
+msgid ""
+"The `CODE_OF_CONDUCT.md` should be placed at the root of your project "
+"directory, similar to the `LICENSE` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:169
+msgid "How to add a `CODE_OF_CONDUCT` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:171
+msgid ""
+"Add a `CODE_OF_CONDUCT.md` file to the root of your repository if it "
+"doesn't already exist."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:177
+msgid ""
+"Visit the [contributor covenant website](https://www.contributor-"
+"covenant.org/) and add [the markdown version of their code of "
+"conduct](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/code_of_conduct.md) to your "
+"`CODE_OF_CONDUCT.md` file. Be sure to fill in any placeholder "
+"information. Read the text closely to ensure you both understand it and "
+"also agree with its contents!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:179
+msgid "That's it - you've now added a code of conduct to your package directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:181
+msgid "Additional Code of Conduct resources"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:184
+msgid ""
+"[ Guide: `CODE_OF_CONDUCT.md` "
+"files](https://docs.github.com/en/communities/setting-up-your-project-"
+"for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:185
+msgid ""
+"[pyOpenSci package guide `CODE_OF_CONDUCT.md` "
+"overview](https://www.pyopensci.org/python-package-guide/documentation"
+"/repository-files/code-of-conduct-file.html)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:188 ../../tutorials/add-readme.md:240
+#: ../../tutorials/publish-conda-forge.md:475
+#: ../../tutorials/pyproject-toml.md:699
+msgid " Wrap up"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:190
+msgid "In this lesson and the [last lesson](add-readme), you have added a:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:192
+msgid "`README` file;"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:193
+msgid "`LICENSE` file and a"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:194
+msgid "`CODE_OF_CONDUCT` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:196
+msgid ""
+"These are fundamental files needed for every scientific Python package "
+"repository. These files help users understand how to use your package and"
+" interact with package maintainers."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:200
+#: ../../tutorials/create-python-package.md:455
+msgid "In the upcoming lessons, you will:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:202
+msgid ""
+"[Add more metadata to your `pyproject.toml` file](pyproject-toml) to "
+"support building and publishing your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:203
+msgid ""
+"Publish a new version of your Python package to the test PyPI to preview "
+"the updated metadata landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:208
+#: ../../tutorials/create-python-package.md:550
+#: ../../tutorials/publish-conda-forge.md:487
+#: ../../tutorials/publish-pypi.md:419
+#: ../../tutorials/trusted-publishing.md:347
+msgid "Footnotes"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:210
+msgid "https://opensource.org/license/mit/"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:211
+msgid "https://opensource.org/license/bsd-3-clause/"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:6
+#, python-brace-format
+msgid "Add a {term}`README` file to your {term}`Python package`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:8
+msgid "In the previous lessons you learned:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:10
+msgid "[What a Python package is](intro.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:11
+msgid "[How to make your code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:12
+msgid "[How to publish your package to (test) PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:13
+msgid "[How to publish your package to conda-forge](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:19
+msgid "How to add a **README.md** file to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:20
+msgid "What the core elements of a **README.md** file are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:23
+msgid "What is a README file?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:25
+#, python-brace-format
+msgid ""
+"The `README.md` file is the project's {term}`README` and is located at "
+"the root of your project directory. It helps a user understand:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:29
+msgid "You package's name"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:30
+msgid ""
+"What the package does. Your README file should clearly state the "
+"problem(s) that your software is designed to solve and its target "
+"audience."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:31
+msgid "The current development \"state\" of the package (through badges)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:32
+msgid "How to get started with using your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:33
+msgid "How to contribute to your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:34
+msgid "How to cite your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:36
+msgid ""
+"Your **README.md** file is important as it is often the first thing that "
+"someone sees before they install your package. The README file is also "
+"used to populate your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:38
+msgid ""
+"Note that there is no specific content structure for README files. "
+"However, this tutorial outlines the sections that we suggest that you "
+"include in your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:42
+msgid "Create a README.md file for your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:44
+msgid "It's time to add a `README.md` file to your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:46
+msgid "Step 0: Create a README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:47
+msgid ""
+"To get started, if you don't already have a README.md file in your "
+"project directory, create one."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:50
+msgid "If you created your project directory from"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:52
+msgid "a GitHub repository online"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:53
+msgid "using `hatch init`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:55
+msgid "Then you may already have a README.MD file in your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:61
+msgid "Step 1: Add the name of your package as the README title"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:63
+msgid "At the top of the `README.md` file, add the name of your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:65
+msgid ""
+"If you are using markdown it should be a header 1 (H1) tag which is "
+"denoted with a single `#` sign."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:67
+msgid "`# Package-title-here`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:69
+msgid "Step 2: add badges to the top of your README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:71
+msgid ""
+"It's common for maintainers to add badges to the top of their README "
+"files. Badges allow you and your package users to track things like:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:73
+msgid "Broken documentation and test builds."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:74
+msgid "Versions of your package that are on PyPI and conda."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:75
+msgid ""
+"Whether your package has been reviewed and vetted by an organization such"
+" as pyOpenSci and/or JOSS."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:77
+msgid ""
+"If you have already published your package to pypi.org you can use "
+"[shields.io to create a package version badge](https://shields.io/badges"
+"/py-pi-version). This badge will dynamically update as you release new "
+"versions of your package to PyPI."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:79
+msgid ""
+"If not, you can leave the top empty for now and add badges to your README"
+" at a later point as they make sense."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:81
+msgid "Step 3: Add a description of what your package does"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:83
+msgid ""
+"Below the badges (if you have them), add a section of text that provides "
+"an easy-to-understand overview of what your package does."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:87
+msgid "Keep this section short."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:88
+msgid "Try to avoid jargon."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:89
+msgid ""
+"Define technical terms that you use to make the description accessible to"
+" more people."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:91
+msgid ""
+"Remember that the more people understand what your package does, the more"
+" people will use it."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:93
+msgid "Step 4: Add package installation instructions"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:95
+msgid "Next, add instructions that tell users how to install your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:97
+#, python-brace-format
+msgid ""
+"For example, can they use {term}`pip` to install your package? `python -m"
+" pip install packagename`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:100
+msgid "or conda?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:102
+msgid "`conda install -c conda-forge packagename`."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:104
+msgid ""
+"If you haven't yet published your package to pypi.org then you can skip "
+"this section and come back and add these instructions later."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:108
+msgid "Step 5: Any additional setup"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:110
+msgid ""
+"In some cases, your package users may need to manually install other "
+"tools in order to use your package. If that is the case, be sure to add a"
+" section on additional setup to your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:115
+msgid ""
+"Here, briefly document (or link to documentation for) any additional "
+"setup that is required to use your package. This might include:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:119
+msgid "authentication information, if it is applicable to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:120
+msgid "additional tool installations, such as GDAL."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:123
+msgid ""
+"Many packages won't need an additional setup section in their README. In "
+"that case you can always skip this section."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:128
+msgid "Step 6: Add a get started section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:130
+msgid ""
+"Next add a get-started section. Within this section, add a small code "
+"example that demonstrates importing and using some of the functionality "
+"in your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:133
+msgid "Provide a fully functional code snippet if possible"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:136
+msgid ""
+"It is important to try to make the code examples that you provide your "
+"users as useful as possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:138
+msgid ""
+"Be sure to provide a copy/paste code example that will work as-is when "
+"pasted into a Jupyter Notebook or .py file if that is possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:140
+msgid ""
+"If there are tokens and other steps needed to run your package, be sure "
+"to be clear about what those steps are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:143
+msgid "For the pyosPackage, a short get started demo might look like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:151
+msgid ""
+"Or it could simply be a link to a getting started tutorial that you have "
+"created. If you don't have this yet, you can leave it empty for the time "
+"being."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:154
+msgid ""
+"This would also be a great place to add links to tutorials that help "
+"users understand how to use your package for common workflows."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:159
+msgid "Step 7: Community section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:161
+msgid ""
+"The community section of your README file is a place to include "
+"information for users who may want to engage with your project. This "
+"engagement will likely happen on a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:163
+msgid ""
+"In the community section, you will add links to your contributing guide "
+"and `CODE_OF_CONDUCT.md`. You will create a code of conduct file in the "
+"[next lesson](add-license-coc)."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:167
+msgid ""
+"As your package grows you may also have a link to a development guide "
+"that contributors and your maintainer team will follow. The development "
+"guide outlines how to perform maintenance tasks such as:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:170
+msgid "running tests"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:171
+msgid "making package releases"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:172
+msgid "building documentation"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:173
+msgid "and more."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:177
+msgid "Step 8: Citation information"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:179
+msgid ""
+"Finally it is important to let users know how to cite your package. You "
+"can communicate citation information in a few different ways."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:182
+msgid ""
+"You can use a tool such as zenodo to create a DOI and associated citation"
+" information for your package if it is hosted on a platform such as "
+"GitHub. [Check out this short tutorial that covers setting that "
+"up.](https://coderefinery.github.io/github-without-command-line/doi/)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:186
+msgid ""
+"Alternatively if you send your package through a peer review process such"
+" as the [one lead by pyOpenSci](https://www.pyopensci.org/about-peer-"
+"review/index.html). After being accepted by pyOpenSci, if your package is"
+" in scope, you can be accepted by the Journal of Open Source Software and"
+" get a cross-ref DOI through [our partnership with the Journal of Open "
+"Source Software.](https://www.pyopensci.org/about-peer-review/index.html)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:190
+msgid "The finished README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:192
+msgid "Your finished `README.md` file should look something like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:242
+msgid ""
+"It's important to consider the information that a new user or contributor"
+" might need when creating your `README.md` file. While there is no "
+"perfect template, above is a set of recommendations as you are just "
+"getting started. You may find the need for other elements to be added to "
+"this file as you further develop your package and as a community begins "
+"to use your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:248
+msgid ""
+"In the [next lesson](add-license-coc.md), you will add a LICENSE file to "
+"your Python package. A license file is critical as it tells users how "
+"they legally can (and can't) use your package. It also:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:252
+msgid "Builds trust with your users"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:253
+msgid "Discourages misuse of your package and associated code"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:63
+msgid "Command Line Reference Guide"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:9
+msgid ""
+"**What these tables are:** These tables summarize the command line inputs"
+" (e.g., `pipx install hatch`, `hatch build` or `python -m build`) "
+"necessary to complete all steps in the package creation process, from "
+"installing [Hatch](get-to-know-hatch) to publishing the package on [PyPI"
+"](publish-pypi) and conda-forge."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:14
+#, python-brace-format
+msgid ""
+"**What these tables are not:** These tables do not cover the manual or "
+"non-automated steps (e.g., create a PyPI account, create a {term}`API "
+"token`) you have to complete throughout the package creation process."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:18
+msgid ""
+"**Operating system note:** The current iteration of this guide has been "
+"tested on the Windows OS only. Many commands are Windows-specific. OS-"
+"specific commands are indicated with parentheses after the description of"
+" the command, e.g., [COMMAND_DESCRIPTION] (Windows). Corresponding "
+"commands for macOS and Linux will be added in the future."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:21
+msgid "Environment Setup"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:43
+msgid "Package Development"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:62
+msgid "Package Publishing"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:81
+msgid "Versions and Environments"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:7
+msgid "Create a pure Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:9
+#: ../../tutorials/develop-python-package-hatch.md:9
+msgid "About this lesson"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:13
+#, python-brace-format
+msgid ""
+"This lesson uses the pyOpenSci Python package copier template to create a"
+" {term}`Python package` quickly. Your package will be installable both "
+"locally and remotely from a website such as GitHub (or GitLab) into a "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:18
+#: ../../tutorials/setup-py-to-pyproject-toml.md:23
+msgid "In this lesson, you will learn:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:20
+msgid ""
+"How to make your code installable into any Python environment, both "
+"locally and from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:21
+msgid ""
+"How to update a [pyproject.toml file](pyproject-toml), which contains the"
+" metadata needed to build, install, and publish your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:23
+#, python-brace-format
+msgid ""
+"How to declare a {term}`Build backend` which will be used to [build"
+"](build-package) and install your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:25
+msgid "How to install your package in editable mode for interactive development"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:28
+msgid "**What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:30
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have "
+"[Copier](https://copier.readthedocs.io/en/stable/) and [Hatch installed"
+"](get-to-know-hatch) to complete the lesson successfully."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:35
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the Carpentries shell lesson[^shell-lesson]. Windows users will"
+" likely need to configure a tool such as "
+"[gitbash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:41
+msgid ""
+"This diagram has two smaller boxes with arrows pointing to the right to a"
+" Python environment. The small boxes read your-package and pip install "
+"package. The environment box on the right reads - your Python "
+"environment. It them lists your-package along with a few other core "
+"packages such as Matplotlib, NumPy, Pandas, Xarray and GeoPandas."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:43
+msgid ""
+"In a [previous lesson, you learned what a Python package is](intro). "
+"Creating a Python package allows you to install your code into any Python"
+" environment on your computer. You can then import it into workflows in "
+"the same way that you might import a package such as Pandas or GeoPandas."
+" If you push your code to GitHub or GitLab, you can also install it "
+"directly from there. [Scroll to the bottom of the page to learn more "
+"about the basic elements of a Python package.](package-overview)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:49
+msgid "Create your Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:51
+msgid ""
+"Below, you will create a pure Python package using the [pyOpenSci copier "
+"template](https://github.com/pyOpenSci/pyos-package-template). Our "
+"template uses Hatch as the default packaging tool. At the bottom of this "
+"lesson, you'll learn more about the basics of the Python package "
+"directory structure, and associated key files (`__init__.py` and "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:53
+msgid "Step 1: Set Up the Package Directory Structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:55
+msgid "Open your shell or preferred terminal."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:56
+msgid ""
+"Use the shell `cd` command to navigate in your shell to the location "
+"where you'd like your package to live. Our template will create the "
+"package directory structure for you"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:57
+msgid "Choose a name for your package. The name should:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:58
+msgid "Have no spaces (*Required*)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:59
+msgid ""
+"Use all lowercase characters (*Recommended*). For this tutorial, we will "
+"use `pyospackage`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:60
+msgid ""
+"Only use letters and the characters _ or - in the name. This means that "
+"the name `pyos*package` is not an acceptable name. However, the names "
+"`pyos_package` or `pyos-package` are both OK."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:62
+msgid ""
+"In your terminal, **run the command below**. This will begin a series of "
+"prompts that will ask you questions and help you to customize your Python"
+" package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:68
+msgid ""
+"After running the command above, the template will walk you through a "
+"series of questions."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:70
+msgid ""
+"Note that when you reach the prompt \"Do you want to answer one more "
+"question, and skip the rest, using the default values?\" you can choose "
+"Yes, but with a minimal setup to create the most basic version"
+" of your package that contains documentation, tests and a example module "
+"for you to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:72
+msgid ""
+"After this question, the template will ask you for your preferred GitHub "
+"username and will then create a package with basic tests, documentation, "
+"and GitHub configuration setup for you."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:93
+msgid ""
+"The template will then begin to copy files into the directory that used "
+"above. (`.` means current working directory.)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:101
+msgid "The final package structure will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md
+msgid "A full package with tests, docs, and GitHub infrastructure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:119
+msgid ""
+"If you use the \"bells and whistles\" default option when working through"
+" the template prompts, our template will create a complete package setup "
+"with GitHub CI actions, typing, tests, environments, and more using "
+"Hatch. If you customize the entire package, then you can select what "
+"platform you wish to host it on (GitHub vs GitLab), whether you want "
+"typing, what documentation engine you want to use, and more."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:123
+msgid "The resulting package directory looks like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:146
+msgid "The default tools that your package uses are:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:148
+msgid ""
+"[Sphinx](https://www.pyopensci.org/python-package-guide/documentation"
+"/hosting-tools/sphinx-python-package-documentation-tools.html) with the "
+"PyData Sphinx Theme for documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:149
+msgid "pytest for testing"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:150
+msgid "Hatch for environment setup"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:152
+msgid ""
+"**Full customization** If you want to customize any elements of your "
+"package setup, choose `No, I want to fully customize the template.`. "
+"This will allow you to select:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:155
+msgid "Sphinx vs [MkDocs](https://www.mkdocs.org/) vs no documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:156
+msgid "GitHub vs GitLab"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:157
+msgid "VCS versioning"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:158
+msgid "and more"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:161
+msgid "Step 2: Explore the existing module in your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:163
+#, python-brace-format
+msgid ""
+"A {term}`Module` refers to a `.py` file containing the code that you want"
+" your package to access and run. Within the `pyospackage` subdirectory, "
+"you have an `example.py` module that you can use to test out your package"
+" quickly."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:167
+msgid "Notice that the code in the example.py module, has a few features:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:169
+msgid "It has a [numpy-style docstring](numpy-docstring)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:170
+msgid "It uses [typing](type-hints)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:171
+msgid ""
+"At the top of the module, there is a docstring explaining what the module"
+" does."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:173
+msgid ""
+"Python supports different docstring formats. The most popular formats for"
+" documenting Python objects are NumPy Style Docstring[^numpydoc], Google "
+"Style Docstring[^googledoc], and the Epytext Style "
+"Docstrings[^epytextdoc]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:175
+msgid "**pyOpenSci recommends using the NumPy Docstring convention.**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:177
+msgid ""
+"[Learn more about docstrings here](api-docstrings) for an overview of "
+"both topics."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:206
+msgid "Python modules and the `__init__.py` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:210
+msgid "The word module refers to a `.py` file containing Python code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:212
+msgid ""
+"The `__init__.py` allows Python to recognize that a directory contains "
+"at least one module that may be imported and used in your code. A package"
+" can have multiple modules[^python-modules]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:217
+msgid "Step 3: Optional -- Add code to your module"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:219
+msgid ""
+"If you want, add a second function to the `example.py` module. It can be "
+"a simple function. For example, write a second function that multiplies "
+"numbers."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:222
+msgid "Step 4: Check out the metadata in your `pyproject.toml` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:224
+msgid ""
+"A [pyproject.toml](pyproject-toml) file stores metadata that provides "
+"instructions to various tools interacting with it, including [Hatch](get-"
+"to-know-hatch), which will build your package. You can also specify "
+"metadata for your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:229
+msgid ""
+"You will learn more about the `pyproject.toml` format in the [next lesson"
+" when you add additional metadata/information to this file.](pyproject-"
+"toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:232
+msgid ""
+"The metadata in your generated `pyproject.toml` is already setup for you "
+"using the information you provided the copier template above."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:234
+msgid "Brief overview of the TOML file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:237
+msgid ""
+"[The TOML format](https://toml.io/en/) consists of tables and variables. "
+"Tables are sections of information denoted by square brackets:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:239
+msgid "`[this-is-a-table]`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:241
+msgid ""
+"Tables can contain variables within them defined by a variable name and "
+"an `=` sign. For instance, a `build-system` table most often holds two "
+"(2) variables:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:244
+msgid ""
+"`requires = `, which tells a build tool what tools it needs to install "
+"prior to building your package. In this case "
+"[hatchling](https://pypi.org/project/hatchling/)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:246
+msgid ""
+"`build-backend = `, which is used to define the specific build-backend "
+"name, (in this example we are using `hatchling.build`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:255
+msgid ""
+"TOML organizes data structures, defining relationships within a "
+"configuration file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:258
+msgid "[Learn more about the pyproject.toml format here.](pyprojecttoml-metadata)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:261
+msgid ""
+"Open up the `pyproject.toml` file that Hatch created in your favorite "
+"text editor. It should look something like the example below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:262
+msgid ""
+"Make sure the package version, package name, and author name look "
+"correct. The email is optional."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:300
+msgid ""
+"At the bottom of the template-generated `pyproject.toml` file, you will "
+"see a section that defines Hatch environments. We will cover Hatch "
+"environments in a later lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:302
+msgid "The bare minimum needed in a pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:305
+msgid ""
+"The core information that you need in a `pyproject.toml` file to publish "
+"on PyPI is your **package's name** and the **version**. However, we "
+"suggest that you flesh out your metadata early on in the `pyproject.toml`"
+" file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:307
+msgid ""
+"Once you have your project metadata in the `pyproject.toml` file, you "
+"will rarely update it."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:311
+msgid "Step 5: Install your package locally"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:313
+msgid "At this point, you should have:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:315
+msgid "A project directory structure with a `pyproject.toml` file at the root"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:316
+msgid "A package directory containing an empty `__init__.py` file and"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:317
+msgid "At least one Python module (e.g. `example.py`)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:319
+msgid "You are now ready to install (and build) your Python package!"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:321
+msgid ""
+"While you can do this using Hatch, we will use pip for this lesson, so "
+"you can see how to install your tool into your preferred environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:323
+msgid ""
+"First, open your preferred shell (Windows users may use something like "
+"GitBash) and `cd` into your project directory if you are not already "
+"there."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:324
+msgid "Activate the Python environment that you wish to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:325
+msgid "Run `python -m pip install -e .`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:327
+#: ../../tutorials/create-python-package.md:560
+#: ../../tutorials/create-python-package.md:567
+#: ../../tutorials/get-to-know-hatch.md:199 ../../tutorials/intro.md:246
+#: ../../tutorials/publish-pypi.md:9 ../../tutorials/publish-pypi.md:185
+#: ../../tutorials/publish-pypi.md:358 ../../tutorials/pyproject-toml.md:744
+msgid "Todo"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:328
+msgid "Add this back in when the lesson is published"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:329
+msgid ""
+"Activate the Python environment that you wish to use. If you need help "
+"with working with virtual environments check out this lesson (add link)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:355
+msgid "What does `python -m pip install -e .` do?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:358
+msgid ""
+"`python -m pip install -e .` installs your package into the current "
+"active Python environment in **editable mode** (`-e`). Installing your "
+"package in editable mode, allows you to work on your code and then test "
+"the updates interactively in your favorite Python interface. One "
+"important caveat of editable mode is that every time you update your "
+"code, you need to restart Python."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:363
+msgid ""
+"If you wish to install the package regularly (not in editable mode) you "
+"can use:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:366
+msgid "`python -m pip install . `"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:368
+msgid "**Using `python -m` when calling `pip`**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:370
+msgid ""
+"Above, you use`python -m` to call the version of pip installed into your "
+"current active environment. `python -m` is important to ensure that you "
+"are calling the version of pip installed in your current environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:374
+msgid ""
+"IMPORTANT: pip can also be used to install packages from PyPI. However, "
+"in this case, you are telling pip to install your package from a local "
+"folder by using the `.`. You could also specify a path to the project "
+"directory on your computer instead of the `.` which tells pip to use the "
+"current working directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:377
+msgid "Look for pyospackage in your environment"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:379
+msgid ""
+"Once you have installed your package, you can view it in your current "
+"environment. If you are using `venv` or `conda`, `pip` list will return a"
+" list of packages in the current active environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:383
+msgid ""
+"Note that because `pyospackage` is installed in editable mode (`-e`), pip"
+" will show you the directory path to your project's code"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:411
+msgid "Step 6: Test out your new package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:413
+msgid ""
+"After installing your package, type “python” at the command prompt in "
+"your chosen terminal to start a Python session in your active Python "
+"environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:416
+msgid "You can now import your package and access the `add_numbers` function."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:428
+msgid "Installing packages from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:430
+msgid ""
+"If you wish to share your code without publishing to PyPI you can always "
+"install packages directly from GitHub using the syntax:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:437
+msgid "To make your package GitHub installable, you can:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:439
+msgid "Create a new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:440
+msgid ""
+"Push the contents of the project directory that you created above, to "
+"GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:441
+msgid ""
+"Finally install the package from GitHub using the command above. When you"
+" use the command above, don't forget to substitute the user, repo, and "
+"branch_or_tag with your specific values."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:443
+msgid ""
+"For instance below you install the pyospackage from the main branch of "
+"the pyOpenSci repository."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:446
+msgid "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:450
+msgid "Congratulations! You created your first Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:452
+msgid ""
+"You have now created a Python package that you can install into any "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:457
+msgid ""
+"Add a [README file](add-readme.md) and [LICENSE](add-license-coc.md) to "
+"your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:458
+msgid ""
+"[Add more metadata to your `pyproject.toml`](pyproject-toml.md) file to "
+"support PyPI publication."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:459
+msgid ""
+"[Learn how to build your package distribution](publish-pypi) files "
+"(**sdist** and **wheel**) and publish to **test PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:460
+msgid ""
+"Finally you will learn how to [publish to **conda-forge**](publish-conda-"
+"forge) from **PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:464
+msgid "About the Python package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:466
+msgid ""
+"To make your Python code installable you need to create a specific "
+"directory structure with the following elements:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:468
+msgid "A `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:469
+msgid "A specific directory structure."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:470
+msgid "Some code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:471
+msgid "An `__init__.py` file in your code directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:473
+msgid "The directory structure you'll create in this lesson will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:488
+msgid ""
+"Diagram showing the basic steps to creating an installable package. There"
+" are 4 boxes with arrows pointing towards the right. The boxes read, your"
+" code, create package structure, add metadata to pyproject.toml and pip "
+"install package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:490
+msgid ""
+"Once you have the basic items of a Python package (code, metadata and a "
+"file structure), you can `pip install` your package into any Python "
+"environment on your computer."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:493
+msgid "About the basic package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:495
+msgid "Notice a few things about the above layout:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:497
+msgid ""
+"Your package code lives within a `src/packagename` directory. We suggest "
+"that you use `src` (short for **source code**) directory as it [ensures "
+"that you are running tests on the installed version of your "
+"code](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/python-package-structure.html#the-src-layout-and-testing)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:498
+msgid ""
+"Within the `src` directory you have a package directory called "
+"`pyospackage`. Use the name of your package for that directory name. This"
+" will be the name for importing your package in Python code once "
+"installed."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:499
+msgid ""
+"In your package directory, you have an `__init__.py` file and all of your"
+" Python modules. You will learn more about the `__init__.py` file below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:500
+msgid "The `pyproject.toml` file lives at the root directory of your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:501
+msgid ""
+"The name of the root directory for the package is **pyospackage** which "
+"is the name of the package. This is not a requirement but you will often "
+"see that the GitHub / GitLab repository and the root directory name are "
+"the same as the package name."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:503
+msgid "What is an `__init__.py` file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:505
+msgid ""
+"The `__init__.py` file tells Python that a directory should be treated as"
+" a Python package. As such, a directory with an `__init__.py` file can be"
+" imported directly into Python. The `__init__.py` file does not need to "
+"contain any code in order for Python to recognize it; it can be empty."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:509
+msgid ""
+"For example, following the file structure example above which has an "
+"`__init__.py` file within it, you can run:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:515
+#: ../../tutorials/pyproject-toml.md:56
+msgid "What is a pyproject.toml file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:517
+msgid "The **pyproject.toml** file is:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:519
+msgid ""
+"Where you define your project's metadata (including its name, authors, "
+"license, etc)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:520
+msgid "Where you define dependencies (the packages that it depends on)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:521
+msgid ""
+"Used to specify and configure what build backend you want to use to "
+"[build your package](../package-structure-code/python-package-"
+"distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:523
+msgid ""
+"After the `__init__.py` and `pyproject.toml` files have been added, your "
+"package can be built and distributed as an installable Python package "
+"using tools such as pip. Note that the `pyproject.toml` file needs to "
+"have a few basic items defined for the package to be installable "
+"including:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:529
+msgid "The `build-backend` that you want to use,"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:530
+msgid "The project `name` and `version`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:532
+msgid "Why the pyproject.toml file is important"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:535
+msgid ""
+"The `pyproject.toml` file replaces some of the functionality of both the "
+"`setup.py` file and `setup.cfg` files. If you try to pip install a "
+"package with no `pyproject.toml`, you will get the following error:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:545
+msgid ""
+"If your project already has a `setup.py` file, Hatch can be used to "
+"automatically create a `pyproject.toml`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:546
+msgid ""
+"See [Using Hatch to Migrate setup.py to a pyproject.toml](setup-py-to-"
+"pyproject-toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:561
+msgid ""
+"Is it clear where to add commands? Bash vs. Python console Bash vs. Zsh "
+"is different"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:563
+msgid ""
+"ADD: note about what makes something \"package worthy\", with a common "
+"misconception being that a package should be production-ready code that's"
+" valuable to a broad audience. This may not be a pervasive misconception "
+"in Python, but a quick break-out with an explanation of what a package "
+"can consist of would be helpful."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:564
+msgid "They can use a codespace to complete this lesson too."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:568
+msgid ""
+"When this lesson exists, uncomment this admonition You will learn how to "
+"automate defining a package version using git tags in the version and "
+"release your package lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:552
+msgid "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:556
+msgid "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:555
+msgid "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:557
+msgid "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:554
+msgid ""
+"[Python module "
+"docs](https://docs.python.org/3/tutorial/modules.html#packages)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:7
+msgid "Use Hatch environments with your pure Python package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:13
+msgid ""
+"[In a previous lesson](create-pure-python-package), you learned how to "
+"create a Python package using the pyOpenSci copier template. In this "
+"lesson, you'll learn how to manage and use the Hatch environments set up "
+"by de **What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:16
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have created a package using "
+"our pyOpenSci copier template. You should also have [Hatch installed"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:20
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the [Carpentries shell lesson](https://swcarpentry.github.io"
+"/shell-novice/). Windows users will likely need to configure a tool such "
+"as [GitBash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:23
+msgid ""
+"Welcome to your shiny new package! This page will help you get started "
+"with using [Hatch](get-to-know-hatch) to run tests, build and check your "
+"package, and build your documentation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:27
+#, python-brace-format
+msgid ""
+"To begin, have a look at the [pyproject.toml](pyproject-toml) file in "
+"your package directory. This file contains the configuration for your "
+"package and is written using {term}`TOML` format. Here's the TL&DR:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:31
+msgid "Each `[]` section in the toml file is called a table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:32
+msgid "You can nest tables with double brackets like this`[[]]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:33
+msgid ""
+"Tables contain information about a certain thing that you want to "
+"configure."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:36
+msgid ""
+"You can configure Hatch to use UV by default for environment management. "
+"UV is a package manager built in Rust. It is fast and will significantly "
+"speed up environment creation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:38
+msgid ""
+"To use UV with Hatch, configure Hatch in the \"tools\" section of your "
+"`pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:46
+msgid ""
+"Using Hatch for developing, building, and maintaining your pure Python "
+"package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:48
+#, python-brace-format
+msgid ""
+"In the pyOpenSci Python package template, we have set up {term}`Hatch "
+"environment` definitions. You will notice at the bottom of the file, a "
+"[hatch environment](https://hatch.pypa.io/1.13/environment/) section, "
+"that looks like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:59
+msgid ""
+"Hatch allows you to configure and run environments and scripts similar to"
+" a workflow tool like tox or nox."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:62
+msgid ""
+"Hatch defaults to using `venv` to manage environments. However, you can "
+"configure it to use other environment tools, such as conda or mamba."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:64
+msgid ""
+"[Read the hatch documentation to learn more about environments. "
+"](https://hatch.pypa.io/1.13/tutorials/environment/basic-usage/)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:68
+msgid ""
+"Below is the Hatch environment used to build and test your package. "
+"Anytime you see: `tool.hatch.envs.test`, it tells Hatch:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:71
+msgid ""
+"\"Hey, Hatch, this is the definition for an environment.`test` is the "
+"name of the environment that I want you to create.\""
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:73
+msgid "So `tool.hatch.envs.build` will create an environment called `build`."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:75
+msgid ""
+"Below the environment \"declaration,\" you can see the definition of what"
+" should be in that environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:77
+msgid "A Hatch environment to build your package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:79
+#, python-brace-format
+msgid ""
+"Below is a Hatch environment definition that you will find in your new "
+"project's [pyproject.toml](pyproject-toml) file. It is set up to build "
+"your package's {term}`Distribution files` ({term}`Source distribution "
+"(sdist)` and {term}`Wheel (.whl)`)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:84
+#, python-brace-format
+msgid ""
+"Notice that the environment definition declares two {term}`Dependencies`:"
+" `pip` and `twine`, which the environment needs to run successfully. This"
+" declaration is similar to declaring dependencies for your package at the"
+" top of your [pyproject.toml](pyproject-toml)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:99
+msgid "Hatch will install your package in editable mode by default"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:100
+msgid ""
+"Notice the `detached = True` flag at the bottom of the environment. By "
+"default, hatch will install your package in editable mode into any "
+"environment it creates. `detached=True` tells it not to install your "
+"package into the environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:104
+msgid "Hatch scripts"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:106
+#, python-brace-format
+msgid ""
+"Hatch supports defining {term}`Script (Hatch)` commands that run in "
+"specific Hatch environments."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:109
+msgid ""
+"Above, you have defined a new environment called 'build' that Hatch will "
+"create as a virtual environment (venv). Because `detached = True` in that"
+" environment, Hatch won't install your package into it."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:111
+msgid ""
+"You can then use that environment to run \"scripts\". The definition "
+"below tells Hatch to run the following scripts in the build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:113
+msgid "`[tool.hatch.envs.build.scripts]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:115
+msgid "You define this `scripts` to run using the following syntax, where:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:117
+msgid "`tool.hatch`: Alerts Hatch that this table is for Hatch to use"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:118
+msgid "`envs.build`: Use the defined build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:119
+msgid ""
+"`scripts`: Define what scripts to run. In this case, Hatch will run shell"
+" scripts."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:122
+msgid ""
+"Below is the `build.scripts` table that defines 3 shell commands to be "
+"run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:124
+msgid "`pip check` # verifies your dependencies"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:125
+msgid "`hatch build --clean` # build your packages distribution files."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:126
+msgid ""
+"`twine check dist/*` # use twine to check that your package's sdist "
+"(source distribution) is ok."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:140
+msgid ""
+"Hatch, by default, will install your package in editable mode into any "
+"virtual environment (venv) that it creates. If `detached=True` is set, "
+"then it will skip that step."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:143
+msgid "Running the build script"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:145
+msgid "You can run the build script and build your package like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:147
+msgid "`hatch run build:check`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:149
+msgid ""
+"This step updates the build environment and then builds and checks the "
+"output distributions of your package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:151
+msgid "You can enter the build environment in your shell to check it out:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:157
+msgid "If you run `pip list` in the environment, twine will be there:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:163
+#: ../../tutorials/develop-python-package-hatch.md:221
+msgid "To leave the environment use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:169
+msgid "Hatch, testing, and matrix environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:171
+msgid ""
+"It's always helpful to run your tests on the Python versions that you "
+"expect your users to be using. In this section, you'll explore the test "
+"environment setup in the pyOpenSci template package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:173
+msgid "Below, you see the Hatch environment test table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:175
+msgid ""
+"Similar to the above build environment, the environment below defines the"
+" dependencies that Hatch needs to install into the test environment "
+"(required to run your tests)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:189
+msgid "Your test environment has a matrix associated with it"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:191
+msgid ""
+"If the environment has a matrix associated with it, that tells Hatch to "
+"run the tests across different Python versions. Below, you are running "
+"tests on versions 3.10 through 3.13."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:194
+msgid ""
+"Hatch by default will install Python [using "
+"UV](https://docs.astral.sh/uv/guides/install-python/) both when you "
+"install Hatch and also when you declare a matrix environment like the one"
+" below"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:202
+msgid ""
+"In your project, if you run `hatch shell test`, you will see the output "
+"below. This means that because there is a matrix of Python versions to "
+"choose from, you need to select the environment with the Python version "
+"you want to use."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:215
+msgid ""
+"Pick the Python test environment that you want to use and enter it, like "
+"this (this will open Python 3.13):"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:227
+msgid "Hatch scripts for tests"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:229
+msgid ""
+"In that same tests section, you will see a `tool.hatch.envs.test.scripts`"
+" section. Similar to what you saw above with the build steps, this is "
+"where the \"script\" to run your tests is defined."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:232
+msgid ""
+"Notice that below, the script has a script called `run`. And that script "
+"runs pytest with a set of arguments, including generating code coverage."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:239
+msgid "To run this script in your terminal, use the syntax:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:241
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:243
+msgid "Reminder"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:246
+msgid ""
+"`hatch run`: this calls hatch and tells it that it will be running a "
+"command"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:247
+msgid ""
+"`test:run` defines the environment you want it to run (`test`) in this "
+"case, and the script is defined as `run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:250
+msgid ""
+"If you have a matrix setup for tests, then it will both install the "
+"needed Python version using UV and run your tests in each version of the "
+"Python environment. In this case, since there are four Python versions in"
+" the environment, your tests will be run four times, once in each Python "
+"version listed in the matrix table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:280
+msgid "Build your documentation with Hatch environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:282
+msgid ""
+"Finally, you can build and serve your documentation using hatch. To build"
+" a static HTML version of the docs run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:285
+msgid "`hatch run docs:build`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:287
+msgid ""
+"To run a local server with your docs updated as you update your markdown "
+"files, run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:289
+msgid "`hatch run docs:serve`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:291
+msgid "To stop serving the docs use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:293
+msgid "mac: ctrl + c windows:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:6
+msgid "Get to Know Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:8
+msgid ""
+"Our Python packaging tutorials use Hatch. While there are [many great "
+"packaging tools](/package-structure-code/python-package-build-tools) out "
+"there, we have selected Hatch because:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:13
+msgid ""
+"It is an end-to-end tool that supports most of the steps required to "
+"create a quality Python package. Beginners will have fewer tools to learn"
+" if they use Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:16
+#, python-brace-format
+msgid ""
+"It supports different {term}`Build backend` options if you ever need to "
+"compile code in other languages."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:18
+msgid ""
+"As a community, pyOpenSci has decided that Hatch is a user-friendly tool "
+"that supports many different scientific Python use cases."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:21
+msgid ""
+"In this tutorial, you will install and get to know Hatch a bit more "
+"before starting to use it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:24
+msgid "You need two things to successfully complete this tutorial:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:26
+msgid "You need Python installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:27
+msgid "You need Hatch installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:30
+msgid ""
+"If you don't already have Python installed on your computer, Hatch will "
+"do it for you when you install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:34
+msgid "Install Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:36
+msgid ""
+"To begin, follow the operating-system-specific instructions below to "
+"install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "MAC"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:43
+msgid ""
+"Follow the instructions "
+"[here](https://hatch.pypa.io/latest/install/#installers)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:45
+msgid ""
+"Download the latest GUI installer for MAC [hatch-"
+"universal.pkg](https://github.com/pypa/hatch/releases/latest/download"
+"/hatch-universal.pkg)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:46
+msgid "Run the installer and follow the setup instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:47
+msgid "If your terminal is open, then restart it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Windows"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:53
+msgid ""
+"In your browser, download the correct `.msi` file for your system: "
+"[hatch-x64.msi](https://github.com/pypa/hatch/releases/latest/download/hatch-x64.msi)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:55
+msgid "Run your downloaded installer file and follow the on-screen instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Linux"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:61
+msgid ""
+"We suggest that you install Hatch using pipx on Linux. however, if you "
+"prefer another method, check out the [Hatch installation "
+"documentation](https://hatch.pypa.io/latest/install/) for other methods."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:75
+#, python-brace-format
+msgid ""
+"Hatch can also be installed directly using {term}`pip` or "
+"[conda](https://hatch.pypa.io/latest/install/#conda). We encourage you to"
+" follow the instructions above because we have found that the Hatch "
+"installers for Windows and Mac are the easiest and most efficient."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:80
+msgid ""
+"Our Linux users have found success installing Hatch with pipx if they "
+"already use apt install."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:83
+msgid ""
+"Both approaches (using a graphical installer on Windows/Mac and pipx) "
+"ensure that you have Hatch installed globally. A global install means "
+"that Hatch is available across all of your Python environments on your "
+"computer."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:88
+msgid "Check that hatch installed correctly"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:90
+msgid ""
+"Once you have completed the installation instructions above, you can open"
+" your terminal, and make sure that Hatch installed correctly using the "
+"command below:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:98
+msgid ""
+"*Note the version number output of `hatch --version` will likely be "
+"different from the output above in this tutorial.*"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:101
+msgid "Configure Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:103
+msgid ""
+"Once you have installed Hatch, you can customize its configuration. This "
+"includes setting the default name and setup for every package you create."
+" While this step is not required, we suggest that you do it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:107
+msgid ""
+"Hatch stores your configuration in a [`config.toml` "
+"file](https://hatch.pypa.io/latest/config/project-templates/)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:109
+msgid ""
+"While you can update the `config.toml` file through the command line, it "
+"might be easier to look at and update it in a text editor if you are "
+"using it for the first time."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:113
+msgid "Step 1: Open and Edit Your `config.toml` File"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:115
+msgid ""
+"To open the config file in your file browser, run the following command "
+"in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:118
+msgid "`hatch config explore`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:120
+msgid ""
+"This will open up a directory window that allows you to double-click on "
+"the file and open it in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:123
+msgid ""
+"You can also retrieve the location of the Hatch config file by running "
+"the following command in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:131
+msgid "Step 2 - update your email and name"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:133
+msgid ""
+"Once the file is open, update the [template] table of the `config.toml` "
+"file with your name and email. This information will be used in any "
+"[pyproject.toml](pyproject-toml) metadata files that you create using "
+"Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:144
+msgid "Step 3"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:146
+msgid "Next, set tests to false in the `[template.plugins.default]` table."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:148
+msgid ""
+"While tests are important, setting the tests configuration in Hatch to "
+"`true` will create a more complex `pyproject.toml` file. You won't need "
+"to use this feature in this beginner friendly tutorial series but we will"
+" introduce it in later tutorials."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:153
+msgid "Your `config.toml` file should look something like the one below."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:191
+msgid ""
+"Also notice that the default license option is MIT. While we will discuss"
+" license in more detail in a later lesson, the MIT license is the "
+"recommended permissive license from "
+"[choosealicense.com](https://choosealicense.com/) and as such we will use"
+" it for this tutorial series."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:197
+msgid "You are of course welcome to select another license."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:200
+msgid ""
+"I think we'd need the SPDX license options here if they want to chose "
+"bsd-3 for instance"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:203
+msgid "Step 4: Close the config file and run `hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:205
+msgid ""
+"Once you have completed the steps above run the following command in your"
+" shell."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:207
+msgid "`hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:209
+msgid ""
+"`hatch config show` will print out the contents of your `config.toml` "
+"file in your shell. Look at the values and ensure that your name, email "
+"is set. Also make sure that `tests=false`."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:213
+msgid "Hatch features"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:215
+msgid ""
+"Hatch offers a suite of features that will make creating, publishing and "
+"maintaining your Python package easier."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:218
+msgid "Comparison to other tools"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:220
+msgid ""
+"[We compared Hatch to several of the other popular packaging tools in the"
+" ecosystem including flit, pdm and poetry. Learn more here](package-"
+"features)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:223
+msgid "[More on Hatch here](hatch)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:225
+msgid "A few features that Hatch offers"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:227
+msgid ""
+"It will convert metadata stored in a `setup.py` or `setup.cfg` file to a "
+"pyproject.toml file for you (see [Migrating setup.py to pyproject.toml "
+"using Hatch](setup-py-to-pyproject-toml.md ))"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:229
+msgid ""
+"It will help you by storing configuration information for publishing to "
+"PyPI after you've entered it once."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:231
+msgid "Use `hatch -h` to see all of the available commands."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:233
+msgid "What's next"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:235
+msgid ""
+"In the next lesson you'll learn how to package and make your code "
+"installable using Hatch."
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/setup-py-to-pyproject-toml.md:36
+msgid "Get to know Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/run-python-scripts-hatch.md:8
+msgid "Run standalone Python scripts with Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34
+msgid "Python Packaging Tutorial Setup"
+msgstr ""
+
+#: ../../tutorials/intro.md:42 ../../tutorials/intro.md:89
+msgid "What is a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish using GitHub Actions and Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create and publish a Python Package"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Develop package (Hatch environments)"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add README file"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add a license & code of conduct"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Update metadata in pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Project information files & metadata"
+msgstr ""
+
+#: ../../tutorials/intro.md:63
+msgid "Reference Guides"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Migrate setup.py to a pyproject.toml using Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Hatch for Existing Packages"
+msgstr ""
+
+#: ../../tutorials/intro.md:7
+msgid "Python packaging 101"
+msgstr ""
+
+#: ../../tutorials/intro.md:9
+msgid "_A start to finish beginner-friendly tutorial_"
+msgstr ""
+
+#: ../../tutorials/intro.md:11
+#, python-brace-format
+msgid ""
+"Welcome to the pyOpenSci Python packaging tutorial series. The lessons on"
+" the upcoming pages walk you through the core steps needed to create a "
+"{term}`Python package`."
+msgstr ""
+
+#: ../../tutorials/intro.md:17
+msgid ""
+"Diagram showing the lessons in our packaging tutorial. There are 6 total "
+"- what is a Python package, make code pip installable, publish your "
+"package to PyPI, add a README and LICENSE file, add metadata for PyPI and"
+" finally publish to conda forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:19 ../../tutorials/trusted-publishing.md:258
+msgid ""
+"This lesson is the first in a series of lessons to help you get started "
+"with Python packaging."
+msgstr ""
+
+#: ../../tutorials/intro.md:22
+msgid "Who are these tutorials for?"
+msgstr ""
+
+#: ../../tutorials/intro.md:24
+msgid ""
+"The content in this tutorial series is beginner friendly and assumes that"
+" you have not created a Python package before. However, the content will "
+"still be valuable if you are interested in better understanding the steps"
+" involved in creating a Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:29
+msgid ""
+"In this series you will learn about the core elements that you need to "
+"publish your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/intro.md:32
+msgid ""
+"In the second series, you will learn about infrastructure and "
+"documentation needed to support package maintenance."
+msgstr ""
+
+#: ../../tutorials/intro.md:77 ../../tutorials/publish-conda-forge.md:22
+#: ../../tutorials/publish-pypi.md:20 ../../tutorials/pyproject-toml.md:27
+#: ../../tutorials/setup-py-to-pyproject-toml.md:20
+#: ../../tutorials/trusted-publishing.md:13
+msgid "Learning Objectives"
+msgstr ""
+
+#: ../../tutorials/intro.md:79
+msgid ""
+"This lesson introduces you to the basic components of a Python package. "
+"After reading this lesson you will:"
+msgstr ""
+
+#: ../../tutorials/intro.md:82
+msgid "Understand what a Python package is"
+msgstr ""
+
+#: ../../tutorials/intro.md:83
+msgid "Be able to list the 5 core components of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:84
+msgid ""
+"Be able to explain the difference between generalizable code and code "
+"that supports a specific scientific application"
+msgstr ""
+
+#: ../../tutorials/intro.md:91
+msgid ""
+"At a high level, you can think about a Python package as a toolbox that "
+"you can use to perform various tasks."
+msgstr ""
+
+#: ../../tutorials/intro.md:94
+#, python-brace-format
+msgid ""
+"A Python package is basically a directory with a specific file structure."
+" Within the package directory structure, there are {term}`Module` objects"
+" which are files that end in `.py` (the same extension you'd see in a "
+"Python script). These modules allow you to group and structure your "
+"Python code. Each module contains functions and classes, that you can "
+"think about as the tools in your toolbox."
+msgstr ""
+
+#: ../../tutorials/intro.md:103
+msgid ""
+"Diagram showing a sketch of a toolbox filled with different tools "
+"including a hammer and a saw."
+msgstr ""
+
+#: ../../tutorials/intro.md:105
+msgid ""
+"You can think about a package as a toolbox filled with coding tools. A "
+"tool may be a function or a class. Each tool does a specific thing well."
+msgstr ""
+
+#: ../../tutorials/intro.md:110
+msgid "Python packages are installable"
+msgstr ""
+
+#: ../../tutorials/intro.md:112
+msgid ""
+"A package is installable, which means that you can add the functionality "
+"within the package's code to any Python environment and import that "
+"functionality like you would import core scientific Python packages such "
+"as NumPy or Matplotlib."
+msgstr ""
+
+#: ../../tutorials/intro.md:121
+msgid ""
+"Installing a package into an environment makes it easier to manage and "
+"reuse your code across different projects. Structuring your code as a "
+"package is the first step you need to take so you can share the tools in "
+"the toolbox you've created and let others build with it."
+msgstr ""
+
+#: ../../tutorials/intro.md:126
+msgid "Why create a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:128
+msgid "You might create a Python package because you want to:"
+msgstr ""
+
+#: ../../tutorials/intro.md:130
+msgid ""
+"**Use your code across different projects:** At its most basic level, "
+"creating a package allows you to install your code into a Python "
+"environment. This allows you to then import functions and classes into "
+"any workflows both locally and in the cloud."
+msgstr ""
+
+#: ../../tutorials/intro.md:131
+#, python-brace-format
+msgid ""
+"**Share your code:** If you publish a package on a public repository such"
+" as PyPI or conda-forge, your package can be installed on any machine "
+"using {term}`pip` or conda with a single command."
+msgstr ""
+
+#: ../../tutorials/intro.md:134
+msgid ""
+"**Build community around your code:** Packages make it easier for "
+"multiple people to work on the same project (particularly when published "
+"on GitHub). A version control system such as git (the system used by "
+"GitHub), further makes it easier to track changes to the codebase over "
+"time. Tools such as issues and pull requests make it easier for outside "
+"users to contribute bug fixes and to establish review processes for "
+"accepting changes to the code base."
+msgstr ""
+
+#: ../../tutorials/intro.md:135
+msgid ""
+"**Organize your code:** Packages can be used to organize large code "
+"projects, dividing them into smaller, more manageable components. This "
+"structure can help with both maintaining the codebase and with making it "
+"easier to understand."
+msgstr ""
+
+#: ../../tutorials/intro.md:137
+msgid "What to consider before you create a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:139
+msgid ""
+"Creating a Python package that others use takes considerable time and "
+"effort. Before you begin, think about your goals including:"
+msgstr ""
+
+#: ../../tutorials/intro.md:142
+msgid "Who you think will use your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:143
+msgid "How people might use your package and on what data (if data are relevant)"
+msgstr ""
+
+#: ../../tutorials/intro.md:144
+msgid "Whether you have time to add things such as documentation and tests"
+msgstr ""
+
+#: ../../tutorials/intro.md:145
+msgid ""
+"How long you might be able to maintain it: remember that once people "
+"begin using your package they will depend on your maintainer team to "
+"update it, fix bugs and answer questions."
+msgstr ""
+
+#: ../../tutorials/intro.md:147
+msgid ""
+"Before creating a user-facing package, it's important to consider all of "
+"the above."
+msgstr ""
+
+#: ../../tutorials/intro.md:149
+msgid "The elements of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:153 ../../tutorials/intro.md:231
+msgid "Diagram showing .. more here if this stays."
+msgstr ""
+
+#: ../../tutorials/intro.md:155
+msgid ""
+"The elements of a Python package include code, documentation, tests, an "
+"OSI-approved license and infrastructure. Maintainers are at the core "
+"making sure everything works and is up to date while fixing bugs and "
+"addressing user concerns."
+msgstr ""
+
+#: ../../tutorials/intro.md:161
+msgid "The core elements of Python package include:"
+msgstr ""
+
+#: ../../tutorials/intro.md:163
+msgid ""
+"**Code:** Functions and classes that provide functionality for a user of "
+"your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:164
+msgid ""
+"**Documentation:** Installation instructions, tutorials, and examples "
+"that both help users get started using your package and contributors and "
+"maintainers fix bugs and maintain the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:165
+msgid ""
+"Contributor Documentation in the form of a **CONTRIBUTING.md** file is "
+"useful to help people to contribute to your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:166
+msgid ""
+"Development Documentation helps both maintainers and contributors "
+"understand how to maintain a package's infrastructure."
+msgstr ""
+
+#: ../../tutorials/intro.md:167
+msgid ""
+"**Tests:** that make sure your code works as it should and makes it "
+"easier for you and others to contribute to, modify and update the code in"
+" the future"
+msgstr ""
+
+#: ../../tutorials/intro.md:168
+msgid ""
+"**License:** An open source license, or license that is [OSI "
+"approved](https://opensource.org/license/), refers to an license that "
+"allows others to use your package. It also provides legal direction "
+"regarding how elements of the package can and can't be reused."
+msgstr ""
+
+#: ../../tutorials/intro.md:169
+msgid ""
+"**Infrastructure** that automates updates, publication workflows and runs"
+" test suites. Infrastructure includes a suite of things such as platforms"
+" like GitHub and GitLab, tools to run tests and tools locally such as nox"
+" and tox and continuous integration that automates package maintenance "
+"steps."
+msgstr ""
+
+#: ../../tutorials/intro.md:171
+msgid "What pyOpenSci looks for in a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:174
+msgid ""
+"pyOpenSci performs an [initial set of editor "
+"checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-"
+"chief-guide.html#editor-checklist-template) for any package submitted to "
+"us for peer review. You may find these checks useful as you create your "
+"package as a baseline for things that you package should have."
+msgstr ""
+
+#: ../../tutorials/intro.md:180
+msgid "Packages are more than just code - Infrastructure"
+msgstr ""
+
+#: ../../tutorials/intro.md:182
+msgid ""
+"A package in any language is more than just code. If you expect other "
+"people to use your package, besides yourself, you should consider not "
+"only writing high quality code, but also the various elements of a "
+"package that make it a useful community resource."
+msgstr ""
+
+#: ../../tutorials/intro.md:187
+msgid "Version control and storing your package on GitHub or GitLab"
+msgstr ""
+
+#: ../../tutorials/intro.md:189
+msgid ""
+"Most Python packages live in an online version control platform such as "
+"GitHub or GitLab. GitHub and GitLab both run [git](https://git-scm.com/) "
+"for version control. Having your software under version control is "
+"important because it allows you to both track changes over time while "
+"also going back in history and undoing changes in the case that a change "
+"to the code base unexpectedly breaks something."
+msgstr ""
+
+#: ../../tutorials/intro.md:194
+msgid ""
+"By publishing your package on GitHub or GitLab, you are making your code "
+"public facing. This means that others can both see your code and also "
+"make contributions using a pull request (GitHub) / merge request (GitLab)"
+" / code review workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:196
+msgid "GitHub & GitLab vs. Git"
+msgstr ""
+
+#: ../../tutorials/intro.md:199
+msgid ""
+"GitHub and GitLab are online (cloud) platforms that run `git` (version "
+"control software) on the backend. Running git locally on your computer "
+"allows you to upload (`git push`) and download (`git pull`) files to "
+"GitHub and GitLab."
+msgstr ""
+
+#: ../../tutorials/intro.md:204
+msgid "Issues or Ticket Trackers"
+msgstr ""
+
+#: ../../tutorials/intro.md:206
+msgid ""
+"GitHub and GitLab also both offer community features such as issues that "
+"allow:"
+msgstr ""
+
+#: ../../tutorials/intro.md:208
+msgid "you to communicate with your maintainers and contributor community"
+msgstr ""
+
+#: ../../tutorials/intro.md:209
+msgid "users to report bugs, ask questions and request new features"
+msgstr ""
+
+#: ../../tutorials/intro.md:210
+msgid ""
+"you to publicly keep track of enhancements and features you want to work "
+"on for your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:212
+msgid "Continuous integration and continuous deployment"
+msgstr ""
+
+#: ../../tutorials/intro.md:214
+msgid ""
+"GitHub and GitLab also provide continuous integration and continuous "
+"deployment (CI/CD). Continuous integration (CI) refers to a platform that"
+" automatically runs a specific job when a certain event occurs, whereas "
+"continuous deployment (CD) is an extension of CI that refers to not only "
+"running or building but also to publishing the final outputs somewhere."
+msgstr ""
+
+#: ../../tutorials/intro.md:216
+msgid "**An example of Continuous integration:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:218
+msgid ""
+"When someone submits a change to your code, your tests will run across "
+"different operating systems and the code will be checked for format "
+"issues."
+msgstr ""
+
+#: ../../tutorials/intro.md:220
+msgid "**An example of Continuous deployment:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:222
+msgid ""
+"When you are ready to release your package to PyPI, a continuous "
+"deployment operation might be triggered on release to publish your "
+"package to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:224
+msgid ""
+"Integrated CI/CD will help you maintain your software, ensuring that "
+"changes to the code don't break things unexpectedly. They can also help "
+"you maintain code style and format consistency for every new change to "
+"your code."
+msgstr ""
+
+#: ../../tutorials/intro.md:233
+msgid "The lifecycle of a scientific Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:236
+msgid "When should you turn your code into a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:238
+msgid ""
+"You may be wondering, what types of code should become a Python package "
+"that is both on GitHub and published to PyPI and/or conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:240
+msgid "There are a few use cases to consider:"
+msgstr ""
+
+#: ../../tutorials/intro.md:242
+msgid ""
+"**Creating a basic package for yourself:** Sometimes you want create a "
+"package for your own personal use. This might mean making your code "
+"locally pip installable and you may also want to publish it to GitHub. In"
+" that case you don't expect others to use your code, and as such you may "
+"only have documentation for you and your future self if you need to "
+"update the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:244
+msgid ""
+"An example of this type of package might be a set of functions that you "
+"write that are useful across several of your projects. It could be useful"
+" to have those functions available to all of your projects."
+msgstr ""
+
+#: ../../tutorials/intro.md:247
+msgid "LINK to pip installable lesson when it's published - it's in review now"
+msgstr ""
+
+#: ../../tutorials/intro.md:250
+msgid ""
+"**Creating a package for the community:** In other cases, you may create "
+"some code that you soon realize might also be useful to not just you, but"
+" to other people as well. In that case, you might consider both creating "
+"the package, publishing it on GitHub, and because other users may be "
+"using it, you may make use of GitHub's infrastructure including CI/CD "
+"pipelines and issue trackers. Because you want other people to use your "
+"package, you will want to also include LICENSE information, documentation"
+" for users and contributors and tests. This type of package is most often"
+" published to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:253
+msgid ""
+"For example, all of the [pyOpenSci packages](https://www.pyopensci.org"
+"/python-packages.html) are public facing with an intended audience beyond"
+" just the maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:255
+msgid "Packages that you expect others to use should be well-scoped"
+msgstr ""
+
+#: ../../tutorials/intro.md:257
+msgid ""
+"Ideally the code in your Python package is focused on a specific theme or"
+" use case. This theme is important as it's a way to scope the content of "
+"your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:259
+msgid ""
+"It can be tricky to decide when your code becomes something that might be"
+" more broadly useful to others. But one question you can ask yourself is "
+"- is your code written specifically for a single research project? Or "
+"could it have a broader application across multiple projects in your "
+"domain?"
+msgstr ""
+
+#: ../../tutorials/intro.md:261
+msgid "How does this relate to code for a research project?"
+msgstr ""
+
+#: ../../tutorials/intro.md:264
+msgid ""
+"A [Research Compendium](https://book.the-turing-way.org/reproducible-"
+"research/compendia.html) is an organized set of code, data and "
+"documentation that supports a specific research project. It aims to "
+"enhance the reproducibility and transparency of research by providing a "
+"comprehensive record of the methods, data, and analyses used in a study."
+msgstr ""
+
+#: ../../tutorials/intro.md:269
+msgid ""
+"A Python package is a collection of modules that can be used to perform a"
+" specific set of tasks. These tasks should be applicable to numerous "
+"workflows. As such a Python package is more generalizable than a Research"
+" Compendium which supports a specific project."
+msgstr ""
+
+#: ../../tutorials/intro.md:274
+msgid ""
+"[Read about `Good enough practices in scientific "
+"computing`](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510)"
+msgstr ""
+
+#: ../../tutorials/intro.md:275
+msgid ""
+"[Learn more about research compendia (also called repo-packs) in this "
+"blog post.](https://lorenabarba.com/blog/how-repro-packs-can-save-your-"
+"future-self/)"
+msgstr ""
+
+#: ../../tutorials/intro.md:278
+msgid "Below are a few examples well scoped pyOpenSci packages:"
+msgstr ""
+
+#: ../../tutorials/intro.md:280
+msgid ""
+"[Crowsetta](https://crowsetta.readthedocs.io/en/latest/): is a package "
+"designed to work with annotating animal vocalizations and bioacoustics "
+"data. This package helps scientists process different types of "
+"bioacoustic data rather than focusing on a specific individual research "
+"application associated with a user-specific research workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:281
+msgid ""
+"[Pandera](https://www.union.ai/pandera) is another more broadly used "
+"Python package. Pandera supports data testing and thus also has a broader"
+" research application."
+msgstr ""
+
+#: ../../tutorials/intro.md:283
+msgid "Matplotlib as an example"
+msgstr ""
+
+#: ../../tutorials/intro.md:285
+msgid ""
+"At the larger end of the user spectrum, Matplotlib is a great example. "
+"Matplotlib does one thing really well:"
+msgstr ""
+
+#: ../../tutorials/intro.md:288
+msgid "_It creates visual plots of data._"
+msgstr ""
+
+#: ../../tutorials/intro.md:290
+msgid ""
+"Thousands of people use Matplotlib for different plotting applications "
+"using different types of data. While few scientific packages will have "
+"the same broad application and large user base that Matplotlib has, the "
+"idea of scoping out what your package does is still important."
+msgstr ""
+
+#: ../../tutorials/intro.md:296
+msgid "Code should also be clean & readable & documented"
+msgstr ""
+
+#: ../../tutorials/intro.md:298
+msgid ""
+"The code in your package should also be clean, readable, and well "
+"documented."
+msgstr ""
+
+#: ../../tutorials/intro.md:300
+msgid ""
+"**Clean code:** Clean code refers to code that uses expressive variable "
+"names, is concise and doesn't repeat itself. You can learn about best "
+"practices for clean code in future pyOpenSci tutorials."
+msgstr ""
+
+#: ../../tutorials/intro.md:304
+msgid ""
+"**Readable code:** readable code is code written with a consistent style."
+" You can use linters and code formatters such as black and flake8 to "
+"ensure this consistency throughout your entire package. [Learn more about"
+" code formatters here.](../package-structure-code/code-style-linting-"
+"format)"
+msgstr ""
+
+#: ../../tutorials/intro.md:308
+msgid ""
+"**Documented code:** documented code is written using docstrings that "
+"help a user understand both what the functions and methods in your code "
+"do and also what the input and output elements of each function are. [You"
+" can learn more about docstrings in our guide, here.](../documentation"
+"/write-user-documentation/document-your-code-api-docstrings)"
+msgstr ""
+
+#: ../../tutorials/intro.md:312
+msgid "Making your package installable - publishing to PyPI & conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:314
+msgid "Python packages and environments"
+msgstr ""
+
+#: ../../tutorials/intro.md:316
+msgid ""
+"You can install a Python package into a Python environment in the same "
+"way you might install NumPy or Pandas. Installing your package into an "
+"environment allows you to access it from any code run with that specific "
+"Python environment activated."
+msgstr ""
+
+#: ../../tutorials/intro.md:322
+msgid ""
+"Diagram showing the steps associated with creating a package and then "
+"installing it. The first arrow says your package and the second says pip "
+"install package. The second arrow leads to a box that represents a Python"
+" environment that already has some packages installed such as Pandas and "
+"NumPy. Your package will also get installed into that same environment "
+"when you pip install it."
+msgstr ""
+
+#: ../../tutorials/intro.md:324
+msgid ""
+"You don't have to publish to PyPI to make your code installable. With the"
+" correct file structure and project metadata you can make your code "
+"installable locally on your computer and use it for projects that you are"
+" working on without having to ever publish to PyPI. Publishing to PyPI is"
+" useful when you want to make your code public-facing and share it with "
+"others."
+msgstr ""
+
+#: ../../tutorials/intro.md:331
+msgid "Publishing a package to PyPI / Conda-Forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:333
+msgid ""
+"If you want to make your package directly installable without having to "
+"download the code to your computer locally then you need to publish it in"
+" a repository such as **PyPI** or **conda-forge**."
+msgstr ""
+
+#: ../../tutorials/intro.md:337
+msgid ""
+"Learn [how to publish your package to PyPI in this tutorial.](publish-"
+"pypi.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:339
+msgid ""
+"Then you can create a conda-forge recipe using the "
+"[Grayskull](https://github.com/conda/grayskull) tool. You can then submit"
+" this recipe to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:341
+msgid ""
+"[You will learn more about the conda-forge publication process here"
+".](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:344
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:346
+msgid ""
+"In the image above, you can see the steps associated with publishing your"
+" package on PyPI and conda-forge. PyPI supports [sdist](#python-source-"
+"distribution) and [wheel](#python-wheel) files. Once you are ready to "
+"make your code publicly installable, you can publish it on PyPI. Once "
+"your code is on PyPI it is straight forward to then publish to conda-"
+"forge. You create a recipe using the Grayskull package and then you open "
+"a pr in the conda-forge recipe repository. You will learn more about this"
+" process in the [conda-forge lesson](/tutorials/publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/intro.md:350
+msgid "Yay, your package has users! Now what?"
+msgstr ""
+
+#: ../../tutorials/intro.md:352
+msgid ""
+"As the community using your package grows, you may also find yourself "
+"managing users, contributors, and others who want to interact with your "
+"package. It’s important to consider all this before you dive into "
+"development. Once you have a user base in the community, people will "
+"depend upon your code to work and will need direction regarding how to "
+"use it."
+msgstr ""
+
+#: ../../tutorials/intro.md:354
+msgid "To support your community, you'll want to add things like:"
+msgstr ""
+
+#: ../../tutorials/intro.md:356
+msgid ""
+"[a development guide that documents your maintainer workflow process "
+"](/documentation/repository-files/development-guide.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:357
+msgid ""
+"[a code of conduct to defines community interaction standards and "
+"expectations](/documentation/repository-files/code-of-conduct-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:358
+msgid ""
+"[a contributing guide that helps users understand expectations associated"
+" with making contributions to your project](/documentation/repository-"
+"files/contributing-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:360
+msgid "Support for contributors and maintainers"
+msgstr ""
+
+#: ../../tutorials/intro.md:362
+msgid ""
+"If you intend for others to use and contribute to your code, consider who"
+" will maintain it over time. You will want a **contributing and "
+"development** guide to help new potential contributors get started with "
+"contributing to your package, as well as a **code of conduct** to ensure "
+"community interactions remain healthy both for you and your contributors "
+"and maintainer team."
+msgstr ""
+
+#: ../../tutorials/intro.md:364
+msgid ""
+"The elements above are also important for future maintenance of your "
+"package. In the case that you are no long able to maintain it or simply "
+"want extra help, development, and contributing documentation will help "
+"you onboard new maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:369
+msgid "What's next?"
+msgstr ""
+
+#: ../../tutorials/intro.md:371
+msgid ""
+"In future lessons you will learn more about the infrastructure around a "
+"published Python package that makes it both easier to maintain, easier "
+"for others to contribute to and easier for other scientists to use. "
+"However, first we want to get you to your initial goal of publishing a "
+"Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:373
+msgid ""
+"In this next lesson you will learn how to create a basic installable "
+"Python package. Make your code pip installable "
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:6
+msgid "Publish your Python package that is on PyPI to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:8
+msgid "In the previous lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:10
+msgid ""
+"How to [create the most basic version of a Python package](create-python-"
+"package.md). This entailed making your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:11
+msgid "[How to publish your Python package to PyPI](publish-pypi)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:12
+msgid "How to add a `README` and `LICENSE` file to your package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:13
+msgid ""
+"How to setup your [pyproject.toml](pyproject-toml) file with all of the "
+"metadata that PyPI requires and also metadata that will be helpful for "
+"users to find your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:17
+msgid ""
+"If you have gone through all of the above lessons, you are now ready to "
+"publish your package on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:20
+msgid ""
+"**IMPORTANT:** Please do not practice publishing your package to conda-"
+"forge. You should only publish to conda-forge when you have a package on "
+"pypi.org that you plan to maintain."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:26 ../../tutorials/publish-pypi.md:24
+msgid "In this lesson you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:28
+msgid "Create a conda-forge yaml recipe for your package using Grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:29
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:30
+msgid ""
+"Maintain your conda-forge package by creating new releases for your "
+"package on PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:33
+#, python-brace-format
+msgid ""
+"Once your package is on PyPI you can then easily publish it to conda-"
+"forge using the [grayskull](https://conda.github.io/grayskull/) tool. You"
+" do not need to build the package specifically for conda, conda-forge "
+"will build from your PyPI {term}`Source distribution (sdist)` file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:41
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:43
+#, python-brace-format
+msgid ""
+"Once you have published both package distributions (the {term}`Source "
+"distribution (sdist)` and the {term}`Wheel (.whl)`) to PyPI, you can then"
+" publish to conda-forge. Conda-forge requires a source distribution on "
+"PyPI in order to build your package on conda-forge. You do not need to "
+"rebuild your package to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:50
+msgid "What is conda-forge?"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:52
+msgid ""
+"conda is an open source package and environment management tool that can "
+"be used to install tools from the different channels on Anaconda.org."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:55
+msgid ""
+"You can think about a channel as a specific location where a group of "
+"packages are stored and can be installed from using a command such as "
+"`conda install packagename`. In the case of conda channels, some of these"
+" channels such as the `defaults` channel, is managed by Anaconda (the "
+"company). Only Anaconda can decide what packages are available in the "
+"`defaults` channel. However, the conda-forge (and bioconda) channel are "
+"community-managed channels. Anyone can submit a package to these channels"
+" however they must pass a technical review in the [staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes) to be "
+"published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:58
+msgid "[Learn more about conda channels here.](#about-conda)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:62
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the Anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI and test PyPI (a "
+"testbed server for you to practice)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:64
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:67
+msgid "Why publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:69
+msgid ""
+"There are many users, especially in the scientific Python ecosystem that "
+"use conda as their primary package manager / environment tool. Thus, "
+"having packages available to these users on the conda-forge channel is "
+"useful. In some cases packages on conda-forge can minimize dependency "
+"conflicts that can occur when mixing installations using pip and conda. "
+"This is particularly important for the spatial ecosystem."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:71
+msgid "How publishing to conda-forge works"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:73
+msgid ""
+"Once you have built and published your package to PyPI, you have "
+"everything that you need to publish to conda-forge. There is no "
+"additional build step needed to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:75
+msgid ""
+"Conda-forge will build your package from the source distribution which "
+"you [published to PyPI in the previous lesson](publish-pypi) using the "
+"recipe that you will create below."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:77
+msgid "Conda-forge publication steps"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:80
+msgid ""
+"Image showing the steps associated with publishing to conda-forge. Check "
+"out the caption below for a detailed description."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:82
+msgid ""
+"The steps for publishing to conda-forge begin with publishing your Python"
+" package to PyPI. Once you have published to PyPI you can then create a "
+"yaml file recipe that can be submitted to the conda-forge staged recipes "
+"repository for review. Once that recipe is accepted, your package will "
+"get it's on repository (known as a feedstock) on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:85
+msgid "The steps to publish to conda-forge are:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:87
+msgid "Publish your Python package distribution files (sdist & wheel) to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:88
+msgid ""
+"Create a conda-forge recipe, which is a yaml file with instructions on "
+"how to build your package on conda-forge, using the grayskull[^grayskull]"
+" package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:89
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request for review. [Click here for an example "
+"submission from pyOpenSci.](https://github.com/conda-forge/staged-"
+"recipes/pull/25173)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:91
+msgid ""
+"Once someone from the conda-forge team reviews your pull request, you may"
+" need to make some changes. Eventually the pull request will be approved "
+"and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:93
+msgid ""
+"Once your recipe is accepted and merged on conda-forge, users can install"
+" your package using:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:95
+msgid "`conda install -c conda-forge your-package`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:97
+msgid ""
+"You only create the recipe once. Once the recipe is accepted and merged, "
+"you only need to maintain the repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:99
+msgid "Maintaining a conda-forge package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:101
+msgid ""
+"Once your package is on conda-forge, the repository will track release "
+"activity on the package's PyPI repository. Any time you make a new PyPI "
+"release with a new source distribution, conda-forge will build and update"
+" your conda-forge repository (also known as a feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:103
+msgid ""
+"When the update is processed, the friendly conda-forge bot will create a "
+"new pull request with an updated distribution recipe in your feedstock."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:105
+msgid ""
+"You can review that pull request and then merge it once all of the "
+"continuous integration tests pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:107
+msgid ""
+" How to Publish your package"
+" on conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:109
+msgid ""
+"It's time to add your package to the conda-forge channel. Remember that "
+"your package needs to be on PyPI before the steps below will work. And "
+"also remember that the team managing conda-forge are all volunteers."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:112
+msgid ""
+"Be sure that your package is on PyPI.org (not test.pypi.org) before you "
+"attempt to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:115
+msgid ""
+"Only submit your package to conda-forge if you intend to maintain it over"
+" time."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:118
+msgid ""
+"Note - this is a tutorial aimed to help you get your package onto conda-"
+"forge. The official conda documentation for this processed [is "
+"here](https://conda-forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:120
+msgid "Step 1: Install grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:122
+msgid ""
+"First, [install "
+"grayskull](https://conda.github.io/grayskull/user_guide.html). You can "
+"install it using either pip:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:128
+msgid "or conda"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:134
+msgid ""
+"To run this command, use the same shell / terminal that you have been "
+"using to run hatch commands in the previous tutorials."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:139
+msgid ""
+"You can also install grayskull using pipx[^pipx]. pipx is a tool that "
+"allows you to install commonly used tools that you might want to have "
+"available across multiple Python environments rather than installing the "
+"package into every Python environment that you create."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:142
+msgid "Step 2: Fork and clone the conda-forge staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:144
+msgid ""
+"Next, open your shell and `cd` to a location where you want to clone the "
+"**conda-forge/staged-recipes** repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:145
+msgid ""
+"fork and clone the [conda-forge/staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:146
+msgid ""
+"Create a new branch in your fork rather than submitting from the main "
+"branch of your fork. We suggest naming the branch your package's name."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:148
+msgid "`git checkout -b your-package-name `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:150
+msgid "In bash, `cd` into the `staged-recipes/recipes` folder"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:158
+msgid ""
+"Next, create a new branch in your `conda-forge/staged-recipes` cloned "
+"repository. You might want to make that branch the same name as your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:169
+msgid "Step 3: Create your conda-forge recipe"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:171
+msgid "Next, navigate to the recipes directory"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:173
+msgid ""
+"If you run `ls` here, you will notice there is an example directory with "
+"an example recipe for you to look at."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:185
+msgid "Next, run `grayskull pypi your-package-name` to generate a recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:229
+msgid ""
+"Grayskull will pull metadata about your package from PyPI. It does not "
+"use your local installation of the package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:230
+msgid ""
+"An internet connection is needed to run the `grayskull pypi your-package-"
+"name` step."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:233
+msgid ""
+"When you run grayskull, it will grab the latest distribution of your "
+"package from PyPI and will use that to create a new recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:235
+msgid ""
+"The recipe will be saved in a directory named after your package's name, "
+"wherever you run the command."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:237
+msgid "`recipes/packagename/meta.yaml`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:239
+msgid ""
+"At the very bottom of the grayskull output, it will also tell you where "
+"it saved the recipe file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:242
+msgid ""
+"Open the meta.yaml file. The finished `meta.yaml` file that grayskull "
+"creates should look like the example below:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:289
+msgid "Step 3b: Bug fix - add a home url to the about: section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:291
+msgid ""
+"There is currently a small bug in Grayskull where it doesn't populate the"
+" home: element of the recipe. If you don't include this, [you will "
+"receive an error message](https://github.com/conda-forge/staged-"
+"recipes/pull/25173#issuecomment-1917916528) from the friendly conda-forge"
+" linter bot."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:305
+msgid "to fix this, open your meta.yaml file in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:306
+msgid "and add a home: element to the about section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:308
+msgid "The about section will look like this after you create your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:318
+msgid ""
+"Below you add a home: element. If you have a project home page / website "
+"you can use that url. Otherwise, you can also use your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:329
+msgid "Step 4: tests for conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:331
+msgid ""
+"Next, have a look at the tests section in your **meta.yaml** file. At a "
+"minimum you should import your package or the main modules associated "
+"with your package and run `pip check`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:333
+msgid ""
+"`pip check` will ensure that your package installs properly with all of "
+"the proper dependencies."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:345
+msgid ""
+"If you have more advanced tests that you wish to run, you can add them "
+"here. However, you can also simply leave the tests section as it is."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:347
+msgid "Step 4: Submit a pull request to the staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:349
+msgid ""
+"Once you have completed all of the above, you are ready to open up a pull"
+" request in the `conda-forge/staged-recipes repository`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:351
+msgid ""
+"Submit a pull request from your fork/branch of the staged-recipes "
+"repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:352
+msgid ""
+"Remember that the conda-forge maintainers are volunteers. Be patient for "
+"someone to respond and supportive in your communication with them."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md
+msgid "Conda-forge checklist help"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:358
+msgid "Conda-forge Staged-recipes Pull Request Checklist"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:360
+msgid ""
+"When you submit your package to conda-forge, the pull request template "
+"includes a list of checks that you want to ensure you have covered."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:362
+msgid "Below we break down each element of that list."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:364
+msgid "Pull request template checklist tips"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:367
+msgid ""
+"-[x] Title of this PR is meaningful: e.g. \"Adding my_nifty_package\", "
+"not \"updated meta.yaml\"."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:369
+msgid ""
+"**Translation:** Make sure that your pull request title is specific. We "
+"suggest something like: `Add recipe for `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:372
+msgid ""
+"-[x] License file is packaged (see [here](https://github.com/conda-forge"
+"/staged-"
+"recipes/blob/5eddbd7fc9d1502169089da06c3688d9759be978/recipes/example/meta.yaml#L64-L73)"
+" for an example)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:374
+msgid ""
+"**Translation:** You should have a LICENSE file included in your "
+"package's source distribution. If you have followed the pyOpenSci "
+"tutorials then you already have a LICENSE file and are likely using the "
+"MIT license. When you run `hatch build`, it will bundle that file into "
+"the output [source distribution file (which is the tar.gz file)](python-"
+"source-distribution) that conda-forge will use to build your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:376
+msgid "[x] Source is from official source."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:378
+msgid ""
+"**Translation:** If your package is on PyPI as you learned in the "
+"[previous lesson on publishing your Python package](publish-pypi) then "
+"you are in good shape. conda-forge prefers that your distribution is "
+"published to a known repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:380
+msgid ""
+"-[x] Package does not vendor other packages. (If a package uses the "
+"source of another package, they should be separate packages or the "
+"licenses of all packages need to be packaged)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:382
+msgid ""
+"**Translation:** If the code base in your package is your own and it all "
+"shares the same LICENSE then you are in good shape. If you have code "
+"taken from other packages then you may need to declare that and include "
+"licenses for that code if it is different. If you followed these "
+"tutorials then you do not have any vendored code."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:384
+msgid ""
+"-[x] If static libraries are linked in, the license of the static library"
+" is packaged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:386
+msgid ""
+"-[x] Package does not ship static libraries. If static libraries are "
+"needed, [follow CFEP-18](https://github.com/conda-"
+"forge/cfep/blob/main/cfep-18.md)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:388
+msgid ""
+"**Translation:** A static library refers to a copy of a package built "
+"into your package. If your package is a pure Python package, then you can"
+" check that your package does not ship static libraries as this does not "
+"apply to you."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:390
+msgid ""
+"The pyOpenSci tutorials are all pure Python and as such do not use static"
+" libraries in a linked or shipped (included in the package distribution) "
+"format."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:392
+msgid ""
+"If your package has a more complex build that includes links to "
+"extensions written in other languages such as C++, then be sure to "
+"include the proper licenses for those extensions in your metadata."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:397
+msgid ""
+"If you want to learn more about static libraries, then [this "
+"overview](https://pypackaging-"
+"native.github.io/background/compilation_concepts/#shared-vs-static-"
+"libraries) might help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:400
+msgid "-[ ] Build number is 0."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:402
+msgid ""
+"**Translation:** The build number in your recipe is right below the "
+"source location of your package's source distribution. `number: 0` is "
+"what you should see in that section of your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:415
+msgid ""
+"[x] A tarball (`url`) rather than a repo (e.g. `git_url`) is used in your"
+" recipe (see [here](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html) for more details)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:417
+msgid ""
+"**Translation:** Here conda wants you to provide a link to the source "
+"distribution on PyPI rather than a link to your GitHub repository "
+"distribution. Notice above in the Source section of your recipe there is "
+"a `url:` section that provides a PyPI url that ends in tar.gz. That is a "
+"link to your source distribution that conda-forge will use."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:423
+msgid ""
+"[x] GitHub users listed in the maintainer section have posted a comment "
+"confirming they are willing to be listed there."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:425
+msgid ""
+"**Translation** Once you have submitted your recipe, be sure that all "
+"maintainers listed in your recipe respond acknowledging that they are ok "
+"with being listed as a maintainer for the conda-forge version of your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:427
+msgid ""
+"[x] When in trouble, please check our [knowledge base "
+"documentation](https://conda-"
+"forge.org/docs/maintainer/knowledge_base.html) before pinging a team."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:429
+msgid ""
+"**Translation** The conda team are volunteers who spend their time "
+"supporting our community. Please try to troubleshoot on your own first "
+"before tagging one of them for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:431
+msgid ""
+"This is also why we don't suggest you publish to conda-forge as a "
+"practice run."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:435
+msgid ""
+"Once you create your pull request, a suite of CI actions will run that "
+"build and test the build of your package. A conda-forge maintainer will "
+"work with you to get your recipe in good shape and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:439
+msgid ""
+"Image showing the 5 CI tasks that will run against your package in the "
+"GitHub interface after you'ce created a pull request."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:441
+msgid ""
+"Wait until all of the CI steps in your pull request have run. At that "
+"point your pull request is ready for review by a conda-forge maintainer."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:444
+msgid ""
+"In some cases getting all of the checks to run successfully in CI might "
+"take a bit of work. If you are struggling to get your recipe to build "
+"properly, you can ping the conda-forge maintainer team for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:446
+msgid "Please be patient and wait for them to respond."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:448
+msgid "conda-forge staged recipes and CI failures"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:451
+msgid ""
+"If your package is a pure Python package that can be installed on any "
+"type of computer (Windows, mac, linux) and has no architecture "
+"requirements (known as noarch: Python or no architecture requirements) "
+"then the conda-forge team only requires tests for Linux CI to pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:453
+msgid ""
+"So if tests for Windows and MAC OS fail, that is to be expected. In this "
+"case, don't worry about failing tests, the maintainer team can help you "
+"get your package published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:456
+msgid ""
+"Once you have submitted your recipe, you can wait for the CI build to "
+"pass. If it's not passing, and you aren't sure why, a conda-forge "
+"maintainer can likely help you figure things out."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:458
+msgid ""
+"Once your recipe is built and merged, the conda team will create a new "
+"package repository for you similar to [this one for the GemGIS "
+"package](https://github.com/conda-forge/gemgis-feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:460
+msgid ""
+" Congratulations - you "
+"have added your package to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:462
+msgid ""
+"The last part of this process is maintaining the repository. We cover "
+"that next."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:465
+msgid "Maintaining your conda-forge feedstock"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:467
+msgid ""
+"Every time you create a new release on PyPI, the conda-forge bots will "
+"recognize the release and will rebuild the newly released version of your"
+" package. This process may take a day or two to complete so be patient."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:469
+msgid ""
+"Once the conda-forge build is complete, all of the maintainers of your "
+"conda-forge feedstock will get a ping on GitHub that a new pull request "
+"has been opened."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:471
+msgid ""
+"Review the pull request. If all tests are passing, you can merge it. "
+"Shortly after merging your pull request, the conda-forge release will be "
+"available for users to install:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:473
+msgid "`conda install -c conda-forge yourpackage`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:477
+msgid "If you have walked through this entire tutorial series you will now:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:479
+msgid "Understand [what a Python package is ](intro.md)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:480
+msgid ""
+"Know how to [make your code installable](create-python-package.md) into "
+"Python environments"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:481
+msgid ""
+"Know how to create a `pyproject.toml` file, a `README` file, and a "
+"`LICENSE` and code of conduct."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:482
+msgid "Know how to [publish your package to PyPI](publish-pypi.md) and"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:483
+msgid "Know how to publish your package to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:485
+msgid ""
+"The above are the basic steps that you need to take to create and publish"
+" a Python package. In a future tutorial series we will cover that basics "
+"of maintaining your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:489
+msgid "[Grayskull blogpost](https://conda-forge.org/blog/2020/03/05/grayskull/)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:490
+msgid "[Pipx documentation](https://pipx.pypa.io/stable/)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:7
+msgid "Publish your Python package to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:11
+msgid "Make sure they add /dist to their .gitignore file. Where does that fit?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:15
+msgid "In the previous Python packaging lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:17
+msgid "What a Python package is"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:18
+msgid "How to make your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:26
+#, python-brace-format
+msgid ""
+"Build your package's {term}`Source distribution (sdist)` and {term}`Wheel"
+" (.whl)` {term}`Distribution files`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:28
+msgid "Setup an account on TestPyPI (the process is similar for PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:29
+msgid "Publish your package to TestPyPI and PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:31
+msgid ""
+"You will do all of your development work in this lesson using [Hatch"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:34
+msgid ""
+"Once your package is on PyPI you can publish it to conda-forge (which is "
+"a channel on conda) using "
+"[Grayskull](https://conda.github.io/grayskull/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:37
+msgid ""
+"You will learn how to publish to conda-forge in the [next lesson"
+"](publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:41
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. An arrow to the right takes you to a build distribution files "
+"box. Another arrow to the right takes you to a publish to PyPI box which "
+"has an arrow containing sdist and wheel that notes those files go to PyPI"
+" for hosting. From PyPI is an arrow containing sdist since you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:43
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:46
+msgid "TestPyPI vs PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:48
+msgid ""
+"There are two repositories associated with PyPI to which you can upload "
+"your Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:51
+msgid ""
+"**[TestPyPI](https://test.pypi.org):** TestPyPI is a package repository "
+"provided by PyPI that you can use for testing that your package can be "
+"uploaded, downloaded, and installed correctly. This is a great place to "
+"practice and learn how to publish a package without exposing your "
+"incomplete package on the real PyPI service."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:52
+msgid ""
+"**[PyPI](https://pypi.org):** This is the live, production PyPI "
+"repository where you can officially publish your Python package, and from"
+" which users will get your package. IMPORTANT: Only publish your package "
+"to PyPI when you are ready for it to be used by others and/or confident "
+"that it will become a package that you will maintain. PyPI is not a place"
+" to practice learning how to publish a Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:54
+msgid ""
+"The steps for publishing on TestPyPI vs. PyPI are similar with the "
+"exception of a different url. We will point out where they differ."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:57
+msgid "4 Steps for publishing a Python package on TestPyPI (or PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:59
+msgid ""
+"In this lesson you will learn how to publish your package to TestPyPI "
+"using [Hatch](https://hatch.pypa.io/latest/). There are 4 things that you"
+" need to do to publish your Python package: to TestPyPI. You need to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:64
+msgid "**Create a package development environment**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:65
+#, python-brace-format
+msgid ""
+"[**Build your package using `hatch build`**](../package-structure-code"
+"/python-package-distribution-files-sdist-wheel). Building a package is "
+"the process of turning your code into two types of distribution files: "
+"sdist and wheel. The wheel distribution file is particularly important "
+"for users who will use {term}`pip` to install your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:66
+#, python-brace-format
+msgid ""
+"**Create an account on TestPyPI (or PyPI)**: You will need to create a "
+"TestPyPI account and associated {term}`API token` which provides "
+"permissions for you to upload your package. When you later publish your "
+"package to PyPI, you will need a separate PyPI account and token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:67
+msgid "**Publish to TestPyPI using `hatch publish`**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:69
+msgid ""
+"In a [future lesson](trusted-publishing), you will learn how to create an"
+" automated GitHub Actions workflow that publishes an updated version of "
+"your package to PyPI every time you create a GitHub release."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:71
+msgid "Learn more about building Python packages in our guide"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:75
+msgid ""
+"[Learn more about what building a Python package is](../package-"
+"structure-code/python-package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:76
+msgid ""
+"[Learn more about the package distribution file that PyPI needs called "
+"the wheel](#python-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:77
+msgid ""
+"[Learn more about the package distribution file that conda-forge will "
+"need on PyPI called the sdist (source distribution)](#python-source-"
+"distribution)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:80
+msgid "Step 1: Create a Python package development environment"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:82
+msgid ""
+"The first step in building your package is to create a development "
+"environment. The Python environment will contain all of the dependencies "
+"needed to both install and work on your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:84
+msgid "Use Hatch to create your environment."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:92
+msgid "Then view all of the current environments that hatch has access to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:104
+msgid ""
+"Then activate the environment. Note that when you call a shell from a "
+"Hatch environment, it will automatically install your package into the "
+"environment in development or editable mode."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:114
+msgid "View what's in the environment using `pip list`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:130
+msgid "At any time you can exit the environment using `exit`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:144
+msgid "Hatch and environments"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:146
+msgid ""
+"Behind the scenes when hatch creates a new virtual environment, by "
+"default it uses venv[^venv] which is the default environment management "
+"tool that comes with Python installations."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:149
+msgid "Hatch will:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:151
+msgid "Create a new virtualenv (venv) that is located on your computer."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:152
+msgid ""
+"Install your package into the environment in editable mode (similar to "
+"`python -m pip install -e`). This means it installs both your project and"
+" your project's dependencies as declared in your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:154
+msgid "Step 2: Build your package's sdist and wheel distributions"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:156
+msgid ""
+"Once you have your development environment setup, you are ready to build "
+"your package using Hatch. Remember that building is the process of "
+"turning your Python package file structure into two distribution files:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:158
+msgid ""
+"The [wheel distribution](#python-wheel) is a pre-built version of your "
+"package. It useful for users as it can be directly installed using a tool"
+" such as `pip`. This file has the extension `.whl`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:159
+msgid ""
+"The [source distribution](#python-source-distribution) contains the files"
+" that make up your package in an unbuilt format. This file will have the "
+"extension `.tar.gz`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:161
+msgid ""
+"You will use Hatch as a **Front end** tool that builds your package's "
+"sdist and wheel using the [hatchling](https://hatch.pypa.io/latest/) "
+"build back-end. The hatchling build back-end is used because you declared"
+" it in your pyproject.toml file in the [previous lesson](create-python-"
+"package)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:165
+msgid "To build your package run `hatch build`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:176
+msgid "Learn more about building a Python package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:178
+msgid ""
+"You can learn more about building in the [build page of our packaging "
+"guide](../package-structure-code/python-package-distribution-files-sdist-"
+"wheel)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:182
+msgid ""
+"The sdist is important if you wish to [publish your package to conda-"
+"forge](publish-conda-forge). You will learn about this in a later lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:186
+msgid ""
+"➜ hatch build ────────────────────────────────────── sdist "
+"────────────────────────────────────── dist/pyospackage-0.1.tar.gz "
+"────────────────────────────────────── wheel "
+"────────────────────────────────────── dist/pyospackage-0.1-py3-none-"
+"any.whl"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:193
+msgid ""
+" Congratulations - "
+"you've created your Python package distribution files "
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:195
+msgid ""
+"You've now built your Python package and created your package "
+"distribution files. The next step is to setup your account on TestPyPI so"
+" you can publish your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:198
+msgid "Step 3. Setup your TestPyPI account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:200
+msgid ""
+"Next, you'll setup an account on TestPyPI. Remember that you are using "
+"TestPyPI here instead of the real PyPI as a way to safely learn how to "
+"publish a package without accidentally \"releasing\" your package before "
+"it's ready."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:204
+msgid "TestPyPI vs. PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:205
+msgid ""
+"If you have a package that you are confident belongs on PyPI, all of the "
+"steps below will also work for you. When you publish using Hatch, you "
+"will call `hatch publish` to publish directly to PyPI instead of `hatch "
+"publish -r test` which publishes to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:208
+msgid ""
+"[Open up a web browser and go to the TestPyPI "
+"website](https://test.pypi.org/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:209
+msgid ""
+"[Create an account](https://test.pypi.org/account/register/) if you don't"
+" already have one. Be sure to store your password in a safe place!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:210
+msgid "Once you have an account setup, login to it."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:211
+msgid ""
+"Search on [https://test.pypi.org/](https://test.pypi.org/) (and also on "
+"[https://pypi.org/](https://pypi.org/)) to ensure that the package name "
+"that you have selected doesn't already exist. If you are using our test "
+"pyosPackage, then we suggest that you add your name or GitHub username to"
+" the end of the package name to ensure it's unique."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:213
+msgid "Example: `pyosPackage_yourNameHere`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:215
+msgid ""
+"How to rename your Python package if the name is already taken in (test) "
+"PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:219
+msgid "Required"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:221
+msgid ""
+"Search your publishing location(s) to make sure your new name isn't taken"
+" ([TestPyPI](https://test.pypi.org/), [PyPI](https://pypi.org/), [conda-"
+"forge](https://conda-forge.org/packages/))"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:222
+msgid ""
+"Update the project name in your pyproject.toml file (e.g. `name = "
+"\"pyospackage_yourNameHere\"`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:223
+msgid ""
+"Update the module folder name to be the same (e.g. "
+"`src/pyospackage_yourNameHere`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:224
+msgid "Rebuild your project (`hatch build`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:225
+msgid "Publish your package to capture the name (continue this tutorial!)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:227
+msgid "Recommended"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:229
+msgid "Update the GitHub repository name to align with the new package name"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:230
+msgid ""
+"Update your local project folder to match the new package name (e.g. "
+"`pyospackage_yourNameHere/src`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:231
+msgid "Update mentions of your repository name in other files (e.g. `README.md`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:235
+msgid ""
+"This is a screenshot of the TestPyPI website. At the top in the search "
+"bar, you can see the search for pyosPackage. The search return says there"
+" were no results for pyosPackage Did you mean probpackage"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:237
+msgid ""
+"Before you try to upload to TestPyPI, check to see if the name of your "
+"package is already taken. You can do that using the search box at the top"
+" of the TestPyPI website."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:241
+msgid "Setup 2-factor (2FA) authentication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:243
+msgid ""
+"2-factor authentication is a secure login process that allows you to use "
+"a backup device that only you can access to validate that the person "
+"logging in is really you. It addresses the issue of password phishing "
+"where someone else gains access to a password and can login to your "
+"account."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:246
+msgid ""
+"This matters on PyPI because someone could login to your account and "
+"upload a version of your package that has security issues. These issues "
+"will then impact all of your users when they download and install that "
+"version of the package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:248
+msgid ""
+"2-factor authentication is required for PyPI authentication as of 1 "
+"January 2024."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:252
+msgid "Step 4. Create a package upload token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:254
+msgid ""
+"To upload your package to TestPyPI (or PyPI), you will need to create a "
+"token for your account first, and should then create a package-specific "
+"token. (If you completed this step previously, you can reuse the tokens "
+"when you upload your package again.)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:256
+msgid "Why create package-specific tokens?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:258
+msgid ""
+"It's ideal to create a package-specific token. When you create an "
+"account-wide token this allows anyone with access to the account to then "
+"access all of your TestPyPI (or PyPI) projects. By creating a package-"
+"specific token, you are limiting the scope of the token to only your "
+"specific package. This is just a safe way to set things up for you "
+"particularly if you are collaborating with others on package development."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:261
+msgid "Follow the steps below to create your token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:263
+msgid "Login to TestPyPI and go to your account settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:264
+msgid "Scroll down to the **API tokens** section"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:265
+msgid "Click on the **Add API Token** button"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:266
+msgid ""
+"If you are new to using TestPyPI and don't have any packages there yet, "
+"OR if you have other packages on TestPyPI but are uploading a new "
+"package, you will need to create an account-wide token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:267
+msgid ""
+"When you create your token, be sure to copy the token value and store it "
+"in a secure place before closing that browser."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:269
+msgid "Your token should look something like this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:271
+msgid "`pypi-abunchofrandomcharactershere...`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:273
+msgid "It should start with `pypi` followed by a dash and a bunch of characters."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:275
+msgid "Upload to TestPyPI using Hatch"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:277
+msgid "Once you have your token, you are ready to publish to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:280
+msgid "Run `hatch publish -r test`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:282
+msgid ""
+"`-r` stands for repository. In this case because you are publishing to "
+"TestPyPI you will use `-r test`. Hatch will then ask for a username and "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:284
+msgid ""
+"Add the word `__token__` for your username. This tells TestPyPI that you "
+"are using a token value rather than a username."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:285
+msgid "Paste your TestPyPI token value in at the `Enter your credentials` prompt:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:296
+msgid ""
+"If your credentials are valid, and you have already run `hatch build` and"
+" thus have your 2 distribution files in a `dist/` directory then Hatch "
+"will publish your package to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:300
+msgid ""
+"Hatch also has a caching system so once you enter your credentials it "
+"will remember them."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:303
+msgid "Install your package from TestPyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:305
+msgid ""
+"Once your package upload is complete, you can install it from TestPyPI. "
+"You can find the installation instructions on the TestPyPI landing page "
+"for your newly uploaded package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:310
+msgid ""
+"A screenshot of the TestPyPI page for pyosPackage. It says pyosPackage "
+"0.1.0 at the top with the pip install instructions below. The landing "
+"page of the package has information from the package's README file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:312
+msgid ""
+"This is an example landing page for the pyosPackage that was just "
+"uploaded. Notice at the top of the page there are instructions for how to"
+" install the package from TestPyPI. You can simply copy that code and use"
+" it to install your package from TestPyPI locally."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:315
+msgid ""
+"As an example, [check out our pyOpenSci pyosPackage landing page on "
+"TestPyPI](https://test.pypi.org/project/pyosPackage/). Notice that the "
+"page has information about the current package version and also "
+"installation instructions as follows:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:319
+msgid "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:322
+msgid ""
+"Publishing to TestPyPI vs PyPI While you can install from TestPyPI it's "
+"not recommended that you publish to TestPyPI as a permanent way to "
+"install your package. In fact, you cannot, because TestPyPI may delete "
+"accounts after a time. TestPyPI is a perfect place to learn how to "
+"publish your package and test the installation process. But your end goal"
+" should be to publish to PyPI once you have figured out your workflow and"
+" your package is ready to deploy."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:326
+msgid "Time to install your package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:328
+msgid ""
+"On your computer, activate the development environment that you wish to "
+"install your newly published package in."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:330
+msgid "Run the installation instructions for your package from TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "Conda"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "venv Mac / Linux"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:354
+msgid "The value of end-to-end tools like hatch, flit and poetry"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:355
+msgid ""
+"In this lesson you are using Hatch and hatchling to create, build and "
+"publish your Python package. [Click here to learn about other packaging "
+"tools in the ecosystem.](../package-structure-code/python-package-build-"
+"tools.md)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:359
+msgid ""
+"teach them to setup trusted publisher for actions... in the actions "
+"lesson https://pypi.org/help/#twofa"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:362
+msgid ""
+"from PyPI: https://pypi.org/help/#apitoken - You can create a token for "
+"an entire PyPI account, in which case, the token will work for all "
+"projects associated with that account. Alternatively, you can limit a "
+"token's scope to a specific project."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:365
+msgid "Package-specific token vs trusted publisher"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:367
+msgid ""
+"For long run maintenance of your package, you have two options related to"
+" PyPI publication."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:370
+msgid ""
+"You can create a package-specific token which you will use to publish "
+"your package (manually) to PyPI. This is a great option if you don't wish"
+" to automate your PyPI publication workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:371
+msgid ""
+"You can also create an automated publication workflow on GitHub using "
+"GitHub Actions. This is a great way to make the publication process "
+"easier and it also supports a growing maintainer team. In this case we "
+"suggest you don't worry about the token and instead setup a specific "
+"GitHub Actions that publishes your package when you make a release. You "
+"can then create a \"trusted publisher\" workflow on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:373
+msgid "Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:376
+msgid ""
+"While publishing from GitHub Action is possible using tokens, we "
+"recommend the _Trusted Publishing_ approach as it also confers "
+"significant security and usability benefits."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:378
+msgid ""
+"On the usability front, when Trusted Publishing is enabled, users no "
+"longer need to manually create API tokens on PyPI and store them in the "
+"GitHub release workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:380
+msgid ""
+"On the security front, Trusted Publishing reduces a risk related to the "
+"API token being long lived: with API tokens, as soon as an attacker gets "
+"access to it, they can publish many packages and versions in your name "
+"(depending on the scope of the token), until you discover the token "
+"compromise and rotate the credential. Trusted Publishing avoids this "
+"problem by minting very short lived tokens which expire automatically."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:382
+msgid ""
+"For these benefits, it is recommended that users use _only_ the GitHub "
+"Actions release workflow to publish packages."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:385
+msgid ""
+"You will learn how to create the automated trusted publisher workflow in "
+"a followup lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:387
+msgid "OPTIONAL: If you want to use a manual token-based publication workflow"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:389
+msgid ""
+"If you plan to use your token regularly to publish to PyPI, we strongly "
+"recommend going through the above steps again to create a token specific "
+"to your new package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:392
+msgid "To do this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:393
+msgid "Go to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:394
+msgid "Navigate to the \"Your Projects\" section of your account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:395
+msgid ""
+"Click on the manage button for the project that you wish to add a token "
+"for"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:396
+msgid "Go to settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:397
+msgid "Click on \"Create a token for your-package-name-here\""
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:398
+msgid ""
+"Create the token and follow the steps above publish your package using "
+"the repository specific token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:400
+msgid "And you're all done!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:402
+msgid "Trusted Publishing instead of token-based publication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:405
+msgid ""
+"Trusted Publishing will generate short lived tokens, scoped to the "
+"project, on demand, only when a specific release workflows gets "
+"triggered. This solves all the security and usability issues associated "
+"with storing credentials in files/GitHub secrets."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:411
+msgid "You have published your package to TestPyPI!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:413
+msgid ""
+"Congratulations. You have now successfully published your package to "
+"TestPyPI. If you have a package that is ready for real-world use on the "
+"real PyPI, then you can follow the same steps (with the differences noted"
+" above) to publish it on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:415
+msgid ""
+"Once you publish on PyPI, you can then easily add your package to the "
+"conda-forge ecosystem using the [grayskull](https://conda-"
+"forge.org/blog/posts/2020-03-05-grayskull/) tool."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:417
+msgid "You will learn how to do that in the next lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:421
+msgid "https://docs.python.org/3/library/venv.html"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:6
+msgid "Make your Python package PyPI ready - pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:8
+msgid ""
+"In [the installable code lesson](create-python-package), you learned how "
+"to add the bare minimum information to a `pyproject.toml` file to make it"
+" installable. You then learned how to publish a bare minimum version of "
+"your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:13
+msgid "Following that you learned how to add a:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:14
+msgid "[README.md](add-readme)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:15
+msgid "[LICENSE](add-license-coc) and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:16
+msgid "[CODE_OF_CONDUCT](add-coc)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:18
+msgid "to the root of your project directory."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:20
+msgid ""
+"To enhance the visibility of your package on PyPI and provide more "
+"information about its compatibility with Python versions, project "
+"development status, and project maintainers, you should add additional "
+"metadata to your `pyproject.toml` file. This lesson will guide you "
+"through the process."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:32
+msgid ""
+"More about the `pyproject.toml` file and how it's used to store different"
+" types of metadata about your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:33
+msgid ""
+"How to declare information (metadata) about your project to help users "
+"find and understand it on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:35
+msgid ""
+"If you wish to learn more about the `pyproject.toml` format, [check out "
+"this page. ](../package-structure-code/pyproject-toml-python-package-"
+"metadata.md)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Click for lesson takeaways"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:42
+msgid "When creating your pyproject.toml file, consider the following:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:44
+msgid ""
+"There are only two required metadata tables that you need to install and "
+"publish your Python package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:45
+msgid "**[build-system]**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:46
+msgid "**[project]**."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:47
+msgid ""
+"The **[project]** table stores your package's metadata. Within the "
+"**[project]** table, There are only two _required_ fields:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:48
+msgid "**name=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:49
+msgid "**version=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:50
+msgid ""
+"You should add more metadata to the `[project]` table as it will make it "
+"easier for users to find your project on PyPI. And it will also make it "
+"easier for installers to understand how to install your package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:51
+msgid ""
+"When you are adding classifiers to the **[project]** table, only use "
+"valid values from [PyPI's classifier "
+"page](https://PyPI.org/classifiers/). An invalid value here will raise an"
+" error when you build and publish your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:52
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However, fields need to be placed within the correct tables. For example "
+"`requires =` always need to be in the **[build-system]** table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:53
+msgid ""
+"We suggest that you include your **[build-system]** table at the top of "
+"your `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:58
+msgid ""
+"The `pyproject.toml` file is a human and machine-readable file that "
+"serves as the primary configuration file for your Python package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:63
+msgid ""
+"[Building your package](build-package) is the step that created the "
+"distribution files that are required for you to publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:67
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:69
+#, python-brace-format
+msgid ""
+"The **pyproject.toml** file is written in {term}`TOML` format. TOML is an"
+" easy-to-read structure that is based on key/value pairs. Each section in"
+" the **pyproject.toml** file contains a `[table identifier]`. The TOML "
+"format can be compared to other structured formats such as `.json`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:74
+msgid ""
+"Below you can see the `[build-system]` table. Within that table there are"
+" two required key/value pairs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:77
+msgid ""
+"`requires =` is the key and the value is `[\"hatchling\"]` within the "
+"`[build-system]` array specified by square brackets `[]`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:87
+msgid "What is the pyproject.toml used for?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:89
+msgid "The pyproject.toml file tells your build tool:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:91
+#, python-brace-format
+msgid ""
+"What {term}`Build backend` to use to build your package (we are using "
+"{term}`Hatchling` in this tutorial but there are [many others to choose "
+"from](/package-structure-code/python-package-build-tools))."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:94
+msgid "How and where to retrieve your package's version:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:95
+msgid "**statically** where you declare the version `version = \"0.1.0\"` or"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:96
+msgid ""
+"**dynamically** where the tool looks to the most recent tag in your "
+"history to determine the current version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:97
+#, python-brace-format
+msgid "What {term}`Dependencies` your package needs"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:98
+msgid "What versions of Python your package supports (important for your users)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:100
+msgid ""
+"The `pyproject.toml` file also makes it easy for anyone browsing your "
+"GitHub repository to quickly understand your package's structure such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:103
+msgid "How your package is built,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:104
+msgid "What Python versions and operating systems it supports"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:105
+msgid "What it does,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:106
+msgid "Who maintains it"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:108
+msgid ""
+"Finally, the pyproject.toml file is also often used to configure tools "
+"such as static type checkers (e.g. mypy) and code formatters/linters "
+"(e.g. black, ruff)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:111
+msgid ""
+"Check out the [PyPA "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend) if you are interested in "
+"setting build configurations for other tools."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:113
+msgid ""
+"Note that some build tools may deviate in how they store project "
+"metadata. As such you may want to refer to their documentation if you "
+"decide to use a tool other than Hatch and hatchling. We have selected "
+"hatchling and hatch as our tool of choice for this tutorial as it adheres"
+" to PyPA rules and guidelines."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:117
+msgid "How is pyproject.toml metadata used?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:119
+msgid ""
+"The pyproject.toml file is the file that your build tool uses to populate"
+" a `METADATA` that is included in your Python distribution files that get"
+" published to PyPI. This `METADATA` file is then used by PyPI to populate"
+" your package's PyPI landing page and help users filter through the tens "
+"of thousands of packages published there."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:122
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:127
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:133
+msgid "A more in-depth overview of pyproject.toml files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:135
+msgid ""
+"[Our guidebook page has a more in depth overview of this file"
+"](../package-structure-code/pyproject-toml-python-package-metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:138
+msgid "How to update your pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:140
+msgid ""
+"In the last lesson, you created a bare-bones pyproject.toml file that "
+"contained the core elements needed to build your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:144
+msgid ""
+"A `[build-system]` table where you defined your project's backend build "
+"tool (`hatchling`)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:145
+msgid "A `[project]` table where you defined your project's version and name."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:147
+msgid "The `pyproject.toml` file that you created, looked like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:159
+msgid ""
+"Your next step is to add additional recommended metadata fields that will"
+" both help users find your package on PyPI and also better describe the "
+"scope of your package. Once you add this metadata, you don't have to do "
+"it again. These metadata fields will only be updated periodically when "
+"you do something such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:162
+msgid "drop a package dependency"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:163
+msgid "modify what Python versions your package supports."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:165
+msgid "More on hatchling"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:168
+msgid ""
+"The documentation for the hatchling back-end is "
+"[here](https://hatch.pypa.io/latest/config/metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:171
+msgid "Step 1: Add Author, maintainer and project description"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:173
+msgid ""
+"After completing the [installable code tutorial](create-python-package), "
+"you should have a pyproject.toml file with a project name and a version "
+"in the `[project]` table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:181
+msgid "Add the following to your table:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:183
+msgid ""
+"A **description** of your package. This should be a single line and "
+"should briefly describe the goal of your package using non technical "
+"terms if as all possible!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:184
+msgid "package **authors**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:185
+msgid "package **maintainers**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:187
+msgid "The `description` is just a string like the other values you've set:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:198
+msgid ""
+"When you add authors and maintainers you need to use a format that will "
+"look like a Python list with a dictionary within it:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:212
+msgid "Author names & emails"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:216
+msgid ""
+"There is a quirk with PyPI for authors that have names but not emails in "
+"the pyproject.toml. If you are missing the email for one or more authors "
+"or maintainers, like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:225
+msgid ""
+"Then we suggest that you only provide names in your list of names to "
+"ensure that everything renders properly on your PyPI page - like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:234
+msgid "don't have emails for everyone, we suggest that you only add names."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:237
+msgid ""
+"Your `pyproject.toml` file now should look like the example below. It is "
+"OK if you only have 1 author and the same author is also maintainer of "
+"your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid ""
+"Learn More: What's the difference between author and maintainer in open "
+"source?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:265
+msgid ""
+"When adding maintainers and authors, you may want to think about the "
+"difference between the two."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:267
+msgid "Authors generally include people who:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:268
+msgid "originally created / designed developed the package and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:269
+msgid "people who add new functionality to the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:271
+msgid ""
+"Whereas maintainers are the people that are currently, actively working "
+"on the project. It is often the case that there is overlap in authors and"
+" maintainers. As such these lists may be similar or the same."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:273
+msgid ""
+"A good example of when the lists might diverge is sometimes you have a "
+"package where an initial author developed it and then stepped down as a "
+"maintainer to move on to other things. This person may continue to be "
+"considered an author but no longer actively maintains the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:275
+msgid ""
+"It is important to note that there are many ways to define author vs "
+"maintainer and we don't prescribe a single approach in this tutorial."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:277
+msgid ""
+"However, we encourage you to consider carefully, for PyPI publication, "
+"who you want to have listed as authors and maintainers on your PyPI "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:281
+msgid "Step 2: Add README and license"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:283
+msgid ""
+"In the previous lessons, you added both a [README.md](add-readme) file "
+"and a [LICENSE](add-license-coc) to your package repository. Once you "
+"have those files, you can refer to the README from your pyproject.toml "
+"file, and add a short code indicating your choice of LICENSE following "
+"the example below."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:312
+msgid ""
+"The license entry in your pyproject.toml file must use the [license "
+"expression syntax](https://packaging.python.org/en/latest/specifications"
+"/license-expression/). Often this is a short name (with no spaces) for "
+"the license, such as \"MIT\", \"BSD-3-Clause\" or \"Apache-2.0\". More "
+"precisely, it must be a valid SPDX license expression, as documented in "
+"the [SPDX specification](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-"
+"license-expressions/), either version 2.2 or a later compatible version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:314
+msgid ""
+"If you have multiple licenses, or a custom license, you can also express "
+"these using a license expression."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:316
+msgid ""
+"If you want to distribute license files, or other files containing legal "
+"information, with your package, you can include these using the "
+"[`license-files`](https://packaging.python.org/en/latest/guides/writing-"
+"pyproject-toml/#license-files) entry, but this is not required."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:318
+msgid "Step 3: Specify Python version with `requires-python`"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:320
+msgid ""
+"Add the `requires-python` field to your `pyproject.toml` `[project]` "
+"table. The `requires-python` field helps pip identify which Python "
+"versions that your package supports. It is set to a single value. The "
+"[packaging "
+"specification](https://packaging.python.org/en/latest/specifications"
+"/core-metadata/#core-metadata-requires-python) defines`requires-python` "
+"as a string that uses version specifiers. Most projects will specify the "
+"oldest Python version supported by the package. In some advanced cases, "
+"an upper bound is set to indicate which future Python versions, if any, "
+"will be supported."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:325
+msgid "But how do I figure out which Python versions I should support?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:327
+msgid ""
+"Good question. The Python developer guide provides a [status "
+"page](https://devguide.python.org/versions/) (and a handy visualization) "
+"that explains the status of each Python release. Python releases go "
+"through several different phases that are explained in [PEP "
+"602](https://peps.python.org/pep-0602/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:329
+msgid ""
+"We recommend that you use the latest Python release in the **bugfix** "
+"phase. If your Python release is in the **security** phase, we recommend "
+"migrating to a newer version of Python."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:331
+msgid ""
+"[SPEC 0](https://scientific-python.org/specs/spec-0000/) of the "
+"Scientific Python project suggests a common schedule for dependencies, "
+"including Python release versions, and is also worth considering for your"
+" project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:360
+msgid "Step 4: Specify Dependencies"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:362
+msgid ""
+"Next add your dependencies table to the project table. The `dependencies "
+"=` section contains a list (or array in the toml language) of the Python "
+"packages that your package requires to run properly in a Python "
+"environment. Similar to the requirements listed in the `[build-system]` "
+"table above:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:370
+msgid "dependencies are added in an array (similar to a Python list) structure."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:376
+msgid ""
+"A dependency can be limited to specific versions using a **version "
+"specifier.** If the dependency has no version specifier after the "
+"dependency name, your package can use any version of the dependent "
+"package. Code changes over time, bugs are fixed, APIs change, and so it's"
+" good to be clear about which version of the dependency you wrote your "
+"code to be compatible with - a package you wrote this year probably isn't"
+" compatible with numpy v0.0.1!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:380
+msgid ""
+"[Learn more about various ways to specify ranges of package versions "
+"here.](https://packaging.python.org/en/latest/specifications/version-"
+"specifiers/#id5)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:382
+msgid ""
+"The most common version specifier is a **lower bound,** allowing any "
+"version higher than the specified version. Ideally you should set this to"
+" the lowest version that is still compatible with your package, but in "
+"practice for new packages this is often set at the version that was "
+"current at the time the package was written[^lowerbound]."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:387
+msgid "Lower bounds look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:393
+msgid ""
+"Commas are used to separate individual dependencies, and each package in "
+"your `dependencies` section can use different types of version "
+"specifiers:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:404
+msgid "Your `pyproject.toml` file will now look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:434
+msgid "Pin dependencies with caution"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:435
+msgid ""
+"\"Pinning\" a dependency means setting it to a specific version, like "
+"this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:437
+msgid "`numpy == 1.0`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:439
+msgid ""
+"If you are building a library package that other developers will depend "
+"upon, you must be cautious before pinning to a precise dependency "
+"version. Applications, such as production websites, will often pin their "
+"dependencies since other packages will not depend on their project. This "
+"is because users will be installing your package into various "
+"environments. A dependency pinned to a single specific version can make "
+"resolving a Python environment more challenging. As such only pin "
+"dependencies to a specific version if you absolutely need to do so."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:447
+msgid ""
+"Similarly, you should be cautious when specifying an upper bound on a "
+"package. These two specifications are equivalent:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:455
+msgid ""
+"One build tool that you should be aware of that pins dependencies to an "
+"upper bound by default is Poetry. [Read more about how to safely add "
+"dependencies with Poetry, here.](challenges-with-poetry)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:458
+msgid "Step 5: Add PyPI classifiers"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:460
+msgid ""
+"Next you will add classifiers to your `pyproject.toml` file. The value "
+"for each classifier that you add to your `pyproject.toml` file must come "
+"from the list of [PyPI accepted classifier values found "
+"here](https://PyPI.org/classifiers/). Any deviations in spelling and "
+"format will cause issues when you publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:462
+msgid "What happens when you use incorrect classifiers?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:465
+msgid ""
+"If you do not [use standard classifier "
+"values](https://PyPI.org/classifiers/), when you try to publish your "
+"package on PyPI it will be rejected. 😔 Don't worry if PyPI rejects you on"
+" your first try! It has happened to all of us."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:468
+msgid "Review that list and add items below to your `pyproject.toml` file:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:470
+msgid "development status"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:471
+msgid "intended audiences"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:472
+msgid "topic"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:473
+msgid "programming language support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:475
+msgid ""
+"The classifier key should look something like the example below. A few "
+"notes:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:477
+msgid ""
+"Your classifier values might be different depending upon your intended "
+"audience, development status of your package and the Python versions that"
+" you support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:478
+msgid ""
+"You can add as many classifiers as you wish as long as you use the "
+"[designated PyPI classifier values](https://PyPI.org/classifiers/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:517
+msgid ""
+"Note that while classifiers are not required in your `pyproject.toml` "
+"file, they will help users find your package. As such we strongly "
+"recommend that you add them."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:519
+msgid "Step 6: Add the `[project.urls]` table"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:521
+msgid "Finally, add the project.urls table to your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:523
+msgid ""
+"`project.urls` contains links that are relevant for your project. You "
+"might want to include:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:525
+msgid ""
+"**Homepage:** A link to your published documentation for your project. If"
+" you are working through this tutorial, then you may not have this link "
+"yet. That's ok, you can skip it for the time being."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:526
+msgid ""
+"**Bug reports:** a link to your issues/discussions or wherever you want "
+"users to report bugs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:527
+msgid "**Source:** the GitHub / GitLab link for your project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:572
+msgid ""
+"There are many other urls that you can add here. Check out the [README "
+"file here for an overview](https://github.com/patrick91/links-demo)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:575
+msgid "Putting it all together - your completed pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:577
+msgid ""
+"Below is an example of a complete `pyproject.toml` file that is commented"
+" with all of the sections we discussed above."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Appendix - Click for a fully commented pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:626
+msgid ""
+"Below is a fully commented pyproject.toml file if you want to use it for "
+"reference."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:692
+msgid "Example `pyproject.toml` files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:694
+msgid ""
+"Below are some examples of `pyproject.toml` files from various packages "
+"in the scientific and pyOpenSci ecosystem."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:695
+msgid ""
+"[PyPA's fully documented example pyproject.toml "
+"file](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:696
+msgid ""
+"[taxpasta has a nicely organized pyproject.toml file and is a pyOpenSci "
+"approved "
+"package](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a53dd49ad77e4cf143573/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:702
+msgid "At this point you've created:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:704
+msgid "A [README.md](add-readme) file for your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:705
+msgid "A [CODE_OF_CONDUCT.md](add-coc) file to support your user community"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:706
+msgid ""
+"And a [LICENSE](add-license-coc) file which provides legal boundaries "
+"around how people can and can't use your software"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:708
+msgid ""
+"You also learned [how to publish your package to (test)PyPI](publish-"
+"pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:710
+msgid "Publish a new version of your package to PyPI"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:712
+msgid ""
+"You are now ready to publish a new version of your Python package to "
+"(test) PyPI. When you do this you will see that the landing page for your"
+" package now contains a lot more information."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:714
+msgid "Try to republish now."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:716
+msgid ""
+"First, update the version of your package in your pyproject toml file. "
+"Below version is updated from `0.1` to `0.1.1`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:729
+msgid "Now use hatch to publish the new version of your package to test.PyPI.org."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:736
+msgid "Next (optional) step - publishing to conda-forge"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:738
+msgid ""
+"You now have all of the skills that you need to publish your package to "
+"PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:741
+msgid ""
+"If you also want to publish your package on conda-forge (which is a "
+"channel within the conda ecosystem), you will learn how to do that in the"
+" next lesson."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:745
+msgid ""
+"Really good resources from jeremiah "
+"https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet "
+"useful (and the linked links-demo even more so)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:385
+msgid ""
+"Some packaging tools will do this for you when you add a dependency using"
+" their cli interface. For example [`poetry add`](https://python-"
+"poetry.org/docs/cli/#add) will add the most recent version with a `^` "
+"specifier, and [`pdm add`](https://pdm-"
+"project.org/latest/reference/cli/#add) will add the most recent version "
+"with `>=`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:10
+msgid ""
+"Python supports inline metadata for scripts (a feature added in 2024). "
+"This makes it possible to run standalone scripts with dependencies and "
+"Python versions managed automatically."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:14
+#, python-brace-format
+msgid ""
+"Many tools support this workflow, including PDM, [Hatch](get-to-know-"
+"hatch), and {term}`uv`. In this tutorial, we focus on Hatch and UV. The "
+"same metadata format can also be used with other tools."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:22
+msgid ""
+"[Hatch: How to run Python scripts](https://hatch.pypa.io/latest/how-"
+"to/run/python-scripts/)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:23
+msgid ""
+"[uv: Running "
+"scripts](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-"
+"script)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:26
+msgid "How to create a reproducible script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:28
+#, python-brace-format
+msgid ""
+"Sometimes you want to share or run a single script without creating a "
+"full {term}`Python package`. To do this, you can use inline script "
+"metadata. This format lets you specify dependencies and Python versions "
+"at the top of your script in a comment block."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:34
+msgid ""
+"When you add metadata at the top of a script, Hatch (or PDM or uv) will "
+"use that metadata to:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:37
+msgid "Create an isolated virtual Python environment for that script."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:38
+#, python-brace-format
+msgid ""
+"Install the {term}`Dependencies` listed in the script into that "
+"environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:39
+msgid "Use the required Python version that you specify in the metadata."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:41
+msgid ""
+"This approach is useful for workflows that you want to make reproducible,"
+" but that do not need to become full Python packages."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:44
+msgid "Why use Hatch for scripts?"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:46
+msgid ""
+"Inline metadata helps you make scripts reproducible. Anyone can run your "
+"script without manually creating a new environment or guessing which "
+"dependencies it needs. Hatch takes care of installing dependencies and "
+"using the correct Python version."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:51
+msgid "How to add inline metadata to your script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:53
+msgid ""
+"You will use Hatch in this example, but you can also use uv if that is "
+"your preferred tool."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:56
+#, python-brace-format
+msgid ""
+"First, create a new file named `script.py` with the block below at the "
+"top. The metadata block starts with `# /// script` and ends with `# ///`."
+" Everything in between must be {term}`TOML` metadata written as comments."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:60
+msgid ""
+"In the example below, the script requires Python 3.11 or newer, and NumPy"
+" is declared as a dependency."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:81
+msgid "Run the script with Hatch"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:83
+msgid ""
+"Open your terminal and change to the directory where `script.py` lives. "
+"Then run:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:90
+msgid ""
+"On first run, Hatch will create an environment and install dependencies. "
+"On later runs, Hatch will reuse that environment so startup is faster."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:94
+msgid ""
+"The environment name is based on the script path. If you move the script "
+"to a new location, Hatch will treat it as a new script environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:98
+msgid "Optional: configure script environment behavior"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:100
+msgid ""
+"You can control script-specific Hatch behavior in the same metadata "
+"block. For example, to use `pip` instead of `uv` as the installer:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:113
+msgid "Run the same script with uv"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:115
+msgid "If you prefer uv, you can run the same inline-metadata script with:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:121
+msgid ""
+"The same `# /// script` metadata block works with uv, including "
+"`requires-python` and `dependencies`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:124
+msgid ""
+"For more on using uv to run scripts, see the guide: [Running scripts with"
+" uv](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:128
+msgid "When to use scripts vs. packages"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:130
+msgid "You may be wondering when to use scripts versus creating a package."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:132
+msgid "This depends on your use case. Scripts are often useful when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:134
+msgid "You have one small task, or a specific workflow that is not generalizable."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:135
+msgid ""
+"Your workflow is still evolving, but you want to run it in a reproducible"
+" environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:137
+msgid "You want reproducible dependencies quickly."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:138
+msgid "You are sharing a single file with collaborators."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:140
+msgid "Create a full package when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:142
+msgid "You are building reusable modules for multiple projects."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:143
+msgid "You need tests, documentation, releases, and long-term maintenance."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:144
+msgid "Your codebase is growing beyond one or two scripts."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:148
+msgid "[Get to know Hatch](get-to-know-hatch.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:149
+msgid "[Create a Python package](create-python-package.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:150
+msgid "[Command line reference guide](command-line-reference.md)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:7
+msgid "Using Hatch to Migrate setup.py to a pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:9
+msgid ""
+"[Hatch](get-to-know-hatch) can be useful for generating your project's "
+"[pyproject.toml](pyproject-toml) file if your project already has a "
+"`setup.py` file."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:13
+msgid "Note"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:16
+msgid ""
+"This step is not necessary and is only helpful if your project already "
+"has a `setup.py` file defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:17
+msgid ""
+"If your project does not already define a `setup.py` see [Make your "
+"Python code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:25
+msgid ""
+"The process of using Hatch to transition to using `pyproject.toml` for "
+"projects that already have a `setup.py` defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:28
+msgid "What is Hatch?"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:30
+#, python-brace-format
+msgid ""
+"Hatch is a Python package manager designed to streamline the process of "
+"creating, managing, and distributing Python packages. It provides a "
+"convenient CLI (Command-Line Interface) for tasks such as creating new "
+"projects, managing {term}`Dependencies`, building distributions, and "
+"publishing packages to repositories like [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:40
+msgid "See [Get to know Hatch](get-to-know-hatch) for more information."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:43
+msgid "Prerequisites"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:45
+msgid ""
+"Before we begin, ensure that you have Hatch installed on your system. You"
+" can install it via pip:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:51
+msgid "Sample Directory Tree"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:53
+msgid ""
+"Let's take a look at a sample directory tree structure before and after "
+"using `hatch init`:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:55
+msgid "Before `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:71
+msgid "After `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:89
+msgid ""
+"As you can see, the main change after running `hatch init` is the "
+"addition of the `pyproject.toml` file in the project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:91
+msgid "Step-by-Step Guide"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:93
+msgid ""
+"Now, let's walk through the steps to use Hatch to create a "
+"`pyproject.toml` file for your project."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:95
+msgid ""
+"**Navigate to Your Project Directory**: Open your terminal or command "
+"prompt and navigate to the directory where your Python project is "
+"located."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:97
+msgid ""
+"**Initialize Hatch**: Run the following command to initialize Hatch in "
+"your project directory:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:103
+msgid ""
+"**Review and Customize**: After running the previous command, Hatch will "
+"automatically generate a `pyproject.toml` file based on your existing "
+"project configuration. Take some time to review the contents of the "
+"generated `pyproject.toml` file. You may want to customize certain "
+"settings or dependencies based on your project's requirements (see "
+"[pyproject.toml tutorial](pyproject-toml) for more information about the "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:105
+msgid ""
+"**Verify**: Verify that the `pyproject.toml` file accurately reflects "
+"your project configuration and dependencies. You can manually edit the "
+"file, but be cautious and ensure that the syntax is correct."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:107
+msgid ""
+"**Delete setup.py**: Since we're migrating to using `pyproject.toml` "
+"exclusively, the `setup.py` file becomes unnecessary. You can safely "
+"delete it from your project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:109
+msgid ""
+"**Test Build**: Before proceeding further, it's essential to ensure that "
+"your project builds successfully using only the `pyproject.toml` file. "
+"Run the following command to build your project:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:115
+msgid ""
+"This command will build your project based on the specifications in the "
+"`pyproject.toml` file. Make sure to check for any errors or warnings "
+"during the build process."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:117
+msgid ""
+"**Test Existing Functionality**: After successfully building your project"
+" with `pyproject.toml`, it's crucial to ensure that your project's "
+"existing functionality remains intact. Run any pre-existing tests to "
+"verify that everything still works as expected."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:6
+msgid ""
+"Setup Trusted Publishing for secure and automated publishing via GitHub "
+"Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:8
+msgid "In the previous Python packaging lessons, you learned:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:10
+msgid "[How to create a Python package](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:11
+msgid ""
+"How to publish the code to [PyPI](publish-pypi) and [Conda](publish-"
+"conda-forge)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:16
+msgid "In this lesson, you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:18
+msgid "Automate building and publishing the package on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:19
+#, python-brace-format
+msgid "Configure {term}`Trusted publishing` for the project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:20
+msgid ""
+"Secure your workflow using GitHub action hashes and versions in your "
+"workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:22
+msgid ""
+"This tutorial assumes that your project is hosted on GitHub and that you "
+"want to publish a package from your project to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:26
+msgid "Configure a release job on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:28
+msgid ""
+"GitHub Actions[^gha] is an infrastructure provided by GitHub to automate "
+"software workflows, straight from the GitHub repository of the project. "
+"You can configure automated testing for every pull request, automate "
+"publishing of documentation, automate creation of web pages for the "
+"project, and even automate the release process. For this lesson, we will "
+"focus on using actions to release and publish your Python package "
+"securely to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:36
+msgid "Why Trusted Publishing Matters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:38
+msgid ""
+"If you are wondering why trusted publishing is so important, [check out "
+"this blog post:](https://www.pyopensci.org/blog/python-packaging-"
+"security-publish-pypi.html) that dives deeper into what can happen when "
+"you don't lock down your publishing workflows."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:41
+msgid "Step 0: Create a release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:43
+msgid ""
+"To get started, create a file named `release.yaml` under the "
+"`.github/workflows` directory of your project. If the `.github/workflows`"
+" directory does not exist, you can create it. It is GitHub's convention "
+"that all GitHub Actions are configured via YAML files in the "
+"`.github/workflows` directory."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:48
+msgid "Naming your workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:51
+msgid ""
+"You can name the workflow file whatever you wish. We suggest using "
+"something simple and expressive like `release.yaml` so you, your future "
+"self, and contributors who work on your project know exactly what the "
+"workflow does."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:56
+msgid "Step 1: Name the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:58
+msgid "At the top of the `release.yaml` file, type the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:64
+msgid ""
+"This provides a name to the workflow that you can use to quickly find all"
+" runs of this GitHub Action on the \"Actions\" tab in the GitHub "
+"repository."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:68
+msgid ""
+"Graphic showing an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, \"Release,\" as configured in this step. "
+"Finally, in the center, in the red box labeled \"3\" you can see several "
+"runs of the workflow, for the \"1.0\" and \"1.0.1\" releases of the "
+"package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:70
+msgid ""
+"This image shows an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, as configured in this step. Finally, in the "
+"center, in the red box labeled \"3\" you can see several runs of the "
+"workflow, for the \"1.0\" and \"1.0.1\" releases of the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:73
+msgid "Step 2: Add triggers to the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:75
+msgid ""
+"Every GitHub Actions workflow runs when [certain "
+"conditions](https://docs.github.com/en/actions/reference/events-that-"
+"trigger-workflows) are met. In this case, we assume that a release "
+"workflow should only run when the repository owner creates a new "
+"[release](https://docs.github.com/en/repositories/releasing-projects-on-"
+"github/managing-releases-in-a-repository) for the package. Add the "
+"following to the `release.yaml` file to ensure it runs when you create "
+"and publish a release:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:87
+msgid "Step 3: Configure the jobs in the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:89
+msgid ""
+"A GitHub Actions *workflow* file can contain multiple *jobs* that run "
+"independently; each job can also have multiple *steps.* When triggered, "
+"the GitHub Action runs all the jobs in a workflow (excluding any steps "
+"that have conditional requirements)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:93
+msgid ""
+"Jobs and steps can also have [conditional "
+"logic](https://docs.github.com/en/actions/reference/workflow-syntax-for-"
+"github-actions#jobsjob_idif) that allows them only to run if specific "
+"criteria exist. For instance, you may want only to have a job step to "
+"publish to PyPI if a release was made for the package. But you might want"
+" to test building the package every time you merge a new pull request."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:96
+msgid ""
+"For a release job, you need to clone or check out the repository. You can"
+" use the `actions/checkout` action to check out the code. You then "
+"install and use [Hatch](get-to-know-hatch) to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:101
+msgid ""
+"You also need to make sure to set up Hatch on the machine GitHub is using"
+" to run the workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:104
+msgid "A minimal job definition would look like this:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:124
+msgid ""
+"Notice that above, you provide a version for each action step. "
+"`action/checkout@v5` tells GitHub to use version 5 of the checkout "
+"action. The checkout action checks out the code from your repository. In "
+"this case, the code will be used to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:126
+msgid ""
+"Next, you will learn about a better way to secure (or \"harden\") your "
+"workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:128
+msgid "Step 4: Secure the GitHub Actions workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:130
+msgid ""
+"There are several improvements you can make to the GitHub Actions "
+"workflow you just configured to improve security and readability."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:133
+msgid ""
+"First, we can give names to relevant steps in the process to increase the"
+" readability of the logs generated during the workflow run. This can be "
+"achieved using `name: ` lines."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:137
+msgid ""
+"More importantly, each time you use an existing action (via `uses`) you "
+"should pin that action to a commit hash. Pinning your action ensures that"
+" if a malicious user takes over the action, they won't be able to impact "
+"your repository (an example of a supply chain attack due to GitHub "
+"Actions is the recent `tj-actions/changed-files` attack[^changed-files-"
+"supply-chain-attack])."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:144
+msgid ""
+"Enabling Dependabot[^dependabot] in the repository will ensure that your "
+"actions stay up to date. The dependabot tool will open pull requests that"
+" update your action versions at whatever frequency you want."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:149
+msgid "Thus, the workflow that you should use should be similar to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:157
+msgid ""
+"Now, you can commit the `.github/workflows/release.yaml` file to the "
+"repository and push to GitHub."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:159
+msgid ""
+"At this point, if you create a new release for your project on GitHub, "
+"the configured workflow should run and build a wheel for you. "
+"Unfortunately, the wheel is only available on the runner and will be "
+"deleted at the end of the workflow run."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:163
+msgid "Step 5: Upload the built artifact to GitHub Artifacts"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:165
+msgid ""
+"You need to add one more step to the job definition to be able to access "
+"the wheel. You will upload it to the artifacts temporary area[^github-"
+"artifacts]. Add the following to the `release.yaml` file:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:175
+msgid "Upload artifacts parameters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:178
+msgid ""
+"Above, you have configured the artifact to be deleted after 1 day. The "
+"artifacts storage on GitHub actions is temporary; users should not "
+"download your package from the GitHub artifacts."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:181
+msgid ""
+"You have also configured the release job to error if the `dist/` "
+"directory does not exist. This means that `hatch build` (from the "
+"previous step) failed to build our package, so there is nothing to "
+"release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:186
+msgid ""
+"At this point, if you push the `release.yaml` to GitHub and create a new "
+"release, the GitHub Actions job will:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:189
+msgid "run,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:190
+msgid "clone your repository,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:191
+msgid "install and set up Hatch,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:192
+msgid "build your package and"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:193
+msgid "upload your package as an archive to the artifacts storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:196
+msgid ""
+"Graphic showing an example of a release workflow that has just finished "
+"running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:198
+msgid ""
+"This figure shows an example of a release workflow that has just finished"
+" running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:201
+msgid ""
+"At the bottom of the workflow run page on GitHub, you should see a "
+"section for the artifacts produced during runtime and uploaded to this "
+"storage area:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:205
+msgid ""
+"Graphic showing an example of an artifact produced by the release "
+"workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:207
+msgid ""
+"This figure shows the artifact produced by the above release workflow. It"
+" is now marked as expired since the workflow ran more than a day ago."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:210
+msgid ""
+"You can download the artifact (before it expires), unzip it, and install "
+"the wheel contained within. However, this should only be done if you want"
+" to test the built wheel. Next, you will configure uploading to PyPI "
+"using trusted publishing."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:215
+msgid "Configure automatic publishing to PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:217
+msgid ""
+"The job you configured above using GitHub Actions builds your package "
+"using your code. You still need to upload it to PyPI. You could upload "
+"the package from the same job, but it is better to create a separate one "
+"to maintain a separation of tasks. This is why, in the previous section, "
+"we uploaded the artifact to the temporary storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:223
+msgid ""
+"In the new job, you will download the package from there and upload it to"
+" PyPI. Since the `build` job does nothing else, there is no possibility "
+"that the package could get compromised before the release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:227
+msgid "Step 1: Add the upload job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:229
+msgid ""
+"In the `release.yaml` file, add the following new job, after the job "
+"defined in the previous section:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:238
+msgid "Make sure to change the URL"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:240
+msgid "Remember to change the `url:` value to the URL for your package on PyPI!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:243
+msgid "This job has two steps:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:245
+msgid ""
+"It uses `download-artifact` to download the artifacts built in the "
+"previous job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:247
+msgid "It uses `gh-action-pypi-publish` to publish the package to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:249
+msgid ""
+"You are almost there!! Now, you just need to enable trusted publishing "
+"for your project on PyPI. And then, your work is done!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:252
+msgid "Step 2: Enable trusted publishing on PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:256
+msgid ""
+"Diagram showing PyPI's trusted publisher workflow: Step 1 builds "
+"distribution files via GitHub, Step 2 uses a trusted environment (PyPI), "
+"Step 3 securely uploads to PyPI. Shows chain of trust with lock icon "
+"connecting GitHub Action to Python Package Index."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:261
+msgid ""
+"Before trusted publishing was created, in order to upload to PyPI from "
+"GitHub actions you would have needed to add the username and password as "
+"arguments to the `gh-action-pypi-publish` step. While documentation "
+"recommends using the GitHub's `secrets` environment for the "
+"password/token, in several cases, users were pasting the password "
+"directly into the workflow file. Furthermore, accidental leakage of the "
+"password or token could allow attackers to publish new packages using "
+"your account, until you discover the compromise and revoke the leaked "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:269
+msgid ""
+"To prevent these incidents and improve supply chain security, developers "
+"created [Trusted Publishing](https://docs.pypi.org/trusted-publishers/). "
+"Trusted publishing allows you to register a publishing workflow on PyPI "
+"and then map that workflow to an automation workflow (e.g., GitHub "
+"Actions) that is allowed to publish the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:274
+msgid ""
+"You do not need to enter a token or password value in a trusted publisher"
+" workflow. It's a secure connection between your"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:277
+msgid "Trusted Publishing outside of GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:280
+msgid ""
+"Trusted Publishing supports other automation platforms, beyond GitHub "
+"Actions. It is also possible to configure a trusted publisher for "
+"multiple workflows or multiple publishers for the same package. These are"
+" advanced uses, out of scope for this lesson."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:286
+msgid ""
+"For this lesson, we will focus on configuring a trusted publisher for a "
+"project that already exists on PyPI. If you completed the [lesson about "
+"PyPI publishing](create-python-package), you should have this project "
+"already created."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:288
+msgid ""
+"This setup step needs to be performed only once for the project. Future "
+"releases will only run the GitHub Actions workflow we are configuring in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:291
+msgid ""
+"On the [\"Your projects\" page on "
+"PyPI](https://pypi.org/manage/projects/), click \"Manage\" on any project"
+" you want to configure."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:295
+msgid ""
+"Graphic showing a screenshot of the \"Your projects\" page on PyPI. The "
+"\"Manage\" button for one of the projects is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:297
+msgid ""
+"This image shows several projects. The \"Manage\" button is highlighted "
+"for one of the projects, the one we want to configure trusted publishing "
+"for."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:300
+msgid "Then click \"Publishing\" in the project's sidebar."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:303
+msgid ""
+"Graphic showing the management page for one project. The \"Publishing\" "
+"link in the sidebar is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:305
+msgid ""
+"Once clicking on the \"Manage\" button we got to the project's page. In "
+"the sidebar, we have the \"publishing\" option, as highlighted here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:309
+msgid ""
+"This will take you to the publisher configuration page for the project. "
+"Trusted publishers can be configured via the forms here. Fill in the "
+"GitHub form with the following information:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:313
+msgid ""
+"Owner: the GitHub organization name for the organization that owns the "
+"project. If this is your personal project, then use your GitHub username "
+"here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:315
+msgid "Repository name: the name of the repository that contains the project."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:316
+msgid ""
+"Workflow name: Should be `release.yaml` if you followed this guide, it is"
+" the workflow we just configured."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:318
+msgid ""
+"Environment name: Should be `pypi`, as that is what we configured in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:321
+msgid ""
+"Once you fill in this form and click \"Add\" the publisher is configured "
+"and can be used to publish new releases of your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:324
+msgid "Fully hardened GitHub Actions release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:326
+msgid ""
+"For better security, it is also recommended to control the permissions of"
+" the GitHub token used within each job of the workflow. The permissions "
+"should be scoped at job level and be as minimal as possible. A workflow "
+"that configures trusted publishing and also does this is the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:336
+msgid ""
+"You can copy the above into your `release.yaml` file. You only need to "
+"update the `url:` field and configure trusted publishing on PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:340
+msgid ""
+"The workflow above should be up to date with the current versions of "
+"GitHub actions. However, it's good to turn on Dependabot to update the "
+"action versions in the future."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:343
+msgid "You have enabled trusted publishing for your project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:345
+msgid ""
+"Congratulations!! You have now configured your project to do secure "
+"releases when a new version is being tagged on GitHub. The workflow we "
+"have configured builds the package from the exact version of code that we"
+" are tagging. This provides a guarantee for your users that the package "
+"that you have released does precisely what the code states it does. There"
+" is little to no potential for supply chain related vulnerabilities "
+"arising from your package! If you have a package that is ready for real-"
+"world use on the real PyPI, then you can follow the same steps to publish"
+" it securely."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:349
+msgid ""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:350
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:351
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:352
+msgid ""
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/CONTRIBUTING.po b/locales/de/LC_MESSAGES/CONTRIBUTING.po
new file mode 100644
index 000000000..e6bb9f0a9
--- /dev/null
+++ b/locales/de/LC_MESSAGES/CONTRIBUTING.po
@@ -0,0 +1,723 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../CONTRIBUTING.md:4
+msgid "Contributing to the Python Packaging Guide"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:6
+msgid "The guide is a community resource."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:8
+msgid "TL;DR"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:10
+msgid "We welcome contributions in the form of issues and pull requests:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:12
+msgid ""
+"If you have an idea for something that should be included in the guide, "
+"[please open an issue here](https://github.com/pyOpenSci/python-package-"
+"guide/issues)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:13
+msgid ""
+"If you find a typo, feel free to [submit a pull "
+"request](https://github.com/pyOpenSci/python-package-guide/pulls) to "
+"modify the text directly. Or, if you are less comfortable with pull "
+"requests, feel free to open an issue."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:14
+msgid ""
+"If you are interested in helping translate the guide into other "
+"languages, take a look at the [translation guide](./TRANSLATING.md)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:15
+msgid ""
+"If you want to see a larger change to the content of the guide book, "
+"please submit an issue first!"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:17
+msgid ""
+"If you are unsure about how to contribute or are not familiar with git "
+"and github, this guide will help you through the process."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:19
+msgid "How the Python Packaging Guide is structured"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:21
+msgid ""
+"The Python Packaging Guide is written in myST (a variant of MarkDown and "
+"rST) and we use **Sphinx**, a documentation engine built in `Python` to "
+"build the HTML version you see online."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:23
+msgid "We use a tool called Nox to manage the process of building the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:25
+msgid "Two approaches to contributing"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:27
+msgid "You can contribute to the guide using two approaches."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:29
+msgid ""
+"The first approach is using a local copy of the guide in your computer. "
+"This option requires a more involved setup, but allows you to build the "
+"guide locally to verify your contribution did not introduce any bugs "
+"before submitting a pull request. It is the recommended approach for "
+"larger contribution, like writing a whole new section."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:31
+msgid ""
+"The second approach is making your contribution directly in the GitHub "
+"website. This option does not require any setup on your computer and "
+"while your contribution will still be tested when you submit a PR "
+"(continuous integration), it will take longer for you to get any feedback"
+" in case of issue. It is the best way to make small contribution, like "
+"fixing typos, or if this is your first contribution to open source and "
+"the first approach feels too intimidating."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:33
+msgid "Forking the repository"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:35
+msgid ""
+"Independently of the approach you choose, the first step is to fork the "
+"Python Packaging Guide repository into your personal GitHub space. You "
+"can do this by clicking the \"Fork\" button in the top right corner of "
+"the repository page."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:38
+msgid ""
+"[Learn more: Fork and Clone GitHub "
+"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
+"clone/) is a good resource to learn more about forking."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:40
+msgid "To fork a repo,"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:42
+msgid "Make sure you are logged into GitHub."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:44
+msgid ""
+"Go to the repo you would like to fork, in this case the [Python Packaging"
+" Guide](https://github.com/pyopensci/python-package-guide) repo."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:46
+msgid ""
+"In the top right-hand corner of the page there is a 'Fork' button. Click "
+"that button. You will be brought to a new page where you will 'Create a "
+"new fork'. Feel free to keep all the default inputs and click 'Create "
+"fork'. This will create a copy of the repo at "
+"`https://github.com//python-package-guide`, where `` "
+"is your GitHub username."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:51
+msgid "Contributing via the GitHub website"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:53
+msgid "How to edit a MarkDown file"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:55
+msgid ""
+"The Python Packaging Guide is written in myST, a variant of MarkDown. You"
+" can edit the files directly in the GitHub website. To do so, navigate to"
+" the file you want to edit and click the pencil icon in the top right "
+"corner of the file."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:58
+msgid "Edit button in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:64
+msgid ""
+"An image showing how to edit a file in GitHub. The pencil icon is "
+"highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:66
+msgid "Edit file in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:72
+msgid ""
+"An image showing when a file is being edited in GitHub. The file content "
+"is displayed in a text editor."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:75
+msgid "To preview your changes, click the \"Preview changes\" tab."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:77
+msgid "Preview changes in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:83
+msgid ""
+"An image showing how to preview changes in GitHub. The file content is "
+"displayed in a text editor. The preview changes tab is highlighted with a"
+" red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:86
+msgid "How to commit your changes"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:88
+msgid ""
+"When you are done editing the file, scroll down to the bottom of the "
+"page. You will see a section called \"Commit changes\". Here you can "
+"write a title and a description for your changes. Make sure to write a "
+"clear and concise title that describes the changes you made."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:91
+msgid "Commit changes in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:97
+msgid ""
+"An image showing how to commit changes in GitHub. The commit message is "
+"displayed in a text editor. The commit changes section is highlighted "
+"with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:100
+msgid ""
+"After writing your commit message, click the \"Commit changes\" button to"
+" save your changes."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:102
+msgid "Contributing locally on your computer"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:104
+msgid "Clone your forked repository"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:106
+msgid ""
+"To clone your forked repository to your computer, you need to copy the "
+"URL of your forked repository and run the following command in your "
+"terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:111
+msgid ""
+"Replace `` with the URL of your forked repository. You can find the "
+"URL by clicking the green \"Code\" button on your forked repository page."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:113
+msgid "Clone repository in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:119
+msgid ""
+"An image showing how to clone a repository in GitHub. The URL of the "
+"repository is displayed in a text editor. The code button is highlighted "
+"with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:122
+msgid "Create a new branch"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:124
+msgid ""
+"Before making any changes, you should create a new branch to work on. "
+"This will help keep your changes separate from the main branch and make "
+"it easier to submit a pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:126
+msgid "To create a new branch, run the following command in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:132
+msgid "Create a virtual environment"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:134
+msgid ""
+"To build the guide locally, you need to create a virtual environment and "
+"install the dependencies. You can do this by running the following "
+"commands in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:136
+msgid "**On Windows**:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:142
+msgid "**On MacOS and Linux**:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:148
+msgid "Install the development dependencies"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:150
+msgid ""
+"To install the development dependencies, run the following command in "
+"your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:156
+msgid "Commit your changes"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:158
+msgid ""
+"After making your changes, you need to commit them to your local "
+"repository. To do this, run the following commands in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:160
+msgid "To see the changes you made:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:164
+msgid "To add the changes to the staging area:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:168
+msgid "To commit the changes:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:172
+msgid ""
+"Replace `\"Your commit message here\"` with a clear and concise message "
+"that describes the changes you made."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:174
+msgid "How to build the guide locally"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:176
+msgid ""
+"To build the guide locally, you can use the `nox` command. This will run "
+"the default `nox` session, which builds the guide and opens it in your "
+"browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:178
+msgid ""
+"To see the different sessions available, you can run the following "
+"command in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:183
+msgid ""
+"There are different sessions in nox related to building the docs: `docs`,"
+" `docs-test`, `docs-live`. You can run them by specifying the session "
+"name after the `nox` command."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:185
+msgid "`docs`: this session builds the guide and opens it in your browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:189
+msgid ""
+"To see the guide built locally, open the file `_build/html/index.html` in"
+" your browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:191
+msgid "`docs-linkcheck`: this session checks that links in documentation work"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:195
+msgid ""
+"If the tests fail, you will see logs in the terminal and in "
+"`_build/linkcheck_output/output.txt`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:197
+msgid "`docs-test`: this session runs the tests for the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:201
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:203
+msgid ""
+"`docs-live`: this session builds the guide and opens it in your browser "
+"with live reloading."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:207
+msgid ""
+"open the local version of the guide in your browser at ``localhost`` "
+"shown in the terminal."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:209
+msgid "Before you submit your pull request"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:211
+msgid ""
+"Before submitting your pull request, make sure to run the tests and check"
+" the formatting of your code."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:216
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request. Also make "
+"sure to check the formatting of your documentation by building the docs "
+"locally and checking that your changes look correct."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:220
+msgid "Submitting a pull request with your contribution"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:222
+msgid "How to make a pull request"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:224
+msgid ""
+"To open a pull request on GitHub, navigate to the main page of your "
+"forked repository and click on the \"Pull requests\" tab."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:226
+msgid "Pull requests tab in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:232
+msgid ""
+"An image showing how to navigate to the pull requests tab in GitHub. The "
+"pull requests tab is highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:235
+msgid "Click on the \"New pull request\" button."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:237
+msgid "New pull request button in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:243
+msgid ""
+"An image showing how to create a new pull request in GitHub. The new pull"
+" request button is highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:246
+msgid ""
+"Write a clear and concise title and description for your pull request. "
+"Make sure to describe the changes you made and why they are necessary."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:248
+msgid "What happens when you submit a pull request (CI/CD)"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:250
+msgid ""
+"Once you submit a pull request, a series of checks will be run to ensure "
+"that your changes do not introduce any bugs or errors. These checks "
+"include:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:252
+msgid ""
+"**Code formatting and styles**: checks that your code is formatted "
+"correctly, by `pre-commit.ci - pr check`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:253
+msgid ""
+"**docs build**: checks that the documentation builds correctly, using "
+"`circleci`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:255
+msgid "You will see the status of these checks in your pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:257
+msgid "Pull request checks in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:263
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks are highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:265
+msgid ""
+"If any of these checks fail, you will see an error message in your pull "
+"request. You need to fix the errors before your changes can be merged."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:267
+msgid "Pull request checks failed in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:273
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks that failed and the details link are highlighted with a"
+" red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:276
+msgid ""
+"To get more information about the errors, you can click on the "
+"\"Details\" link next to the failed check."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:278
+msgid "What to expect from the review process"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:280
+msgid ""
+"Once you submit a pull request, a maintainer of the repository will "
+"review your changes and provide feedback. The review process may involve:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:282
+msgid ""
+"**Comments**: the reviewer may leave comments on your pull request to ask"
+" questions or provide feedback."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:283
+msgid ""
+"**Suggestions**: the reviewer may suggest changes to your code or "
+"documentation."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:284
+msgid ""
+"**Approvals**: once the reviewer is satisfied with your changes, they "
+"will approve the pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:286
+msgid ""
+"You can make changes to your pull request by pushing new commits to the "
+"branch. The pull request will be updated automatically with your new "
+"changes."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:288
+msgid ""
+"Once your pull request is approved, it will be merged into the main "
+"branch and your changes will be included in the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:290
+msgid "Additional help"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:292
+msgid "How to get help"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:294
+msgid ""
+"*__TODO__: This section should describe the options for finding more help"
+" in case beginner contributors need more help (e.g., create an issue, "
+"post in a forum, etc).*"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:296
+msgid "Additional resources"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:298
+msgid ""
+"*__TODO__: It should also include links to beginner documentation, like "
+"the GitHub docs.*"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:300
+msgid "Annex"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:302
+msgid "Code examples"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:304
+msgid ""
+"This guide uses the [literalinclude Sphinx directive](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/directives.html#directive-"
+"literalinclude) whenever possible to keep code and prose separate. Code "
+"for use in the documentation is kept in the `examples/` folder."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:308
+msgid "Referencing code in documentation"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:310
+msgid ""
+"If an example is present elsewhere in the documentation that you want to "
+"use, you can copy the `literalinclude` directive verbatim and the "
+"examples will stay in sync."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:313
+msgid ""
+"If you already see code in the examples folder that you can use for new "
+"documentation, a new `literalinclude` can be made to extract it into the "
+"site. Only a relative path to the code is required for a working "
+"`literalinclude`, but you should in almost all cases also provide a "
+"`:language:` and `:lines:`. The former makes code examples prettier, and "
+"the later can protect your example from future modifications to the code."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:318
+msgid ""
+"**Pro tip**: As an alternative to `:lines:` there are also the `:start-"
+"after:`, `:start-at:`, `:end-before:`, and `:end-at:` options. And if the"
+" example code is Python, `:pyobject:` can be an even more future-proof "
+"way to keep the same documentation content even through code refactors."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:322
+msgid ""
+"If you need example code that doesn't yet exist in `examples/` see "
+"[creating code for documentation](#creating-code-for-documentation)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:325
+msgid "Creating code for documentation"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:327
+msgid ""
+"Whenever you come across a place that could benefit from a code block, "
+"instead of writing it in-line with a code fence (`` ``` `` blocked text) "
+"you can write it as a file in its own format. Your example may even "
+"already exist; [see referencing code in documentation ](#referencing-"
+"code-in-documentation)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:331
+msgid ""
+"If you want to add a new example that doesn't fit into any of the "
+"existing example files, you can create a new file and reference it in a "
+"`literalinclude` block. If it makes sense for that file to live within "
+"one of the existing example projects please add it there; otherwise "
+"create a new folder in the `examples` directory."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:335
+msgid ""
+"If an existing example is incomplete or a new example makes sense to be "
+"added to an existing file, go ahead and add it, but take care to not "
+"break the rest of the guide. Whenever possible, extend the example rather"
+" that rewrite it. So for instance, add new functions to the end of the "
+"file, new methods after all existing ones in a class."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:339
+msgid ""
+"Example code is checked for correctness, so adding a new example may "
+"require adding additional tests for coverage, and will require fixing any"
+" failing tests."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:342
+msgid ""
+"***⚠️ WARNING***: great care should be taken when modifying existing "
+"example code, especially any modification beyond appending to the end of "
+"the file. All code examples are (potentially) shared examples. This makes"
+" for more consistent examples in the guide but can mean action-"
+"at-a-distance when modifying the examples for one particular use case. If"
+" you find yourself modifying existing examples try running this command "
+"and then checking those pages in a new build."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:350
+msgid "Example:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:352
+msgid "Instead of writing example code in markdown like this"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:363
+msgid "The python can be extracted into a `.py` file"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:377
+msgid ""
+"As another example, if you only need to show part of a `pyproject.toml`, "
+"we already have complete project definitions, you need only to find the "
+"relevant part."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:380
+msgid "Instead of writing this"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:391
+msgid "an example could be extracted from an existing toml file"
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/TRANSLATING.po b/locales/de/LC_MESSAGES/TRANSLATING.po
new file mode 100644
index 000000000..4389b9145
--- /dev/null
+++ b/locales/de/LC_MESSAGES/TRANSLATING.po
@@ -0,0 +1,790 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../TRANSLATING.md:5
+msgid "Translation Guide for the Python Packaging Guide"
+msgstr ""
+
+#: ../../TRANSLATING.md:7
+msgid ""
+"This guide will help you get started contributing to the translation of "
+"the Python Packaging Guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:9
+msgid ""
+"The process of contributing to the translation of the guide is similar to"
+" the process of contributing to the guide itself, except that instead of "
+"working on the guide source files directly, you will be working on the "
+"translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:11
+msgid "Translation Status"
+msgstr ""
+
+#: ../../TRANSLATING.md:16
+msgid ""
+"The translation status graph updates every time the book is build with "
+"translations. You can see the status of the translations by going to "
+"[this link](https://www.pyopensci.org/python-package-guide/TRANSLATING)"
+msgstr ""
+
+#: ../../TRANSLATING.md:18
+msgid "Overview of the Translation Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:20
+msgid ""
+"The process of adapting software to different languages is called "
+"internationalization, or i18n for short. Internationalization makes sure "
+"that translation can happen without having to modify the source code, or "
+"in our case, the original English source files of the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:22
+msgid ""
+"Sphinx, the documentation engine we use to build the Python Package "
+"Guide, has built-in support for internationalization, so the workflow is "
+"very straightforward."
+msgstr ""
+
+#: ../../TRANSLATING.md:24
+msgid ""
+"The process of actually translating the guide into different languages is"
+" called localization, or l10n for short. This is the step you will be "
+"helping with your contribution."
+msgstr ""
+
+#: ../../TRANSLATING.md:26
+msgid "Here is a quick overview of how the translation process works:"
+msgstr ""
+
+#: ../../TRANSLATING.md:28
+msgid ""
+"The guide is originally written in English and stored in a set of "
+"MarkDown files."
+msgstr ""
+
+#: ../../TRANSLATING.md:29
+msgid ""
+"The source files are processed by Sphinx to generate a set of translation"
+" files stored in a folder for each target language."
+msgstr ""
+
+#: ../../TRANSLATING.md:30
+msgid ""
+"Contributors (like you!) translate these files into the different "
+"languages."
+msgstr ""
+
+#: ../../TRANSLATING.md:31
+msgid ""
+"When the guide is built, Sphinx creates a version of the guide in the "
+"original language (English) and the translated versions for the languages"
+" defined in the configuration."
+msgstr ""
+
+#: ../../TRANSLATING.md:34
+msgid ""
+"You don't need to understand the technical details to contribute, but if "
+"you are interested in learning how Sphinx handles internationalization "
+"and localization, you can find more information [here](https://www"
+".sphinx-doc.org/en/master/usage/advanced/intl.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:37
+msgid "Two Ways to Contribute a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:39
+msgid ""
+"There are two ways to contribute a translation, and the first one does "
+"not require you to install anything on your computer."
+msgstr ""
+
+#: ../../TRANSLATING.md:41
+msgid ""
+"**From the GitHub website.** Translation files are plain text, so you can"
+" edit them right in your browser. Fork the repository, edit a `.po` file "
+"in your fork, and open a pull request. This is the best place to start if"
+" this is your first open source contribution. The contributing guide "
+"walks through the browser workflow in [Contributing via the GitHub "
+"website](CONTRIBUTING.md#contributing-via-the-github-website). Once you "
+"have a fork, you can skip ahead to [Editing the Translation Files"
+"](#editing-the-translation-files)."
+msgstr ""
+
+#: ../../TRANSLATING.md:43
+msgid ""
+"**From a local copy on your computer.** This takes more setup, but it "
+"lets you check how much of a file is translated with `sphinx-intl stat` "
+"and preview the translated guide in your browser before you open a pull "
+"request. Choose this if you plan to translate a lot of strings or want to"
+" see your work in context."
+msgstr ""
+
+#: ../../TRANSLATING.md:45
+msgid "Setting up Your Local Environment"
+msgstr ""
+
+#: ../../TRANSLATING.md:47
+msgid "You only need this if you chose the second approach above."
+msgstr ""
+
+#: ../../TRANSLATING.md:49
+msgid ""
+"Setting up to translate is no different from setting up to contribute "
+"anything else to the guide, so rather than repeat the steps here, follow "
+"these sections of the contributing guide in order:"
+msgstr ""
+
+#: ../../TRANSLATING.md:51
+msgid "[Forking the repository](CONTRIBUTING.md#forking-the-repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:52
+msgid ""
+"[Clone your forked repository](CONTRIBUTING.md#clone-your-forked-"
+"repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:53
+msgid "[Create a new branch](CONTRIBUTING.md#create-a-new-branch)"
+msgstr ""
+
+#: ../../TRANSLATING.md:54
+msgid ""
+"[Create a virtual environment](CONTRIBUTING.md#create-a-virtual-"
+"environment), which gives the commands for both Windows and macOS/Linux"
+msgstr ""
+
+#: ../../TRANSLATING.md:55
+msgid ""
+"[Install the development dependencies](CONTRIBUTING.md#install-the-"
+"development-dependencies)"
+msgstr ""
+
+#: ../../TRANSLATING.md:58
+msgid ""
+"Installing the development dependencies is what makes `sphinx-intl` and "
+"`nox` available in your environment. Both are used later in this guide: "
+"`sphinx-intl` reports how much of each file has been translated, and "
+"`nox` builds the guide so you can preview your work."
+msgstr ""
+
+#: ../../TRANSLATING.md:61
+msgid "Starting a New Language Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:63
+msgid ""
+"If you plan to work on an existing translation, you can skip this step "
+"and go directly to the next section."
+msgstr ""
+
+#: ../../TRANSLATING.md:65 ../../TRANSLATING.md:231
+msgid "Important"
+msgstr ""
+
+#: ../../TRANSLATING.md:66
+msgid ""
+"If you would like to start the translation of the guide into a new "
+"language, start by [creating an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:69
+msgid ""
+"To generate the translation files for a new language, add the language to"
+" the `languages` list in the `conf.py` configuration file. "
+"[Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to "
+"manage the building of the guide and its translations, and it reads this "
+"list from `conf.py`."
+msgstr ""
+
+#: ../../TRANSLATING.md:71
+msgid ""
+"Inside `conf.py`, find the `languages` list and add the corresponding "
+"two-letter code. For example, if you want to start the translation of the"
+" guide into French, you would add `'fr'`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:80
+msgid ""
+"You can find a list of the two-letter Sphinx language option "
+"[here](https://www.sphinx-doc.org/en/master/usage/configuration.html"
+"#confval-language)."
+msgstr ""
+
+#: ../../TRANSLATING.md:83
+msgid "Preparing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:85
+msgid ""
+"The translation files contain the original English text and a space for "
+"you to enter the translated text. Before starting to translate, you need "
+"to make sure the translation files are up to date with the latest changes"
+" to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:87
+msgid ""
+"You can do this by running the following command, replacing LANG by the "
+"language code you plan to work on (e.g., `es` for Spanish):"
+msgstr ""
+
+#: ../../TRANSLATING.md:93
+msgid ""
+"This command will create the translation files if they don't exist yet, "
+"or update them with the latest changes if they already exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:95
+msgid ""
+"The translation files are text files with the `.po` extension stored in "
+"`./locales`, in folders corresponding to each language. For example, the "
+"translation files for Spanish are stored in the `locales/es/LC_MESSAGES` "
+"directory."
+msgstr ""
+
+#: ../../TRANSLATING.md:97
+msgid ""
+"Because the translation files map the original English text to translated"
+" text, they are sometimes referred to as \"catalog\" files or \"portable "
+"object\" files."
+msgstr ""
+
+#: ../../TRANSLATING.md:100
+msgid ""
+"You don't need to know all the details about the PO format in order to "
+"translate. If you are interested in learning more, you can find "
+"additional details in the [GNU gettext "
+"documentation](https://www.gnu.org/software/gettext/manual/html_node/PO-"
+"Files.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:103
+msgid "Working on a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:105
+msgid ""
+"In order to start translating, go to the folder inside `./locales` "
+"corresponding to the target language you want to translate to (for "
+"example, `./locales/es/LC_MESSAGES/` for the Spanish translation)."
+msgstr ""
+
+#: ../../TRANSLATING.md:107
+msgid ""
+"In this folder you will find a set of `.po` files, corresponding to the "
+"different sections of the guide:"
+msgstr ""
+
+#: ../../TRANSLATING.md:125
+msgid ""
+"You may also see some `.mo` files in the same folder. These are compiled "
+"versions of the `.po` files create by Sphinx during the build process, "
+"and used to generate the translated version of the guide. They are "
+"intermediary files and are not meant to be edited directly or stored in "
+"the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:128
+msgid ""
+"If you are working on a new translation, choose one of the `.po` files to"
+" start with. If you are working on an existing translation, you can start"
+" with the `.po` files that need the most work."
+msgstr ""
+
+#: ../../TRANSLATING.md:130
+msgid ""
+"To see how much of each file has been translated, use the `sphinx-intl "
+"stat`. You will be able to see the number of translated, fuzzy, and "
+"untranslated strings in each `.po` file."
+msgstr ""
+
+#: ../../TRANSLATING.md:132
+msgid ""
+"For example, to see the statistics for the Spanish translation, you would"
+" run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:146
+msgid "What do these categories mean:"
+msgstr ""
+
+#: ../../TRANSLATING.md:148
+msgid ""
+"Translated strings are strings that have been translated into the target "
+"language."
+msgstr ""
+
+#: ../../TRANSLATING.md:149
+msgid ""
+"Fuzzy strings are strings that have been translated but need to be "
+"reviewed because the original English string in the guide changed."
+msgstr ""
+
+#: ../../TRANSLATING.md:150
+msgid "Untranslated strings are strings that have not been translated yet."
+msgstr ""
+
+#: ../../TRANSLATING.md:153
+msgid ""
+"When Sphinx is building the guide in another language, it will look into "
+"the corresponding folder in `./locales/` for translated strings. If the "
+"translation is available, Sphinx will replace the English text with the "
+"equivalent text in the target language. If the translation is not "
+"available, Sphinx will use the original English strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:156
+msgid "Editing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:158
+msgid ""
+"You can use any text editor to edit the `.po` file. But if you prefer, "
+"there are also tools like [Poedit](https://poedit.net/) that provide a "
+"graphic use interface."
+msgstr ""
+
+#: ../../TRANSLATING.md:160
+msgid ""
+"Depending on your editor of choice, you may be able to install a plugin "
+"or extension that can provide syntax highlighting and other features for "
+"working with `.po` files. Like for example, the "
+"[gettext](https://marketplace.visualstudio.com/items?itemName=mrorz"
+".language-gettext) extension for Visual Studio Code."
+msgstr ""
+
+#: ../../TRANSLATING.md:162
+msgid ""
+"When you open a `.po` file, you will see a series of entries that look "
+"like this:"
+msgstr ""
+
+#: ../../TRANSLATING.md:172
+msgid ""
+"The first line of an entry starts with `#:` and is a reference to the "
+"original source file and line number from which the text was extracted. "
+"This information is useful for finding the context of the text in the "
+"guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:174
+msgid ""
+"The `msgid` field contains the original English text that needs to be "
+"translated. The `msgstr` field is where you will enter the translated "
+"text. This field might contain text if someone else already translated "
+"the entry."
+msgstr ""
+
+#: ../../TRANSLATING.md:184
+msgid ""
+"Sometimes the original English text may be too long for a single line, "
+"and it may be split into multiple lines. In this case, you can keep the "
+"same structure in the translated text. Notice that both the `msgid` and "
+"`msgstr` fields in the example below start with an empty string, "
+"indicating that the text continues in the next line."
+msgstr ""
+
+#: ../../TRANSLATING.md:200
+msgid ""
+"The English text will sometimes contain Markdown formatting, such as bold"
+" or italic text. You should keep the formatting in the translated text, "
+"making sure to translate the text inside the formatting tags."
+msgstr ""
+
+#: ../../TRANSLATING.md:202
+msgid ""
+"The English text may also contain links to other sections of the guide or"
+" external resources. You should keep the links in the translated text, "
+"making sure to update the link text when appropriate."
+msgstr ""
+
+#: ../../TRANSLATING.md:210
+msgid ""
+"An entry may be marked as `fuzzy`, which means that the original English "
+"text has changed since the translation was made, and the translation may "
+"need to be revised. When this is the case you will see an additional line"
+" in the entry, starting with `#,`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:227
+msgid ""
+"You can review the translation and make any necessary changes, removing "
+"the `fuzzy` tag once you are satisfied with the translation."
+msgstr ""
+
+#: ../../TRANSLATING.md:229
+msgid ""
+"You can also add comments to the translation file, by adding lines that "
+"start with a `#` character to the entry. This can be helpful to add "
+"context to the translation for other translators or reviewers to see, but"
+" this might be only necessary in special circumstances."
+msgstr ""
+
+#: ../../TRANSLATING.md:232
+msgid ""
+"When working on a translation, you **should not** modify the original "
+"English text in the `msgid` field. If you see a typo or an error in the "
+"original text, please consider fixing it in the original source file (use"
+" the first line of the entry to locate it) and submit a separate pull "
+"request."
+msgstr ""
+
+#: ../../TRANSLATING.md:235
+msgid "Building the Translated Documentation"
+msgstr ""
+
+#: ../../TRANSLATING.md:237
+msgid ""
+"Once you finished translating or when you want to check the translation "
+"in context, you can build the guide locally on your computer, using the "
+"following command, replacing LANG by the proper language code (e.g., `es`"
+" for Spanish)"
+msgstr ""
+
+#: ../../TRANSLATING.md:243
+msgid ""
+"This command builds a single translated version of the guide: the one for"
+" LANG. The result is stored in `_build/html`, in a folder named after the"
+" language code (e.g., `es`). If you want to build every language at once "
+"instead, use `nox -s build-all-languages`."
+msgstr ""
+
+#: ../../TRANSLATING.md:245
+msgid ""
+"To view the translated version of the guide in your browser, open the "
+"corresponding `index.html` file. For example, to view the Spanish "
+"translation, you would open `_build/html/es/index.html`."
+msgstr ""
+
+#: ../../TRANSLATING.md:247
+msgid ""
+"You can also build a live version of the guide that updates automatically"
+" as you make changes to the translation files. To do this, use the `nox "
+"-s docs-live-lang` command. Note that in this case you need to specify "
+"which language you want to build. For example, if you are working on the "
+"Spanish translation, you would run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:253
+msgid ""
+"Note the `--` before the language code, it indicates that the following "
+"arguments should be passed into the nox session and not be interpreted "
+"directly by nox. If you forget the `--`, nox will look instead for a "
+"session named 'es' and raise an error that it does not exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:255
+msgid ""
+"This command will use `sphinx-autobuild` to launch a local web server "
+"where you can access the translated version of the guide. You can open "
+"the guide in your browser by navigating to `http://localhost:8000`."
+msgstr ""
+
+#: ../../TRANSLATING.md:257
+msgid ""
+"This is a great way to see how the translated version of the guide looks "
+"as you make changes to the translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:259
+msgid "Submitting a PR for Your Contribution"
+msgstr ""
+
+#: ../../TRANSLATING.md:261
+msgid ""
+"Once you are finished translating and before you submit a pull request "
+"(PR) for your translation, you need to make sure that the translated "
+"version of the guide builds without any errors or warning and looks "
+"correctly in the browser."
+msgstr ""
+
+#: ../../TRANSLATING.md:263
+msgid "You can follow these steps:"
+msgstr ""
+
+#: ../../TRANSLATING.md:265
+msgid ""
+"Build the translations of the guide with same parameters that will be "
+"used during the release:"
+msgstr ""
+
+#: ../../TRANSLATING.md:271
+msgid ""
+"Make sure there are no warnings or errors in the output. If there are, "
+"you will need to fix them before submitting the PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:272
+msgid ""
+"Make sure the translated version of the guide looks good in the browser "
+"by opening the `_build/html//index.html` file, where `` is "
+"the language you have been working on."
+msgstr ""
+
+#: ../../TRANSLATING.md:274
+msgid "If everything looks good, you can submit a PR with your changes."
+msgstr ""
+
+#: ../../TRANSLATING.md:277
+msgid ""
+"When you submit a PR for a translation, you should only include changes "
+"to one language. If you worked in multiple languages, please submit a "
+"separate PR for each language."
+msgstr ""
+
+#: ../../TRANSLATING.md:280
+msgid ""
+"Translations PRs will be tagged with a label indicating the language to "
+"make them easier to identify and review. For example, contributions to "
+"the Spanish translation will be tagged with 'lang-es'."
+msgstr ""
+
+#: ../../TRANSLATING.md:282
+msgid "TODO: This tagging could be automated with a GitHub Actions."
+msgstr ""
+
+#: ../../TRANSLATING.md:284
+msgid ""
+"When you submit the PR, make sure to include a short description of the "
+"changes you made and any context that might be helpful for the reviewer "
+"(e.g., you translated new strings, you reviewed fuzzy entries, you fixed "
+"typos, etc.)"
+msgstr ""
+
+#: ../../TRANSLATING.md:286
+msgid "The Review Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:288
+msgid ""
+"The review process for a translation contribution is similar to the "
+"review process for any other contribution to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:290
+msgid ""
+"TODO: This section needs more work, depending on the review workflow we "
+"decide to adopt. Other projects usually assign a coordinator/editor for "
+"each language, who is responsible for reviewing and merging translation "
+"contributions."
+msgstr ""
+
+#: ../../TRANSLATING.md:292
+msgid ""
+"Each language has an assigned editor who is responsible for reviewing and"
+" merging translation contributions. The editor will review the changes to"
+" make sure they are accurate and consistent with the style and tone of "
+"the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:294
+msgid ""
+"Sometimes the editor may ask for clarification or suggest changes to "
+"improve the translation. If this happens, you can make the requested "
+"changes and push them to the same branch where you submitted the original"
+" PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:296
+msgid ""
+"When the editor is satisfied with the translation, they will merge the "
+"PR. The translated version of the guide will be available on the "
+"pyOpenSci website once the language is released."
+msgstr ""
+
+#: ../../TRANSLATING.md:298
+msgid "The Release Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:300
+msgid ""
+"If a language is ready to go live, the maintainers will add the language "
+"code to the `release_languages` list in the `conf.py` configuration file."
+msgstr ""
+
+#: ../../TRANSLATING.md:302
+msgid ""
+"When the guide is built for release in CI, Sphinx will also generate the "
+"translated versions of the guide for the languages in the "
+"`release_languages` list."
+msgstr ""
+
+#: ../../TRANSLATING.md:304
+msgid ""
+"Translations are released in the same way as the English version of the "
+"guide, and the translated versions will be available in folders named "
+"after the language code. For example, the Spanish translation will be "
+"available at: `https://www.pyopensci.org/python-package-guide/es/` when "
+"it is published online."
+msgstr ""
+
+#: ../../TRANSLATING.md:306
+msgid "Frequently Asked Questions (FAQ)"
+msgstr ""
+
+#: ../../TRANSLATING.md:308
+msgid "How do I know which strings need to be translated?"
+msgstr ""
+
+#: ../../TRANSLATING.md:310
+msgid ""
+"When you run the `sphinx-intl stat` command, you will see a list of `.po`"
+" files with the number of translated, fuzzy, and untranslated strings. "
+"You can start by working on the files with the most untranslated strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:312
+msgid "What happens when a string has changed in the original English text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:314
+msgid ""
+"If a string has changed in the original English version, it will be "
+"marked as `fuzzy` in the translation file the next time it is updated "
+"(`update-language` or `update-release-languages`). Contributors working "
+"on the translation can then review the fuzzy entries and make the "
+"necessary changes to ensure it is accurate, before removing the `fuzzy` "
+"tag."
+msgstr ""
+
+#: ../../TRANSLATING.md:316
+msgid "How do I handle links in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:318
+msgid ""
+"You should keep the links in the translated text, but make sure to update"
+" the link text if necessary. For example, if the original English text "
+"contains a link to `[What is a Python package?](/tutorials/intro)`, you "
+"should keep the link in the translated text but update the link text to "
+"`[¿Que es un paquete de Python?](/tutorials/intro)`."
+msgstr ""
+
+#: ../../TRANSLATING.md:320
+msgid "How do I handle formatting in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:322
+msgid ""
+"You should keep the formatting in the translated text, but make sure to "
+"translate the text inside the formatting tags as well. For example, if "
+"the original English text is `**Test special cases:**`, you should keep "
+"the bold formatting in the translated text but update the text inside the"
+" formatting tags to `**Prueba casos especiales:**`."
+msgstr ""
+
+#: ../../TRANSLATING.md:324
+msgid "How do I handle strings that are too long for a single line?"
+msgstr ""
+
+#: ../../TRANSLATING.md:326
+msgid ""
+"If the original English text is too long for a single line, it may be "
+"split into multiple lines. Multiline strings in the `.po` file are "
+"indicated by an empty string in the `msgid` and `msgstr` fields, followed"
+" by the continuation of the text in the next line. For example:"
+msgstr ""
+
+#: ../../TRANSLATING.md:339
+msgid "How do I translate images?"
+msgstr ""
+
+#: ../../TRANSLATING.md:341
+msgid ""
+"You should not translate images in the guide. Producing translated "
+"versions of images is a complex process that requires additional tools "
+"and resources, and it is not typically done unless the translated images "
+"are created alongside the original images. More often, the text around "
+"the image is modified to include any necessary translations."
+msgstr ""
+
+#: ../../TRANSLATING.md:343
+msgid ""
+"In some special cases, an image might be critical to the understanding of"
+" the content. In those cases, the translations will be handled by the "
+"maintainers and editors outside this workflow."
+msgstr ""
+
+#: ../../TRANSLATING.md:345
+msgid ""
+"I am interested in translating the guide into a language that is not "
+"listed. How can I get started?"
+msgstr ""
+
+#: ../../TRANSLATING.md:347
+msgid ""
+"If you want to start a new translation of the guide into a language that "
+"is not listed, you should [create an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository to let the maintainers "
+"know that you intend to work on it. This will help avoid duplication of "
+"effort and ensure that the maintainers are ready to review your "
+"contribution when you are done."
+msgstr ""
+
+#: ../../TRANSLATING.md:349
+msgid "How do I know when a translation is ready to be released?"
+msgstr ""
+
+#: ../../TRANSLATING.md:351
+msgid ""
+"When a translation is ready to be included in the next release of the "
+"guide, the maintainers will add the language code to the "
+"`release_languages` list in the `conf.py` configuration file. This will "
+"trigger the build of the translation during the release process, and the "
+"translated version of the guide will be available on the pyOpenSci "
+"website."
+msgstr ""
+
+#: ../../TRANSLATING.md:353
+msgid ""
+"TODO: There are many approaches here, some projects release a translation"
+" as soon as some strings are translated, others wait until a certain "
+"percentage of the content is translated."
+msgstr ""
+
+#: ../../TRANSLATING.md:355
+msgid "How can I get help with my translation?"
+msgstr ""
+
+#: ../../TRANSLATING.md:357
+msgid ""
+"If you have any questions or need help with your translation, you can "
+"create an [issue](https://github.com/pyOpenSci/python-package-"
+"guide/issues) in the [Packaging Guide "
+"repository](https://github.com/pyOpenSci/python-package-guide)"
+msgstr ""
+
+#: ../../TRANSLATING.md:359
+msgid ""
+"You can also ask in the PyOpenSci Discord server ([click "
+"here](https://discord.gg/NQtTTqtv) to join), you will find a general "
+"channel for questions related to our workflow, processes, and tools "
+"(translation-general) and channels for each of the languages we are "
+"working on (spanish-translation, japanese-translation, etc)."
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/continuous-integration.po b/locales/de/LC_MESSAGES/continuous-integration.po
new file mode 100644
index 000000000..73e19cc1f
--- /dev/null
+++ b/locales/de/LC_MESSAGES/continuous-integration.po
@@ -0,0 +1,241 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2025.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-18 13:00-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.16.0\n"
+
+#: ../../continuous-integration/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:11
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:13
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:15
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:20
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:22
+msgid ""
+"When you’re ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:25
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:26
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:27
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:29
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:31
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:32
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:34
+msgid "What is Continuous Deployment (CD)?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:36
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:38
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:39
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:41
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:43
+msgid "Why use CI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:45
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:47
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:49
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:52
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:55
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:57
+msgid "CI / CD platforms"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:59
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:62
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:65
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:67
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:72
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:75
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:76
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:77
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:80
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:82
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "What is CI?"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "Continuous Integration"
+msgstr ""
+
+#: ../../continuous-integration/index.md:2
+msgid ""
+"Continuous Integration (CI) and Continuous Deployment (CD) for your "
+"Python package"
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/documentation.po b/locales/de/LC_MESSAGES/documentation.po
new file mode 100644
index 000000000..ee066eea6
--- /dev/null
+++ b/locales/de/LC_MESSAGES/documentation.po
@@ -0,0 +1,3405 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../documentation/glossary.md:7
+msgid "Python packaging glossary"
+msgstr ""
+
+#: ../../documentation/glossary.md:9
+msgid "Core packaging"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "`__init__.py`"
+msgstr ""
+
+#: ../../documentation/glossary.md:13
+msgid ""
+"A special Python file that marks a directory as a Python package. When "
+"Python sees this file, it knows the folder contains importable code. It "
+"can either be empty or contain code that runs when the package is "
+"imported."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "API token"
+msgstr ""
+
+#: ../../documentation/glossary.md:19
+msgid ""
+"A secret key used to authenticate with PyPI or TestPyPI when publishing a"
+" package. You generate one in your account settings and use it in place "
+"of a password. **Treat it like a password and never share it or commit it"
+" to version control**."
+msgstr ""
+
+#: ../../documentation/glossary.md:12
+msgid "Build backend"
+msgstr ""
+
+#: ../../documentation/glossary.md:25
+msgid ""
+"The tool that does the actual work of building your package into "
+"distribution files. In this guide, the build backend is Hatchling. You "
+"specify it in your `pyproject.toml` file under `[build-system]`."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid ""
+"You execute a build by running `hatch build`. Alternatively, you can run"
+" `python -m build`. [Reference: official Python Packaging "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend)"
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Distribution files"
+msgstr ""
+
+#: ../../documentation/glossary.md:33
+msgid ""
+"The files you upload to PyPI so others can install your package. There "
+"are two common types: a wheel (`.whl`) and a source distribution "
+"(`.tar.gz`). See also `Wheel (.whl)` and `Source distribution (sdist)`."
+msgstr ""
+
+#: ../../documentation/glossary.md:26
+msgid "Module"
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid ""
+"A single Python file (`.py`) containing code such as functions, classes, "
+"or variables that can be imported. A package is made up of one or more "
+"modules."
+msgstr ""
+
+#: ../../documentation/glossary.md:31
+msgid "`pyproject.toml`"
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid ""
+"The configuration file at the root of your Python package. Written in "
+"TOML format, it stores metadata such as name, version, authors, and "
+"license. It can also configure tools such as Hatch, uv, and pytest. See "
+"also [Make your Python package PyPI ready](../tutorials/pyproject-toml)."
+msgstr ""
+
+#: ../../documentation/glossary.md:37
+msgid "Python package"
+msgstr ""
+
+#: ../../documentation/glossary.md:50
+msgid ""
+"A directory of Python code structured so it can be installed, imported, "
+"and shared with others. A package includes at least an `__init__.py` file"
+" and a `pyproject.toml` file. This is sometimes referred to as a "
+"**regular package**."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid ""
+"Info: You may hear the term **namespaced package** which is not really a "
+"package at all but a container of subpackages. This is out of scope for "
+"this guide. If interested, consult the [Python "
+"documentation](https://docs.python.org/3/glossary.html#term-namespace-"
+"package)."
+msgstr ""
+
+#: ../../documentation/glossary.md:47
+msgid "PyPI / TestPyPI"
+msgstr ""
+
+#: ../../documentation/glossary.md:60
+msgid ""
+"PyPI (the Python Package Index) is the official repository where Python "
+"packages are published and installed from. TestPyPI is a separate "
+"practice environment used for learning and testing publishing workflows. "
+"See [pypi.org](https://pypi.org) and "
+"[test.pypi.org](https://test.pypi.org). See also [Publish your Python "
+"package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid "Source distribution (sdist)"
+msgstr ""
+
+#: ../../documentation/glossary.md:68
+msgid ""
+"One of the two distribution file types for a Python package. The sdist "
+"(`.tar.gz`) contains source code and project files. When someone installs"
+" from an sdist, tools build the package locally first. See also [Publish "
+"your Python package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:61
+msgid "TOML"
+msgstr ""
+
+#: ../../documentation/glossary.md:74
+msgid ""
+"Tom's Obvious Minimal Language, a simple format for configuration files. "
+"TOML organizes data into tables such as `[project]` or `[tool.hatch]` and"
+" arrays. `pyproject.toml` uses TOML."
+msgstr ""
+
+#: ../../documentation/glossary.md:66
+msgid "Trusted publishing"
+msgstr ""
+
+#: ../../documentation/glossary.md:79
+msgid ""
+"A secure way to publish to PyPI using GitHub Actions instead of an API "
+"token. Rather than storing a secret token, you configure PyPI to trust "
+"your repository directly. See also [Setup Trusted Publishing for secure "
+"and automated publishing via GitHub Actions](../tutorials/trusted-"
+"publishing)."
+msgstr ""
+
+#: ../../documentation/glossary.md:72
+msgid "Wheel (.whl)"
+msgstr ""
+
+#: ../../documentation/glossary.md:85
+msgid ""
+"The binary distribution type for a Python package. A wheel is a pre-built"
+" binary format (`.whl`, a ZIP file) that installs directly without a "
+"build step. For many pure Python packages, one wheel can work across "
+"platforms. See also [Publish your Python package to PyPI](../tutorials"
+"/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:92
+msgid "Tools"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "copier"
+msgstr ""
+
+#: ../../documentation/glossary.md:96
+msgid ""
+"A command-line tool for creating new projects from templates. In this "
+"guide, you can use copier with the pyOpenSci package template to set up "
+"structure, configuration, and tooling quickly. See "
+"[copier.readthedocs.io](https://copier.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "coverage.py"
+msgstr ""
+
+#: ../../documentation/glossary.md:102
+msgid ""
+"A tool that measures how much of your code is exercised by tests, often "
+"as a percentage. It shows which lines and branches are covered. See "
+"[coverage.readthedocs.io](https://coverage.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:11
+msgid "Hatch"
+msgstr ""
+
+#: ../../documentation/glossary.md:107
+msgid ""
+"A modern Python packaging and project management tool. In this guide, "
+"Hatch is used to build packages, manage environments, run scripts, and "
+"publish. Configuration lives in `pyproject.toml`. See "
+"[hatch.pypa.io](https://hatch.pypa.io). See also [Get to know "
+"Hatch](../tutorials/get-to-know-hatch)."
+msgstr ""
+
+#: ../../documentation/glossary.md:18
+msgid "Hatchling"
+msgstr ""
+
+#: ../../documentation/glossary.md:114
+msgid ""
+"The build backend used by Hatch. When you run `python -m build` or `hatch"
+" build`, Hatchling reads `pyproject.toml` and creates sdist and wheel "
+"files. See "
+"[hatch.pypa.io/latest/backend](https://hatch.pypa.io/latest/backend/)."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "pip"
+msgstr ""
+
+#: ../../documentation/glossary.md:120
+msgid ""
+"Python's default package installer. You can use it to install packages "
+"from PyPI into an environment with commands such as `pip install package-"
+"name`. See [pip.pypa.io](https://pip.pypa.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid "pytest"
+msgstr ""
+
+#: ../../documentation/glossary.md:125
+msgid ""
+"A widely used Python testing framework for discovering and running tests."
+" In this guide, pytest often runs through Hatch scripts. See "
+"[docs.pytest.org](https://docs.pytest.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:34
+msgid "Ruff"
+msgstr ""
+
+#: ../../documentation/glossary.md:130
+msgid ""
+"A fast Python linter and formatter. It checks style and can automatically"
+" fix many styling issues. See "
+"[docs.astral.sh/ruff](https://docs.astral.sh/ruff)."
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid "Sphinx"
+msgstr ""
+
+#: ../../documentation/glossary.md:135
+msgid ""
+"A documentation generator for Python projects. Sphinx reads docstrings "
+"and documentation files to build a docs site. See [sphinx-"
+"doc.org](https://www.sphinx-doc.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid "Twine"
+msgstr ""
+
+#: ../../documentation/glossary.md:140
+msgid ""
+"A tool for securely uploading distribution files to PyPI or TestPyPI. See"
+" [twine.readthedocs.io](https://twine.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:48
+msgid "uv"
+msgstr ""
+
+#: ../../documentation/glossary.md:144
+msgid ""
+"A fast Python package and environment manager. In this guide, you can use"
+" uv to manage dependencies and run commands in project environments. See "
+"[docs.astral.sh/uv](https://docs.astral.sh/uv)."
+msgstr ""
+
+#: ../../documentation/glossary.md:149
+msgid "Hatch-specific concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Hatch environment"
+msgstr ""
+
+#: ../../documentation/glossary.md:153
+msgid ""
+"An isolated Python environment managed by Hatch. You can define multiple "
+"environments in `pyproject.toml` for testing, docs, builds, and style "
+"checks, each with its own dependencies and scripts."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Script (Hatch)"
+msgstr ""
+
+#: ../../documentation/glossary.md:158
+msgid ""
+"A named command defined inside a Hatch environment in `pyproject.toml`. "
+"Scripts provide shortcuts such as `hatch run build:check` and `hatch run "
+"test:run`."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Task runner"
+msgstr ""
+
+#: ../../documentation/glossary.md:163
+msgid ""
+"A tool that automates repetitive development workflows. Hatch can "
+"function as a task runner by letting you define scripts that run in "
+"specific environments."
+msgstr ""
+
+#: ../../documentation/glossary.md:168
+msgid "Development concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code coverage"
+msgstr ""
+
+#: ../../documentation/glossary.md:172
+msgid ""
+"A measure of how much source code executes during tests, usually as a "
+"percentage. High coverage does not guarantee no bugs, but low coverage "
+"can indicate untested areas."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Dependencies"
+msgstr ""
+
+#: ../../documentation/glossary.md:177
+msgid ""
+"Other Python packages needed for your package to work. Common classes "
+"include required dependencies, optional dependencies, and development "
+"dependencies."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Docstring"
+msgstr ""
+
+#: ../../documentation/glossary.md:182
+msgid ""
+"A string at the top of a function, class, or module that describes "
+"behavior, inputs, and outputs. Docstrings can be used by tools such as "
+"Sphinx to generate API documentation."
+msgstr ""
+
+#: ../../documentation/glossary.md:15
+msgid "End-to-end test"
+msgstr ""
+
+#: ../../documentation/glossary.md:187
+msgid ""
+"A test that simulates a complete user workflow from start to finish. In "
+"scientific packages, tutorials executed during docs builds can serve as "
+"end-to-end tests."
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Integration test"
+msgstr ""
+
+#: ../../documentation/glossary.md:192
+msgid ""
+"A test that checks how multiple functions or components work together. "
+"Unlike a unit test, it verifies behavior across a broader workflow."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "Linting"
+msgstr ""
+
+#: ../../documentation/glossary.md:196
+msgid ""
+"Automatic checks for style issues, formatting problems, and potential "
+"errors in code."
+msgstr ""
+
+#: ../../documentation/glossary.md:28
+msgid "Unit test"
+msgstr ""
+
+#: ../../documentation/glossary.md:200
+msgid ""
+"A test that checks one function or method in isolation. Unit tests are "
+"fast and help pinpoint where failures occur."
+msgstr ""
+
+#: ../../documentation/glossary.md:32
+msgid "Version specifier / lower bound"
+msgstr ""
+
+#: ../../documentation/glossary.md:204
+msgid ""
+"A constraint on which dependency versions are accepted. For example, "
+"`numpy>=1.24` sets a lower bound so versions older than 1.24 are not "
+"used."
+msgstr ""
+
+#: ../../documentation/glossary.md:209
+msgid "Git / GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "git"
+msgstr ""
+
+#: ../../documentation/glossary.md:213
+msgid "A tool for version control."
+msgstr ""
+
+#: ../../documentation/glossary.md:3
+msgid "GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md:216
+msgid ""
+"A service providing accounts and organizations to facilitate sharing "
+"repositories."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "GitHub Codespace"
+msgstr ""
+
+#: ../../documentation/glossary.md:219
+msgid ""
+"A cloud-based development environment that runs in a browser. See "
+"[github.com/features/codespaces](https://github.com/features/codespaces)."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Scoped commit"
+msgstr ""
+
+#: ../../documentation/glossary.md:223
+msgid ""
+"A git commit that makes one focused change, such as one fix or one "
+"feature update. Scoped commits improve reviewability and history clarity."
+msgstr ""
+
+#: ../../documentation/glossary.md:228
+msgid "Documentation"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code of conduct"
+msgstr ""
+
+#: ../../documentation/glossary.md:232
+msgid ""
+"A document that sets expectations for how contributors and community "
+"members treat one another in a project."
+msgstr ""
+
+#: ../../documentation/glossary.md:4
+msgid "Contributing guide"
+msgstr ""
+
+#: ../../documentation/glossary.md:236
+msgid ""
+"A document, often `CONTRIBUTING.md`, that explains how others can "
+"contribute, including setup steps, workflow, and code style."
+msgstr ""
+
+#: ../../documentation/glossary.md:8
+msgid "MyST Markdown"
+msgstr ""
+
+#: ../../documentation/glossary.md:240
+msgid ""
+"Markedly Structured Text, a Markdown flavor that supports Sphinx "
+"directives and roles. It allows Markdown-based docs while keeping Sphinx "
+"features. See [myst-parser.readthedocs.io](https://myst-"
+"parser.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:14
+msgid "README"
+msgstr ""
+
+#: ../../documentation/glossary.md:246
+msgid ""
+"The front page of your package on GitHub and often on PyPI. A good README"
+" explains purpose, installation, usage, and support options."
+msgstr ""
+
+#: ../../documentation/glossary.md:250
+msgid "AI"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Generative AI / LLM"
+msgstr ""
+
+#: ../../documentation/glossary.md:254
+msgid ""
+"Generative AI systems produce content such as text, code, or images. LLM "
+"stands for Large Language Model, the technology behind tools such as "
+"ChatGPT, GitHub Copilot, and Claude."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:1
+msgid "Tools to Build and Host your Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:3
+msgid ""
+"The most common tool for building documentation in the Python ecosystem "
+"currently is Sphinx. However, some maintainers are using tools like "
+"[mkdocs](https://www.mkdocs.org/) for documentation. It is up to you to "
+"use the platform that you prefer for your documentation!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:8
+msgid ""
+"In this section, we introduce Sphinx as a common tool to build "
+"documentation. We talk about various syntax options that you can use when"
+" writing Sphinx documentation including mySt and rST."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:12
+msgid ""
+"We also talk about ways to publish your documentation online and Sphinx "
+"tools that might help you optimize your documentation website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:1
+msgid "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:3
+msgid "There are three commonly used syntaxes for creating Python documentation:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:4
+msgid ""
+"[markdown](https://www.markdownguide.org/): Markdown is an easy-to-learn "
+"text syntax. It is the default syntax used in Jupyter Notebooks. There "
+"are tools that you can add to a Sphinx website that allow it to render "
+"markdown as html. However, using markdown to write documentation has "
+"limitations. For instance if you want to add references, colored call out"
+" blocks and other custom elements to your documentation, you will need to"
+" use either **myST** or **rST**."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:8
+msgid ""
+"[rST (ReStructured Text):](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/basics.html). **rST** is the "
+"native syntax that sphinx supports. rST was the default syntax used for "
+"documentation for many years. However, in recent years myST has risen to "
+"the top as a favorite for documentation given the flexibility that it "
+"allows."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:9
+msgid ""
+"[myST:](https://myst-parser.readthedocs.io/en/latest/intro.html) myST is "
+"a combination of `markdown` and `rST` syntax. It is a nice option if you "
+"are comfortable writing markdown. `myst` is preferred by many because it "
+"offers both the rich functionality of rST combined with a simple-to-write"
+" markdown syntax."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:12
+msgid ""
+"While you can chose to use any of the syntaxes listed above, we suggest "
+"using `myST` because:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:15
+msgid "It is a simpler syntax and thus easier to learn;"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:16
+msgid ""
+"The above simplicity will make it easier for more people to contribute to"
+" your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:17
+msgid ""
+"Most of your core Python package text files, such as your README.md file,"
+" are already in `.md` format"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:18
+msgid ""
+"`GitHub` and `Jupyter Notebooks` support markdown thus it's more widely "
+"used in the scientific ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:22
+msgid ""
+"If you are on the fence about myST vs rst, you might find that **myST** "
+"is easier for more people to contribute to."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:1
+msgid "How to publish your Python package documentation online"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:3
+msgid ""
+"We suggest that you setup a hosting service for your Python package "
+"documentation. Two free and commonly used ways to quickly create a "
+"documentation website hosting environment are below."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:7
+msgid ""
+"You can host your documentation yourself using [GitHub "
+"Pages](https://pages.github.com/) or another online hosting service."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:8
+msgid ""
+"You can host your documentation using [Read the "
+"Docs](https://readthedocs.org/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:10
+msgid "What is Read the Docs ?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:11
+msgid ""
+"[Read the Docs](https://readthedocs.org/) is a documentation hosting "
+"service that supports publishing your project's documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:13
+msgid ""
+"Read the Docs is a fully featured, free, documentation hosting service. "
+"Some of its many features include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:16
+msgid ""
+"Is free to host your documentation (but there are also paid tiers if you "
+"wish to customize hosting)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:17
+msgid "Automates building your documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:18
+msgid ""
+"Allows you to turn on integration with pull requests where you can view "
+"documentation build progress (success vs failure)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:19
+msgid ""
+"Supports versioning of your documentation which allows users to refer to "
+"older tagged versions of the docs if they are using older versions of "
+"your package."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:20
+msgid "Supports downloading of documentation in PDF and other formats."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:21
+msgid ""
+"You can customize the documentation build using a **.readthedocs.yaml** "
+"file in your GitHub repository."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:24
+msgid "What is GitHub Pages?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:25
+msgid ""
+"[GitHub Pages](https://docs.github.com/en/pages/getting-started-with-"
+"github-pages/what-is-github-pages) is a free web hosting service offered "
+"by GitHub. Using GitHub pages, you can build your documentation locally "
+"or using a Continuous Integration setup, and then push to a branch in "
+"your GitHub repository that is setup to run the GitHub Pages web build."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:33
+msgid "Read the Docs vs GitHub Pages"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:35
+msgid ""
+"GitHub pages is a great option for your documentation deployment. "
+"However, you will need to do a bit more work to build and deploy your "
+"documentation if you use GitHub pages."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:39
+msgid ""
+"Read the Docs can be setup in your Read the Docs user account. The "
+"service automates the entire process of building and deploying your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:42
+msgid ""
+"If you don't want to maintain a documentation website for your Python "
+"package, we suggest using the Read the Docs website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:1
+msgid "Using Sphinx to Build Python Package Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:17
+msgid ""
+"On this page we discuss using [Sphinx](https://www.sphinx-doc.org/) to "
+"build your user-facing package documentation. While Sphinx is currently "
+"the most commonly-used tool in the scientific Python ecosystem, you are "
+"welcome to explore other tools to build documentation such as "
+"[mkdocs](https://www.mkdocs.org/) which is gaining popularity in the "
+"Python packaging ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:25
+msgid "Examples of documentation websites that we love:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:27
+msgid "[GeoPandas](https://geopandas.org/en/stable/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:28
+msgid ""
+"[View rst to create landing "
+"page](https://raw.githubusercontent.com/geopandas/geopandas/main/doc/source/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:29
+msgid "[verde](https://www.fatiando.org/verde/latest/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:30
+msgid ""
+"[View verde landing page code - rst "
+"file.](https://github.com/fatiando/verde/blob/main/doc/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:31
+msgid ""
+"[Here is our documentation if you want to see a myST example of a landing"
+" page.](https://github.com/pyOpenSci/python-package-"
+"guide/blob/main/index.md)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:34
+msgid "Sphinx - a static site generator"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:36
+msgid ""
+"Sphinx is a [static-site "
+"generator](https://www.cloudflare.com/learning/performance/static-site-"
+"generator/). A static site generator is a tool that creates html for a "
+"website based upon a set of templates. The html files are then served "
+"\"Statically\" which means that there is no generation or modification of"
+" the files on the fly."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:39
+msgid "Sphinx is written using Python."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:41
+msgid "Sphinx sites can be customized using extensions and themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:43
+msgid ""
+"The functionality of Sphinx can be extended using extensions and themes. "
+"A few examples include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:46
+msgid ""
+"You can apply documentation themes for quick generation of beautiful "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:47
+msgid ""
+"You can [automatically create documentation for your package's functions "
+"and classes (the package's API) from docstrings in your code using the "
+"autodoc extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/autodoc.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:48
+msgid ""
+"You can [run and test code examples in your docstrings using the doctest "
+"extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:49
+msgid ""
+"While Sphinx natively supports the `rST` syntax, you can add custom "
+"syntax parsers to support easier-to-write syntax using tools such as [the"
+" MyST parser](https://myst-parser.readthedocs.io/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:51
+msgid "Commonly used Sphinx themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:53
+msgid ""
+"You are free to use whatever Sphinx theme that you prefer. However, the "
+"most common Sphinx themes used in the Python scientific community "
+"include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:57
+msgid "[pydata-sphinx-theme](https://pydata-sphinx-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:58
+msgid "[sphinx-book-theme](https://sphinx-book-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:59
+msgid "[furo](https://pradyunsg.me/furo/quickstart/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:63
+msgid "This book is created using Sphinx and the `furo` theme."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:1
+msgid "Optimizing your documentation so search engines (and other users) find it"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:3
+msgid ""
+"If you are interested in more people finding your package, you may want "
+"to add some core Sphinx extensions (and theme settings) that will help "
+"search engines such as Google find your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:7
+msgid "Google Analytics"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:11
+msgid ""
+"Google analytics [is not compliant with the European General Data "
+"Protection Regulation (GDPR)](https://matomo.org/blog/2022/05/google-"
+"analytics-4-gdpr/). While there are many components to this regulation, "
+"one of the core elements is that you have to let users know on your site "
+"that you are collecting data and they have to consent. While it is "
+"possible to add infrastructure around Google Analytics to make it close "
+"to following GDPR regulations, the community is slowly shifting away from"
+" Google using open tools such as [Plausible](https://plausible.io/), "
+"[Cloudflare Web Analytics](https://www.cloudflare.com/web-analytics/) and"
+" [Matomo](https://matomo.org) for web analytics."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:13
+msgid ""
+"pyOpenSci is currently looking into free options for open source "
+"developers."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:16
+msgid ""
+"Some of the [sphinx themes such as the `pydata-sphinx-theme` and sphinx-"
+"book-theme have built in support for Google Analytics](https://pydata-"
+"sphinx-theme.readthedocs.io/en/latest/user_guide/analytics.html#google-"
+"analytics). However, if the theme that you chose does not offer Google "
+"Analytics support, you can use the [`sphinxcontrib-gtagjs` "
+"extension](https://github.com/attakei/sphinxcontrib-gtagjs). This "
+"extension will add a Google Analytics site tag to each page of your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:22
+msgid ""
+"[sphinx-sitemap](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/index.html) for search engine "
+"optimization"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:24
+msgid ""
+"While we are trying to move away from Google Analytics do to compliance "
+"and privacy issues, search engine optimization is still important. Google"
+" is the most popular search engine. And if your documentation is search "
+"optimized, users are more likely to find your package!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:30
+msgid ""
+"If you are interested in optimizing your documentation for search engines"
+" such as Google, you want a **sitemap.xml** file. You can submit this "
+"sitemap to Google and it will index your entire site. This over time can "
+"make the content on your site more visible to others when they search."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:36
+msgid "This extension is lightweight."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:38
+msgid ""
+"It [requires that you to add it to your Sphinx `conf.py` extension list "
+"and site your documentation base url](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/getting-started.html)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:40
+msgid "[sphinxext.opengraph](https://github.com/sphinx-doc/sphinxext-opengraph)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:42
+msgid ""
+"OpenGraph is an extension that allows you to add metadata to your "
+"documentation content pages. [The OpenGraph protocol allows other "
+"websites to provide a useful preview of the content on your page when "
+"shared](https://www.freecodecamp.org/news/what-is-open-graph-and-how-"
+"can-i-use-it-for-my-website/#heading-what-is-open-graph). This is "
+"important for when the pages in your documentation are shared on social "
+"media and even for shares on collaboration platforms like Slack and "
+"Discourse."
+msgstr ""
+
+#: ../../documentation/index.md:3
+msgid "Documentation Overview"
+msgstr ""
+
+#: ../../documentation/index.md:3 ../../documentation/index.md:10
+#: ../../documentation/index.md:21 ../../documentation/index.md:42
+msgid "Intro"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Document Your Code (API)"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Package Tutorials"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Write User Documentation"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Contributing File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Development Guide"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Changelog File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Docs for Contributors & Maintainers"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "README file"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Code of Conduct File"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "LICENSE files"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Community Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Sphinx for Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "myST vs Markdown vs rst"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publish Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Website Hosting and Optimization"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publication tools for your docs"
+msgstr ""
+
+#: ../../documentation/index.md:1
+msgid "Documentation for your Open Source Python Package"
+msgstr ""
+
+#: ../../documentation/index.md:55
+msgid ""
+"Please note that the tools discussed here are those that we see commonly "
+"used in the community. As tools evolve we will update this guide. If you "
+"are submitting a package for pyOpenSci peer review and use other tools "
+"that are not listed in our guide to build your package you can still "
+"submit for review! The tools listed here are suggestions, not "
+"requirements. Our requirements are focused on the documentation content "
+"of your package."
+msgstr ""
+
+#: ../../documentation/index.md:65
+msgid "Documentation is critical for your Python package's success"
+msgstr ""
+
+#: ../../documentation/index.md:67
+msgid ""
+"Documentation is as important to the success of your Python open source "
+"package as the code itself."
+msgstr ""
+
+#: ../../documentation/index.md:70
+msgid ""
+"Quality code is of course valuable as its how your package gets the tasks"
+" done. However, if users don't understand how to use your package in "
+"their workflows, then they won't use it."
+msgstr ""
+
+#: ../../documentation/index.md:73
+msgid ""
+"Further, explicitly documenting how to contribute is important if you "
+"wish to build a base of contributors to your package."
+msgstr ""
+
+#: ../../documentation/index.md:76
+msgid "Two types of Python package users"
+msgstr ""
+
+#: ../../documentation/index.md:78
+msgid ""
+"The documentation that you write for your package should target two types"
+" of users:"
+msgstr ""
+
+#: ../../documentation/index.md:81
+msgid "1. Basic Tool Users"
+msgstr ""
+
+#: ../../documentation/index.md:83
+msgid ""
+"Basic tool users are the people who will use your package code in their "
+"Python workflows. They might be new(er) to Python and/or data science. Or"
+" expert programmers. But they might not have a background in software "
+"development. These users need to know:"
+msgstr ""
+
+#: ../../documentation/index.md:88
+msgid "How to install your package"
+msgstr ""
+
+#: ../../documentation/index.md:89
+msgid "How to install dependencies that your package requires"
+msgstr ""
+
+#: ../../documentation/index.md:90
+msgid "How to get started using the code base"
+msgstr ""
+
+#: ../../documentation/index.md:91
+msgid ""
+"Information on how to cite your code / give you credit if they are using "
+"it in a research application."
+msgstr ""
+
+#: ../../documentation/index.md:93
+msgid ""
+"Information on the license that your code uses so they know how they can "
+"or can't use the code in an operational setting."
+msgstr ""
+
+#: ../../documentation/index.md:96
+msgid "2. Potential tool contributors"
+msgstr ""
+
+#: ../../documentation/index.md:98
+msgid ""
+"The other subset of users are more experienced and/or more engaged with "
+"your package. As such they are potential contributors. These users:"
+msgstr ""
+
+#: ../../documentation/index.md:102
+msgid "might have a software development background,"
+msgstr ""
+
+#: ../../documentation/index.md:103
+msgid ""
+"might also be able to contribute bug fixes to your package or updates to "
+"your documentation"
+msgstr ""
+
+#: ../../documentation/index.md:104
+msgid ""
+"might also just be users who will find spelling errors in your "
+"documentation, or bugs in your tutorials."
+msgstr ""
+
+#: ../../documentation/index.md:106
+msgid ""
+"These users need all of the things that a basic user needs. But, they "
+"also need to understand how you'd like for them to contribute to your "
+"package. These potential contributors need:"
+msgstr ""
+
+#: ../../documentation/index.md:110
+msgid ""
+"A development guide to help them understand the infrastructure used in "
+"your package repository."
+msgstr ""
+
+#: ../../documentation/index.md:111
+msgid ""
+"Contributing guidelines that clarify the types of contributions that you "
+"welcome and how you'd prefer those contributions to be submitted."
+msgstr ""
+
+#: ../../documentation/index.md:114
+msgid ""
+"It's important to remember that the definition of what a contribution is "
+"can be broad. A contribution could be something as simple as a bug "
+"report. Or fixing a spelling issue in your documentation. Or it could be "
+"a code fix that includes a new test that covers an edge-case that they "
+"discovered."
+msgstr ""
+
+#: ../../documentation/index.md:120
+msgid "Documentation elements that pyOpenSci looks for reviewing a Python package"
+msgstr ""
+
+#: ../../documentation/index.md:122
+msgid ""
+"In the pyOpenSci open peer review, we look for a documentation structure "
+"that supports both your tool users and potential contributors. The files "
+"and elements that we look for specifically can be found in our peer "
+"review check list (see link below)."
+msgstr ""
+
+#: ../../documentation/index.md:127
+msgid ""
+"In this guide, we discuss each required element, and also discuss other "
+"elements that you should consider in your package's documentation in more"
+" detail."
+msgstr ""
+
+#: ../../documentation/index.md:131
+msgid "View pyOpenSci peer review check list"
+msgstr ""
+
+#: ../../documentation/index.md:138
+msgid ""
+"Image showing the files in the the MovingPandas GitHub repository. Files "
+"in the image include code of conduct.md contributing.md license.txt and "
+"readme.md."
+msgstr ""
+
+#: ../../documentation/index.md:144
+msgid ""
+"An example from the MovingPandas GitHub repository with all of the major "
+"files in it including CONTRIBUTING.md, README.md, CODE_OF_CONDUCT.md and "
+"a LICENSE.txt file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/index.md:147
+msgid "What's next in this Python package documentation section?"
+msgstr ""
+
+#: ../../documentation/index.md:149
+msgid ""
+"In this section of the pyOpenSci package guide, we will walk you through "
+"best practices for setting up documentation for your Python package. We "
+"will also suggest tools that you can use to build your user-facing "
+"documentation website."
+msgstr ""
+
+#: ../../documentation/index.md:154
+msgid "Todo"
+msgstr ""
+
+#: ../../documentation/index.md:156
+msgid ""
+"Python version support You should always be explicit about which versions"
+" of Python your package supports. Keeping compatibility with old Python "
+"versions can be difficult as functionality changes. A good rule of thumb "
+"is that the package should support, at least, the latest three Python "
+"versions (e.g., 3.8, 3.7, 3.6)."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:1
+msgid "CHANGELOG.md Guide"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:3
+msgid "Introduction"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:5
+msgid ""
+"The `CHANGELOG.md` document serves as a valuable resource for developers "
+"and users alike to track the evolution of a project over time. "
+"Understanding the structure and purpose of a changelog helps users and "
+"contributors stay informed about new features, bug fixes, and other "
+"changes introduced in each release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:7
+msgid "What is CHANGELOG.md?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:9
+msgid ""
+"The primary purpose of `CHANGELOG.md` is to provide a record of notable "
+"changes made to the project with each new release. This document helps "
+"users understand what has been added, fixed, modified, or removed with "
+"each version of the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:11
+msgid ""
+"[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) is a great, "
+"simple resource for understanding what a changelog is and how to create a"
+" good changelog. It also includes examples of things to avoid."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:13
+msgid "Versioning your Python package and semantic versioning"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:16
+msgid ""
+"An important component of a package that serves as the backbone behind "
+"the changelog file is a good versioning scheme. Semantic Versioning is "
+"widely used across Python packages."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:17
+msgid ""
+"[Creating New Versions of Your Python Package](../../package-structure-"
+"code/python-package-versions.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:18
+msgid "[Semantic Versioning](https://semver.org)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:21
+msgid "Why is it important?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:23
+msgid ""
+"A well-maintained changelog is essential for transparent communication "
+"with users and developers. It serves as a centralized hub for documenting"
+" changes and highlights the progress made in each release. By keeping the"
+" changelog up-to-date, project maintainers can build trust with their "
+"user base and demonstrate their commitment to improving the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:25
+msgid "What does it include?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:27
+msgid ""
+"The contents of a `CHANGELOG.md` file typically follow a structured "
+"format, detailing the changes introduced in each release. While the exact"
+" format may vary depending on the project's conventions, some common "
+"elements found in changelogs for Python packages include:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:29
+msgid ""
+"**Versioning**: Clear identification of each release version using "
+"semantic versioning or another versioning scheme adopted by the project."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:31
+msgid ""
+"**Release Date**: The date when each version was released to the public, "
+"providing context for the timeline of changes."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:33
+msgid ""
+"**Change Categories**: Organizing changes into categories such as "
+"\"Added,\" \"Changed,\" \"Fixed,\" and \"Removed\" to facilitate "
+"navigation and understanding."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:35
+msgid ""
+"**Description of Changes**: A concise description of the changes made in "
+"each category, including new features, enhancements, bug fixes, and "
+"deprecated functionality."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:37
+msgid ""
+"**Links to Issues or Pull Requests**: References to relevant issue "
+"tracker items or pull requests associated with each change, enabling "
+"users to access more detailed information if needed."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:39
+msgid ""
+"**Upgrade Instructions**: Guidance for users on how to upgrade to the "
+"latest version, including any breaking changes or migration steps they "
+"need to be aware of."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:41
+msgid ""
+"**Contributor Recognition**: Acknowledgment of contributors who made "
+"significant contributions to the release, fostering a sense of community "
+"and appreciation for their efforts."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:43
+msgid "How do maintainers use it?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:45
+msgid "Often you will see a changelog that documents a few things:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:47
+msgid "Unreleased Section"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:49
+msgid ""
+"Unreleased commits are at the top of the changelog, commonly in an "
+"`Unreleased` section. This is where you can add new fixes, updates and "
+"features that have been added to the package since the last release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:51
+msgid "This section might look something like this:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:59
+msgid "Release Sections"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:61
+msgid ""
+"When you are ready to make a new release, you can move the elements into "
+"a section that is specific to that new release number."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:63
+msgid ""
+"This specific release section will sit below the unreleased section and "
+"can include any updates, additions, deprecations and contributors."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:65
+msgid ""
+"The unreleased section then always lives at the top of the file and new "
+"features continue to be added there. At the same time, after releasing a "
+"version like v1.0 all of its features remain in that specific section."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:83
+msgid "What does it look like?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:85
+msgid ""
+"This example comes from [Devicely](https://github.com/hpi-"
+"dhc/devicely/blob/main/CHANGELOG.md), a pyOpenSci accepted package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:3
+msgid "The CODE_OF_CONDUCT file - Python Packaging"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:5
+msgid "Example CODE_OF_CONDUCT files"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:8
+msgid ""
+"[SciPy Code of Conduct file - notice they included theirs in their "
+"documentation](https://docs.scipy.org/doc/scipy/dev/conduct/code_of_conduct.html)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:9
+msgid ""
+"[fatiando CODE_OF_CONDUCT.md "
+"file](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:12
+msgid ""
+"Your package should have a `CODE_OF_CONDUCT.md` file located the root of "
+"the repository. Once you have people using your package, you can consider"
+" the package itself as having a community around it. Some of this "
+"community uses your tool. These users may have questions or encounter "
+"challenges using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:18
+msgid ""
+"Others in the community might want to contribute to your tool. They might"
+" fix bugs, update documentation and engage with the maintainer team."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:22
+msgid "Why you need a CODE_OF_CONDUCT"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:24
+msgid ""
+"In order to keep this community healthy and to protect yourself, your "
+"maintainer team and your users from unhealthy behavior, it is important "
+"to have a [`CODE_OF_CONDUCT`](https://opensource.guide/code-of-conduct/)."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:28
+msgid ""
+"The `CODE_OF_CONDUCT` is important as it establishes what you expect in "
+"terms of how users and contributors interact with maintainers and each "
+"other. It also establishes rules and expectations which can then be "
+"enforced if need be to protect others from harmful and/or negative "
+"behaviors."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:34
+msgid ""
+"If you are not comfortable with creating your own `CODE_OF_CONDUCT` text,"
+" we encourage you to adopt the `CODE_OF_CONDUCT` language used in the "
+"[Contributor Covenant](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/). [Many other "
+"communities](https://www.contributor-covenant.org/adopters/) have adopted"
+" this `CODE_OF_CONDUCT` as their own. See the [Fatiando a Terra "
+"Geoscience Python community's example "
+"here.](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:2
+msgid "Your Python Package CONTRIBUTING File"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:4
+msgid ""
+"The **CONTRIBUTING.md** is the landing page guide for your project's "
+"contributors. It outlines how contributors can get involved, the "
+"contribution types that you welcome, and how contributors should interact"
+" or engage with you and your maintainer team. The contributor guide "
+"should also link to get-started resources that overview how to set up "
+"development environments, what type of workflow you expect on "
+"GitHub/GitLab, and anything else that contributors might need to get "
+"started."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:6
+msgid ""
+"This file benefits maintainers and contributors. For contributors, it "
+"provides a roadmap that helps them get started and makes their first "
+"contribution easier. For maintainers, it answers commonly asked questions"
+" and reduces the burden of explaining your process to every person who "
+"wants to contribute. This document creates a more collaborative and "
+"efficient development process for everyone."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:8
+msgid "CONTRIBUTING files lower barriers to entry"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:10
+msgid ""
+"The contributing file lowers barriers to entry for new and seasoned "
+"contributors as it provides a roadmap."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:12
+msgid ""
+"**For Contributors**: It provides clear instructions on contributing, "
+"from reporting issues to submitting pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:13
+msgid ""
+"**For Maintainers**: It streamlines contributions by setting expectations"
+" and standardizing processes, reducing the time spent clarifying common "
+"questions or handling incomplete issues or pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:15
+msgid ""
+"Including a well-written CONTRIBUTING.md file in your project is one way "
+"of making it more welcoming and open to new and seasoned contributors. It"
+" also helps create a smoother workflow for everyone involved."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:17
+msgid "Make it welcoming"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:19
+msgid ""
+"Make the guide welcoming. Use accessible language to encourage "
+"participation from contributors of all experience levels. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:21
+msgid ""
+"Avoid technical jargon or explain terms when necessary (for example, "
+"\"fork the repository\")."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:22
+msgid ""
+"Include a friendly introduction, such as \"Thank you for your interest in"
+" contributing! We're excited to collaborate with you.\""
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:23
+msgid "Highlight that all contributions, no matter how small, are valued."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:25
+msgid "What a CONTRIBUTING.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:27
+msgid "Example contributing files"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:30
+msgid ""
+"[PyGMT contributing "
+"file](https://github.com/GenericMappingTools/pygmt/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:31
+msgid ""
+"[Verde's contributing "
+"file](https://github.com/fatiando/verde/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:34
+msgid ""
+"Your Python package should include a file called **CONTRIBUTING.md** "
+"located in the root of your repository next to [your **README.md** file"
+"](readme-file)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:37
+msgid "The CONTRIBUTING.md file should include information about:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:39
+msgid "The types of contributions that you welcome"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:41
+msgid ""
+"Example: We welcome contributions of all kinds. If you want to address an"
+" existing issue, check out our issues in this repository and comment on "
+"the one that you'd like to help with. Otherwise, you can open a new "
+"issue..."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:43
+msgid ""
+"How you'd like contributions to happen. Clearly outline your contribution"
+" process. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:44
+msgid "Should contributors address open issues"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:45
+msgid "Are new issues welcome?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:46
+msgid ""
+"Should contributors open a pull request (PR) directly or discuss changes "
+"first?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:48
+msgid ""
+"Include instructions for the fork and pull request workflow and link to "
+"resources or guides explaining these steps (if available)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:49
+msgid ""
+"Guidelines that you have in place for users submitting issues, pull "
+"requests, or asking questions."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:51
+msgid ""
+"If you have a [development guide](development-guide), link to it. This "
+"guide should provide clear instructions on how to set up your development"
+" environment locally. It also should overview CI tools that you have that"
+" could simplify the contribution process (for example, pre-[commit.ci "
+"bot](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/code-style-linting-format.html#pre-commit-ci), and so on), [linters,"
+" code formatters](https://www.pyopensci.org/python-package-guide/package-"
+"structure-code/code-style-linting-format.html#code-linting-formatting-"
+"and-styling-tools), and so on."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:53
+msgid ""
+"This guide should also include information for someone interested in "
+"asking questions. Some projects accept questions as GitHub or GitLab "
+"issues. Others use GitHub Discussions, Discourse, or even a Discord "
+"server."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:56
+msgid "The contributing file should also include:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:58
+msgid "A link to your [code of conduct](coc-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:59
+msgid "A link to your project's [LICENSE](license-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:60
+msgid "A link to a [development guide](development-guide) if you have one"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:62
+msgid "Summary"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:64
+msgid ""
+"A well-crafted CONTRIBUTING.md file is welcome mat for your project! By "
+"providing clear instructions, helpful resources, and a welcoming tone, "
+"you make it easier for contributors to get involved and build a stronger,"
+" more collaborative community around your project."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:2
+msgid "What the development guide for your Python package should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:4
+msgid ""
+"Ideally, your package should also have a development guide. This file may"
+" live in your package documentation and should be linked to from your "
+"CONTRIBUTING.md file (discussed above). A development guide should "
+"clearly show technically proficient users how to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:8
+msgid "Set up a development environment locally to work on your package"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:9
+msgid "Run the test suite"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:10
+msgid "Build documentation locally"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:12
+msgid "The development guide should also have guidelines for:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:14
+msgid ""
+"code standards including docstring style, code format and any specific "
+"code approaches that the package follows."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:16
+msgid ""
+"It's also helpful to specify the types of tests you request if a "
+"contributor submits a new feature or a change to an existing feature that"
+" will not be covered by your existing test suite."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:18
+msgid ""
+"If you have time to document it, it's also helpful to document your "
+"maintainer workflow and release processes."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:20
+msgid "Why a development guide is important"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:22
+msgid "It's valuable to have a development guide, in the case that you wish to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:25
+msgid "Onboard new maintainers."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:26
+msgid ""
+"Allow technically inclined contributors to make thoughtful and useful "
+"code based pull requests to your repository."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:28
+msgid ""
+"It also is important to pyOpenSci that the maintenance workflow is "
+"documented in the case that we need to help you onboard new maintainers "
+"in the future."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:33
+msgid ""
+"A well thought out continuous integration setup in your repository can "
+"allow users to skip building the package locally (especially if they are "
+"just updating text)."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:38
+msgid ""
+"A development guide, while strongly recommended, is not a file that "
+"pyOpenSci requires a package to have in order to be eligible for review. "
+"Some maintainers may also opt to include the development information in "
+"their contributing guide."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:44
+msgid ""
+"[The Mozilla Science Lab website has a nice outline of things to consider"
+" when creating a contributing guide](https://mozillascience.github.io"
+"/working-open-workshop/contributing/)"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:1
+msgid "Documentation Files That Should be in your Python Package Repository"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:3
+msgid ""
+"In this section of the Python packaging guide, we review all of the files"
+" that you should have in your Python package repository. Your Python "
+"package should, at a minimum have the following files:"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:7
+msgid ""
+"The files mentions above (README, Code of Conduct, license file, etc) are"
+" used as a measure of package community health on many online platforms. "
+"Below, you can see an example how GitHub evaluates community health. This"
+" community health link is available for all GitHub repositories."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:13
+msgid ""
+"Image showing that the MovingPandas GitHub repository community health "
+"page with green checks next to each file including a description, README,"
+" code of conduct, contributing, license and issue templates. Note that "
+"Security policy has a yellow circle next to it as that is missing from "
+"the repo."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:19
+msgid ""
+"GitHub community health looks for a readme file among other elements when"
+" it evaluates the community level health of your repository. This example"
+" is from the [MovingPandas GitHub "
+"repo](https://github.com/movingpandas/movingpandas/community) *(screen "
+"shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:22
+msgid ""
+"[Snyk](https://snyk.io/advisor/python) is another well-known company that"
+" keeps tabs on package health. Below you can see a similar evaluation of "
+"files in the GitHub repo as a measure of community health."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:26
+msgid ""
+"Screenshot of the Snyk page for movingpandas. It shows that the "
+"repository has a README file, contributing file, code of conduct. It also"
+" shows that it has 30 contributors and no funding. The package health "
+"score is 78/100."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:32
+msgid ""
+"Screenshot showing [SNYK](https://snyk.io/advisor/python/movingpandas) "
+"package health for moving pandas. Notice both platforms look for a README"
+" file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:8
+msgid "License files for Python open source software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:10
+msgid ""
+"Want to learn how to add a license file to your GitHub repository? Check "
+"out this lesson."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:17
+msgid "What is a Open Source License file?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:19
+msgid ""
+"When we talk about LICENSE files, we are referring to a file in your "
+"GitHub or GitLab repository that contains legally binding language that "
+"describes to your users how they can legally use (and not use) your "
+"package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:23
+msgid "Why licenses are important"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:25
+msgid ""
+"A license file is important for all open source projects because it "
+"protects both you as a maintainer and your users. The license file helps "
+"your users and the community understand:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:27
+msgid "How they can use your software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:28
+msgid "Whether the software can be reused or adapted for other purposes"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:29
+msgid "How people can contribute to your project"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:31
+msgid "and more."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:33
+msgid ""
+"[Read more about why license files are critical in protecting both you as"
+" a maintainer and your users of your scientific Python open source "
+"package.](https://opensource.guide/legal/#just-give-me-the-tldr-on-what-i"
+"-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:35
+msgid "Where to store your license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:37
+msgid ""
+"Your `LICENSE` file should be stored at root of your GitHub / GitLab "
+"repository."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:39
+msgid ""
+"Some maintainers customize the language in their license files for "
+"specific reasons. However, if you are just getting started, we suggest "
+"that you select a permissive license and then use the legal language "
+"templates provided both by GitHub and/or the "
+"[choosealicense.com](https://choosealicense.com/) website."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:42
+msgid ""
+"Licenses are legally binding, as such you should avoid trying to create "
+"your own license unless you have the guidance of legal council."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:44
+msgid "Use open permissive licenses when possible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:46
+msgid ""
+"We generally suggest that you use a permissive, license that is [Open "
+"Software Initiative (OSI) approved](https://opensource.org/license). If "
+"you are [submitting your package to pyOpenSci for peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), then we "
+"require an OSI approved license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:50
+msgid "Copyleft licenses"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:51
+msgid ""
+"The other major category of licenses are [\"copyleft\" "
+"licenses](https://en.wikipedia.org/wiki/Copyleft). Copyleft licenses "
+"require people that use your work to redistribute it with the same (or "
+"greater) rights to modify, copy, share, and redistribute it. In other "
+"words, copyleft licenses prohibit someone taking your work, making a "
+"proprietary version of it, and redistributing it without providing the "
+"source code so others can do the same. Copyleft licenses are \"sticky\" "
+"in that they are designed to ensure that more free software is created."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:56
+#, python-brace-format
+msgid ""
+"The difference between copyleft and permissive licenses is an important "
+"cultural divide in free and open source software (e.g., see "
+"{footcite}`hunterReclaimingComputingCommons2016`, "
+"{footcite}`gnuprojectWhatFreeSoftware2019`, "
+"{footcite}`gnuprojectWhatCopyleft2022`). It is important to understand "
+"this difference when choosing your license. Copyleft licenses represents "
+"the \"free\" part of \"free and open source software\". Free and open "
+"source software is intrinsically political, and it is important to be "
+"aware of power dynamics in computing as well as the practical problems of"
+" license compatibility (discussed below)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:61
+msgid "How to choose a license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:63
+msgid ""
+"To select your license, we suggest that you use GitHub's [Choose a "
+"License tool](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:66
+msgid ""
+"If you choose your license when creating a new GitHub repository, you can"
+" also automatically get a text copy of the license file to add to your "
+"repository. However in some cases the license that you want is not "
+"available through that online process."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "License recommendations from the SciPy package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:72
+msgid ""
+"[The SciPy documentation has an excellent overview of "
+"licenses.](https://docs.scipy.org/doc/scipy/dev/core-"
+"dev/index.html#licensing) One of the key elements that these docs "
+"recommend is ensuring that the license that you select is compatible with"
+" licenses used in many parts of the scientific Python ecosystem. Below is"
+" a highlight of this text which outlines license that are compatible with"
+" the modified BSD license that SciPy uses."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:78
+msgid ""
+"Other licenses that are compatible with the modified BSD license that "
+"SciPy uses are 2-clause BSD, MIT and PSF. Incompatible licenses are GPL, "
+"Apache and custom licenses that require attribution/citation or prohibit "
+"use for commercial purposes."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:80
+msgid ""
+"If your primary goal is for your code to be used by other, major packages"
+" in the scientific ecosystem, we also recommend that you consider using "
+"either BSD or MIT as your license. If you are unsure, the MIT license "
+"tends to be a simpler easier-to-understand option."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:85
+msgid ""
+"Important: make sure that you closely follow the guidelines outlines by "
+"the License that you chose"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:87
+msgid ""
+"Every license has different guidelines in terms of what code you can use "
+"in your package and also how others can (or can not) use the code in your"
+" package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:90
+msgid ""
+"If you borrow code from other tools or online sources, make sure that the"
+" license for the code that you are using also complies with the license "
+"that you selected for your package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:94
+msgid ""
+"A useful way to think about license compatibility is the distinction "
+"between **\"inbound\"** and **\"outbound\"** compatibility. \"Inbound\" "
+"licenses are those that cover the software you plan to include in your "
+"package. Your package is protected by an \"outbound\" license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:98
+msgid ""
+"**Permissive licenses** like BSD and MIT have few **outbound** "
+"restrictions - they can be used in any way by downstream consumers, "
+"including making them proprietary. This is why they are favored by many "
+"businesses and large packages that want to be adopted by businesses. "
+"Permissive licenses have more **inbound** restrictions - they can't use "
+"software that requires more freedoms to be preserved than they do, like "
+"copyleft licenses. A package licensed under MIT needs to take special "
+"care when including or modifying a package licensed under the GPL-3."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:103
+msgid ""
+"**Copyleft licenses** like GPL-3 have more **outbound** restrictions - "
+"they require more of packages that include, use, modify, and reproduce "
+"them. This is the purpose of copyleft licenses, to ensure that derivative"
+" works remain free and open source. They have fewer **inbound** "
+"restrictions - a GPL-3 licensed package can include any other "
+"permissively licensed and most copyleft licensed packages."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Compatible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Dependency (\"Inbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Your Package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Downstream Package (\"Outbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Permissive"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Copyleft"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:118
+msgid "An example of how a license determine how code can be reused"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:121
+msgid ""
+"Let's use StackOverflow as an example that highlights how a license "
+"determines how code can or can not be used."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:123
+msgid ""
+"[Stack Overflow uses a Creative Commons Share Alike "
+"license.](https://stackoverflow.com/help/licensing). The sharealike "
+"license requires you to use the same sharealike license when you reuse "
+"any code from Stack Overflow."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:125
+#, python-brace-format
+msgid ""
+"This means that from a legal perspective, if you copy code from the Stack"
+" Overflow website and use it in your package that is licensed "
+"differently, say with a MIT license, you are violating Stack Overflow's "
+"license requirements! This would not be true with a GPL licensed package."
+" `GPL-3` packages can include code licensed by `CC-BY-SA` "
+"{footcite}`creativecommonsShareAlikeCompatibilityGPLv32015`."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:128
+msgid "🚨 Proceed with caution! 🚨"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:131
+msgid "What about software citation?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:133
+msgid ""
+"While many permissive licenses do not require citation, we strongly "
+"encourage that you cite all software that you use in papers, blogs, and "
+"other publications. You tell your users how to cite your package by using"
+" a [citation.cff file](https://docs.github.com/en/repositories/managing-"
+"your-repositorys-settings-and-features/customizing-your-repository/about-"
+"citation-files)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:136
+msgid ""
+"Additional resources on software citation The Turing Way has excellent "
+"guides on this topic:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:139
+msgid ""
+"[CITATION.cff files](https://book.the-turing-"
+"way.org/communication/citable/citable-cff) — detailed guide on creating "
+"and maintaining citation files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:140
+msgid ""
+"[Software citation pathways](https://book.the-turing-way.org/pathways"
+"/pathways-software-citation) — overview of how software citation works in"
+" practice"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:142
+msgid "Citation.cff files: Making your software citable"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:144
+msgid ""
+"A `CITATION.cff` file is a machine-readable file that provides citation "
+"information for your software package. The \"cff\" stands for \"Citation "
+"File Format,\" which is a standardized format for software citation "
+"metadata."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:146
+msgid "What citation.cff files add to your repository"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:148
+msgid ""
+"When you add a `CITATION.cff` file to your repository, GitHub "
+"automatically detects it and displays a \"Cite this repository\" button. "
+"This makes it easy for users to properly cite your software. The file "
+"contains standardized citation information that tools and services can "
+"automatically read and use. GitHub will generate both APA and BibTeX "
+"citation formats for users."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:150
+msgid "How dates are tracked in citation.cff files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:152
+msgid ""
+"The citation file tracks important dates for your software. The `date-"
+"released` field shows when the current version was released. The `date-"
+"published` field shows when the software was first made available. You "
+"also include a `version` field with the specific version number."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:154
+msgid ""
+"You should update these dates with each new release so people cite the "
+"correct version of your software."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:156
+msgid "Integration with Zenodo"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:158
+msgid ""
+"Citation.cff files work well with Zenodo, which is a popular place to "
+"store research software and get DOIs. When you create a Zenodo release, "
+"it can automatically pull information from your citation file. This keeps"
+" your citation information the same between GitHub and Zenodo. You can "
+"also include your Zenodo DOI in the citation file. Each time you make a "
+"new GitHub release, it can create a new Zenodo version with updated "
+"citation information."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:161
+msgid "Here's a basic example of what a `CITATION.cff` file might look like:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:177
+msgid "References"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:3
+msgid "README File Guidelines and Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:5
+msgid ""
+"Your **README.md** file should be located in the root of your GitHub "
+"repository. The **README.md** file is important as it is often the first "
+"thing that someone sees before they install your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:9
+msgid "The README.md file is the landing page of:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:11
+msgid ""
+"Your package as it appears on a repository site such as PyPI or "
+"Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:12
+msgid "Your package's GitHub repository"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:14
+msgid ""
+"Your README.md file is also used as a measure of package and community "
+"health on sites such as:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:17
+msgid ""
+"[GitHub community health for MovingPandas (available for all "
+"repositories)](https://github.com/movingpandas/movingpandas/community) "
+"and [Snyk - MovingPandas "
+"example](https://snyk.io/advisor/python/movingpandas)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:19
+msgid ""
+"README landing page screenshot for the Pandera package. It has the "
+"Pandera logo at the top - which has two arrows in a chevron pattern "
+"pointing downward within a circle. Subtitle is statistical data testing "
+"toolkit. A data validation library for scientists, engineering, and "
+"analytics seeking correctness. Below that are a series of badges "
+"including CI tests passing, docs passing, version of Pandera on pypi "
+"(0.13.4), MIT license and that it has been pyOpenSci peer reviewed. There"
+" are numerous badges below that. Finally below the badges the text says, "
+"Pandera provides a flexible and expressive API for performing data "
+"validation on dataframe-like objects to make data processing pipelines "
+"more readable and robust."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:25
+msgid ""
+"Your GitHub repository landing page highlights the README.md file. Here "
+"you can see the README.md file for the pyOpenSci package "
+"[Pandera](https://github.com/unionai-oss/pandera). *(screen shot taken "
+"Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:28
+msgid ""
+"Thus, it is important that you spend some time up front creating a high "
+"quality **README.md** file for your Python package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:32
+msgid ""
+"An editor or the editor in chief will ask you to revise your README file "
+"before a review begins if it does not meet the criteria specified below."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:35
+msgid "Please go through this list before submitting your package to pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:52
+msgid "What your README.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:54
+msgid ""
+"Your **README.md** file should contain the following things (listed from "
+"top to bottom):"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:56
+msgid "✔️ Your package's name"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:58
+msgid ""
+"Ideally your GitHub repository's name is also the name of your package. "
+"The more self explanatory that name is, the better."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:61
+msgid ""
+"✔️ Badges for current package version, continuous integration and test "
+"coverage"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:63
+msgid ""
+"Badges are a useful way to draw attention to the quality of your project."
+" Badges assure users that your package is well-designed, tested, and "
+"maintained. They are also a useful maintenance tool to evaluate if things"
+" are building properly. A great example of this is adding a [Read the "
+"Docs status badge](https://docs.readthedocs.io/en/stable/badges.html) to "
+"your README.md file to quickly see when the build on that site fails."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:69
+msgid ""
+"It is common to provide a collection of badges towards the top of your "
+"README file for others to quickly browse."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:72
+msgid "Some badges that you might consider adding to your README file include:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:74
+msgid "Current version of the package on PyPI / Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid ""
+"Example: [](https://pypi.org/project/pandera/)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid "PyPI version shields.io"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid ""
+"Status of tests (pass or fail) - Example: [](https://github.com"
+"/unionai-"
+"oss/pandera/actions?query=workflow%3A%22CI+Tests%22+branch%3Amain)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid "CI Build"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid ""
+"Documentation build - Example: "
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid "Docs Building"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid ""
+"DOI (for citation) Example: "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid "DOI"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid ""
+"Once you package is accepted to pyOpenSci, we will provide you with a "
+"badge to add to your repository that shows that it has been reviewed. "
+"[](https://github.com/pyOpenSci/software-"
+"submission/issues/12)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid "pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:92
+msgid ""
+"Beware of the overuse of badges! There is such a thing as too much of a "
+"good thing (which can overload a potential user!)."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:95
+msgid "✔️ A short, easy-to-understand description of what your package does"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:97
+msgid ""
+"At the top of your README file you should have a short, easy-to-"
+"understand, 1-3 sentence description of what your package does. This "
+"section should clearly state your goals for the package. The language in "
+"this description should use less technical terms so that a variety of "
+"users with varying scientific (and development) backgrounds can "
+"understand it."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:103
+msgid ""
+"In this description, it's useful to let users know how your package fits "
+"within the broader scientific Python package ecosystem. If there are "
+"other similar packages or complementary package mentions them here in 1-2"
+" sentences."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:108
+msgid ""
+"Consider writing for a high school level (or equivalent) level. This "
+"level of writing is often considered an appropriate level for scientific "
+"content that serves a variety of users with varying backgrounds."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:112
+msgid ""
+"The goal of this description is to maximize accessibility of your "
+"**README** file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:116
+msgid "✔️ Installation instructions"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:118
+msgid ""
+"Include instructions for installing your package. If you have published "
+"the package on both PyPI and Anaconda.org, be sure to include "
+"instructions for both."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:121
+msgid "✔️ Document any additional setup required"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:123
+msgid ""
+"Add any additional setup required such as authentication tokens, to get "
+"started using your package. If setup is complex, consider linking to an "
+"installation page in your online documentation here rather than over "
+"complicating your README file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:128
+msgid "✔️ Brief demonstration of how to use the package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:130
+msgid ""
+"This description ideally includes a brief, quick start code example that "
+"shows a user how to get started using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:133
+msgid "✔️ Descriptive links to package documentation, short tutorials"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:135
+msgid "Include descriptive links to:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:137
+msgid "The package's documentation page."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:138
+msgid "Short tutorials that demonstrate application of your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:140
+msgid "Too Much Of A Good Thing"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:143
+msgid ""
+"Try to avoid including several tutorials in the README.md file itself. "
+"This too will overwhelm the user with information."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:145
+msgid ""
+"A short quick-start code example that shows someone how to use your "
+"package is plenty of content for the README file. All other tutorials and"
+" documentation should be presented as descriptive links."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:151
+msgid "✔️ A Community Section with Links to Contributing Guide, Code of Conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:153
+msgid "Use your README.md file to direct users to more information on:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:155
+msgid "Contributing to your package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:156
+msgid "Development setup for more advanced technical contributors"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:157
+msgid "Your code of conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:158
+msgid "Licensing information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:160
+msgid ""
+"All of the above files are important for building community around your "
+"project."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:163
+msgid "✔️ Citation information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:165
+msgid ""
+"Finally be sure to include instructions on how to cite your package. "
+"Citation should include the DOI that you want used when citing your "
+"package, and any language that you'd like to see associated with the "
+"citation."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:169
+msgid "README Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:173
+msgid ""
+"Below are some resources on creating great README.md files that you might"
+" find helpful."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:176
+msgid ""
+"[How to Write a Great README - Bane "
+"Sullivan](https://github.com/banesullivan/README)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:177
+msgid ""
+"[Art of README - Kira (@hackergrrl)](https://github.com/hackergrrl/art-"
+"of-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+#, python-format
+msgid ""
+"[Standard Readme - Richard Littauer](https://github.com/RichardLitt"
+"/standard-readme) [](https://github.com/RichardLitt/standard-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+msgid "standard-readme compliant"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:179
+msgid ""
+"[Standard Readme pre-commit hooks](https://github.com/tkoyama010"
+"/standard-readme-pre-commit)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:1
+msgid "Create tutorials in your Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:6
+msgid ""
+"Your package should have tutorials that make it easy for a user to get "
+"started using your package. Ideally, those tutorials also can be run from"
+" start to finish providing a second set of checks (on top of your test "
+"suite) to your package's code base."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:11
+msgid ""
+"On this page, we review two Sphinx extensions (`sphinx-gallery` and "
+"`nbsphinx`) that allow you to create reproducible tutorials that are run"
+" when your Sphinx documentation builds."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:15
+msgid "Create Python package tutorials that run when you build your docs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:17
+msgid ""
+"Adding well constructed tutorials to your package will make it easier for"
+" someone new to begin using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:20
+msgid ""
+"There are two Sphinx tools that make it easy to add tutorials to your "
+"package:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:22
+msgid "[Sphinx Gallery](https://sphinx-gallery.github.io/stable/index.html) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:23
+msgid "[NbSphinx](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:25
+msgid "Both of these tools act as Sphinx extensions and:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:27
+msgid ""
+"Support creating a gallery type page in your Sphinx documentation where "
+"users can explore tutorials via thumbnails."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:28
+msgid ""
+"Run the code in your tutorials adding another level of \"testing\" for "
+"your package as used."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:29
+msgid "Render your tutorials with Python code and plot outputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:31
+msgid "[sphinx gallery:](https://sphinx-gallery.github.io/stable/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:33
+msgid ""
+"If you prefer to write your tutorials using Python **.py** scripts, you "
+"may enjoy using Sphinx gallery. Sphinx gallery uses **.py** files with "
+"text and code sections that mimic the Jupyter Notebook format. When you "
+"build your documentation, the gallery extension:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:38
+msgid ""
+"Runs the code in each tutorial. Running your tutorial like this acts as a"
+" check to ensure your package's functions, classes, methods, and "
+"attributes (ie the API) are working as they should."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:39
+msgid ""
+"Creates a downloadable Jupyter Notebook **.ipynb** file and a **.py** "
+"script for your tutorial that a user can quickly download and run."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:40
+msgid ""
+"Creates a rendered **.html** page with the code elements and code "
+"outputs in a user-friendly tutorial gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:41
+msgid ""
+"Creates a gallery landing page with visual thumbnails for each tutorial "
+"that you create."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:44
+msgid ""
+"Image showing the gallery output provided by sphinx-gallery where each "
+"tutorial is in a grid and the tutorial thumbnails are created from a "
+"graphic in the tutorial."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:50
+msgid ""
+"`sphinx-gallery` makes it easy to create a user-friendly tutorial "
+"gallery. Each tutorial has a download link where the user can download a "
+"**.py** file or a Jupyter Notebook. And it renders the tutorials in a "
+"user-friendly grid."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:54
+msgid "Below you can see what a tutorial looks like created with sphinx-gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:56
+msgid ""
+"Image showing ta single tutorial from Sphinx gallery. The tutorial shows "
+"a simple matplotlib created plot and associated code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:62
+msgid ""
+"`sphinx-gallery` tutorials by default include download links for both the"
+" python script (**.py** file) and a Jupyter notebook (**.ipynb** file) at"
+" the bottom."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:66
+msgid "Sphinx Gallery benefits"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:67
+msgid "easy-to-download notebook and .py outputs for each tutorials."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:68
+msgid ".py files are easy to work with in the GitHub pull request environment."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:69
+msgid "Nice gridded gallery output."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:70
+msgid ""
+"Build execution time data per tutorial. [Example](https://sphinx-"
+"gallery.github.io/stable/auto_examples/sg_execution_times.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:72
+msgid "Sphinx gallery challenges"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:74
+msgid "The downsides of using Sphinx gallery include:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:76
+msgid ""
+"the **.py** files can be finicky to configure, particularly if you have "
+"matplotlib plot outputs."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:78
+msgid ""
+"For example: To allow for plots to render, you need to name each file "
+"with `plot_` at the beginning."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:81
+msgid ""
+"Many users these days are used to working in Jupyter Notebooks. .py may "
+"be slightly less user friendly to work with"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:83
+msgid ""
+"These nuances can make it challenging for potential contributors to add "
+"tutorials to your package. This can also present maintenance challenge."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:86
+msgid "Add about the gallery setup:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:93
+msgid "File directory structure:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:114
+msgid ""
+"[nbsphinx - tutorials using Jupyter "
+"Notebooks](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:116
+msgid ""
+"If you prefer to use Jupyter Notebooks to create tutorials you can use "
+"nbsphinx. nbsphinx operates similarly to Sphinx gallery in that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:119
+msgid "It runs your notebooks and produces outputs in the rendered tutorials"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:121
+msgid ""
+"Pro/con By default it does not support downloading of **.py** and "
+"**.ipynb** files. However you can add a [link to the notebook at the top "
+"of the page with some additional conf.py settings (see: epilog "
+"settings)](https://nbsphinx.readthedocs.io/en/0.8.10/prolog-and-"
+"epilog.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:125
+msgid ""
+"Image showing the gallery output provided by nbsphinx using the sphinx-"
+"gallery front end interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:131
+msgid ""
+"`nbsphinx` can be combined with Sphinx gallery to create a gallery of "
+"tutorials. However, rather than rendering the gallery as a grid, it lists"
+" all of the gallery elements in a single column."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:2
+msgid "Document the code in your package's API using docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:4
+msgid "What is an API?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:6
+msgid ""
+"API stands for **A**pplied **P**rogramming **I**nterface. When discussed "
+"in the context of a (Python) package, the API refers to the functions, "
+"classes, methods, and attributes that a package maintainer creates for "
+"users."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:10
+msgid ""
+"A simple example of a package API element: For instance, a package might "
+"have a function called `add_numbers()` that adds up a bunch of numbers. "
+"To add up numbers, you as the user simply call `add_numbers(1,2,3)` and "
+"the package function calculates the value and returns `6`. By calling the"
+" `add_numbers` function, you are using the package's API."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:16
+msgid ""
+"Package APIs consist of functions, classes, methods and attributes that "
+"create a user interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:18
+msgid "What is a docstring and how does it relate to documentation?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:20
+msgid ""
+"In Python, a docstring refers to text in a function, method or class that"
+" describes what the function does and its inputs and outputs. Python "
+"programmers usually refer to the inputs to functions as "
+"[\"parameters\"](https://docs.python.org/3/glossary.html#term-parameter) "
+"or [\"arguments\"](https://docs.python.org/3/faq/programming.html#faq-"
+"argument-vs-parameter), and the outputs are often called \"return "
+"values\""
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:23
+msgid "The docstring is thus important for:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:25
+msgid ""
+"When you call `help()` in Python, for example, `help(add_numbers)` will "
+"show the text of the function's docstring. The docstring thus helps a "
+"user better understand how to apply the function more effectively to "
+"their workflow."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:26
+msgid ""
+"When you build your package's documentation, the docstrings can also be "
+"used to automatically create full API documentation that provides a clean"
+" view of all its functions, classes, methods, and attributes."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:29
+msgid ""
+"Example API Documentation for all functions, classes, methods, and "
+"attributes in a package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:30
+msgid ""
+"[View example high-level API documentation for the Verde package. This "
+"page lists every function and class in the package along with a brief "
+"explanation of what it "
+"does](https://www.fatiando.org/verde/latest/api/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:31
+msgid ""
+"[You can further dig down to see what a specific function does within the"
+" package by clicking on an API "
+"element](https://www.fatiando.org/verde/latest/api/generated/verde.grid_coordinates.html#verde.grid_coordinates)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:34
+msgid "Python package API documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:36
+msgid ""
+"If you have a descriptive docstring for every user-facing class, method, "
+"attribute and/or function in your package (_within reason_), then your "
+"package's API is considered well-documented."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:39
+msgid ""
+"In Python, this means that you need to add a docstring for every user-"
+"facing class, method, attribute and/or function in your package (_within "
+"reason_) that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:43
+msgid "Explains what the function, method, attribute, or class does"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:44
+msgid "Defines the `type` inputs and outputs (ie. `string`, `int`, `np.array`)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:45
+msgid "Explains the expected output `return` of the object, method or function."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:48
+msgid "Three Python docstring formats and why we like NumPy style"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:50
+msgid ""
+"There are several Python docstring formats that you can choose to use "
+"when documenting your package including:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:53
+msgid ""
+"[NumPy-style](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:54
+msgid ""
+"[google style](https://sphinxcontrib-"
+"napoleon.readthedocs.io/en/latest/example_google.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:55
+msgid ""
+"[reST style](https://sphinx-rtd-"
+"tutorial.readthedocs.io/en/latest/docstrings.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:59
+msgid ""
+"We suggest using [NumPy-style "
+"docstrings](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard) for your Python documentation because:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:62
+msgid ""
+"NumPy style docstrings are core to the scientific Python ecosystem and "
+"defined in the [NumPy style "
+"guide](https://numpydoc.readthedocs.io/en/latest/format.html). Thus you "
+"will find them widely used there."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:63
+msgid ""
+"The Numpy style docstring is simplified and thus easier to read both in "
+"the code and when calling `help()` in Python. In contrast, some feel that"
+" reST style docstrings are harder to quickly scan, and can take up more "
+"lines of code in modules."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:66
+msgid ""
+"If you are using NumPy style docstrings, be sure to include the [sphinx "
+"napoleon extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/napoleon.html) in your documentation "
+"`conf.py` file. This extension allows Sphinx to properly read and format "
+"NumPy format docstrings."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:71
+msgid "Docstring examples Better and Best"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:73
+msgid ""
+"Below is a good example of a well-documented function. Notice that this "
+"function's docstring describes the function's inputs and the function's "
+"output (or return value). The initial description of the function is "
+"short (one line). Following that single-line description, there is a "
+"slightly longer description of what the function does (2 to 3 sentences)."
+" The return of the function is also specified."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:107
+msgid "Best: a docstring with example use of the function"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:109
+msgid ""
+"This example contains an example of using the function that is also "
+"tested in sphinx using "
+"[doctest](https://docs.python.org/3/library/doctest.html)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:160
+msgid ""
+"Using the above NumPy format docstring in sphinx, the autodoc extension "
+"will create the about documentation section for the `extent_to_json` "
+"function. The output of the `es.extent_to_json(rmnp)` command can even be"
+" tested using doctest adding another quality check to your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:166
+msgid ""
+"Using doctest to run docstring examples in your package's methods and "
+"functions"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:171
+msgid ""
+"Above, we provided some examples of good, better, best docstring formats."
+" If you are using Sphinx to create your docs, you can add the "
+"[doctest](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html) extension to your Sphinx"
+" build. Doctest provides an additional check for docstrings with example "
+"code in them. Doctest runs the example code in your docstring `Examples` "
+"checking that the expected output is correct. Similar to running "
+"tutorials in your documentation, `doctest` can be a useful step that "
+"assures that your package's code (API) runs as you expect it to."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:178
+msgid ""
+"It's important to keep in mind that examples in your docstrings help "
+"users using your package. Running `doctest` on those examples provides a "
+"check of your package's API. The doctest ensures that the functions and "
+"methods in your package run as you expect them to. Neither of these items"
+" replace a separate, stand-alone test suite that is designed to test your"
+" package's core functionality across operating systems and Python "
+"versions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:186
+msgid ""
+"Below is an example of a docstring with an example. doctest will run the "
+"example below and test that if you provide `add_me` with the values 1 and"
+" 3 it will return 4."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:219
+msgid "Adding type hints to your docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:221
+msgid ""
+"In the example above, you saw the use of numpy-style docstrings to "
+"describe data types that are passed into functions as parameters or into "
+"classes as attributes. In a numpy-style docstring you add those types in "
+"the Parameters section of the docstring. Below you can see that the "
+"parameter `num1` and `num2` should both be a Python `int` (integer) "
+"value."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:236
+msgid ""
+"Describing the expected data type that a function or method requires "
+"helps users better understand how to call a function or method."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:239
+msgid ""
+"Type-hints add another layer of type documentation to your code. Type-"
+"hints make it easier for new developers, your future self or contributors"
+" to get to know your code base quickly."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:243
+msgid ""
+"Type hints are added to the definition of your function. In the example "
+"below, the parameters aNum and aNum2 are defined as being type = int "
+"(integer)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:250
+msgid ""
+"You can further describe the expected function output using `->`. Below "
+"the output of the function is also an int."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:258
+msgid "Why use type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:260
+msgid "Type hints:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:262
+msgid "Make development and debugging faster,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:263
+msgid ""
+"Make it easier for a user to see the data format inputs and outputs of "
+"methods and functions,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:264
+msgid ""
+"Support using static type checking tools such as [`mypy`](https://mypy-"
+"lang.org/) which will check your code to ensure types are correct."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:266
+msgid "You should consider adding type hinting to your code if:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:268
+msgid "Your package performs data processing,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:269
+msgid "You use functions that require complex inputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:270
+msgid ""
+"You want to lower the entrance barrier for new contributors to help you "
+"with your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:272
+msgid "Beware of too much type hinting"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:275
+msgid "As you add type hints to your code consider that in some cases:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:277
+msgid ""
+"If you have a complex code base, type hints may make code more difficult "
+"to read. This is especially true when a parameter’s input takes multiple "
+"data types and you list each one."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:278
+msgid ""
+"Writing type hints for simple scripts and functions that perform obvious "
+"operations don't make sense."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:281
+msgid "Gradually adding type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:283
+msgid ""
+"Adding type hints can take a lot of time. However, you can add type hints"
+" incrementally as you work on your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:287
+msgid ""
+"Adding type hints is also a great task for new contributors. It will help"
+" them get to know your package's code and structure better before digging"
+" into more complex contributions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:1
+msgid "Create User Facing Documentation for your Python Package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:14
+msgid "Core components of user-facing Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:15
+msgid "Below we break documentation into two broad types."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:17
+msgid ""
+"**User-facing documentation** refers to documentation that describes the "
+"way the tools within a package are broadly used in workflows. **API "
+"documentation** refers to documentation of functions, classes, methods, "
+"and attributes in your code and is written at a more granular level. This"
+" documentation is what a user sees when they type `help(function-name)`."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:23
+msgid ""
+"Your user-facing documentation for your Python package should include "
+"several core components."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:26
+msgid ""
+"**Documentation Website:** This refers to easy-to-read documentation that"
+" helps someone use your package. This documentation should help users "
+"both install and use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:27
+msgid ""
+"**Short Tutorials:** Your user-facing documentation should also include "
+"[**short tutorials** that showcase core features of your package](create-"
+"package-tutorials)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:28
+msgid ""
+"**Package Code / API documentation:** You package's functions, classes, "
+"methods, and attributes (the API) should also be documented. API "
+"documentation can be generated from "
+"[docstrings](https://pandas.pydata.org/docs/development/contributing_docstring.html)"
+" found in your code. Ideally, you have docstrings for all user-facing "
+"functions, classes, and methods in your Python package. [We discuss code "
+"documentation and docstrings in greater detail here.](document-your-code-"
+"api-docstrings)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:32
+msgid "Write usable documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:34
+msgid ""
+"User-facing documentation should be published on a easy-to-navigate "
+"website. The documentation should be written keeping in mind that users "
+"may not be developers or expert-level programmers. Rather, the language "
+"that you use in your documentation should not be highly technical."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:39
+msgid ""
+"To make the language of your documentation more accessible to a broader "
+"audience:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:42
+msgid "Whenever possible, define technical terms and jargon."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:43
+msgid "Consider writing instructions for a high-school level reader."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:44
+msgid ""
+"Include step-by-step code examples, tutorials or vignettes that support "
+"getting started using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:46
+msgid "Four elements of a good open source documentation landing page"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:48
+msgid ""
+"To make it easy for users to find what they need quickly, consider adding"
+" quick links on your package's landing page to the following elements:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:52
+msgid ""
+"**Getting started:** This section should provide the user with a quick "
+"start for installing your package. A small example of how to use the "
+"package is good to have here as well. Or you can link to useful tutorials"
+" in the get started section."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:53
+msgid ""
+"**About:** Describe your project, stating its goals and its "
+"functionality."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:54
+msgid ""
+"**Community:** Instructions for how to help and/or get involved. This "
+"might include links to your issues (if that is where you let users ask "
+"questions) or the discussion part of your GitHub repo. This section might"
+" include a development guide for those who might contribute to your "
+"package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:55
+msgid ""
+"**API Documentation:** This is the detailed project documentation. Here "
+"you store documentation for your package's API including all user-facing "
+"functions, classes, methods, and attributes as well as any additional "
+"high level discussion that will help people use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:58
+msgid ""
+"Image showing the landing page for GeoPandas documentation which has 4 "
+"sections including Getting started, Documentation, About GeoPandas, "
+"Community."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:64
+msgid ""
+"The documentation landing page of GeoPandas, a spatial Python library, "
+"has the 4 element specified above. Notice that the landing page is simple"
+" and directs users to each element using a Sphinx card."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:67
+msgid ""
+"NOTE: in many cases you can include your **README** file and your "
+"**CONTRIBUTING** files in your documentation given those files may have "
+"some of the components listed above."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:71
+msgid ""
+"You can include files in Sphinx using the include directive. Below is an "
+"example of doing this using `myst` syntax."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:1
+msgid "Writing user-facing documentation for your Python package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:3
+msgid ""
+"This section walks you through best practices for with writing "
+"documentation for your Python package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:6
+msgid ""
+"We talk about the elements that you should consider adding to your "
+"documentation, the different types of users who might read your "
+"documentation and how to create tutorials for your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:10
+msgid ""
+"Here we also cover sphinx extensions that you can user to make "
+"documentation easier such as:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:13
+msgid ""
+"autodoc to automagically populate documentation for your code's "
+"functions, classes, methods and attributes (API documentation) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:15
+msgid "sphinx gallery for tutorials."
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/index.po b/locales/de/LC_MESSAGES/index.po
new file mode 100644
index 000000000..9134afe58
--- /dev/null
+++ b/locales/de/LC_MESSAGES/index.po
@@ -0,0 +1,500 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../index.md:257
+msgid "Tutorials"
+msgstr ""
+
+#: ../../index.md:264
+msgid "Packaging"
+msgstr ""
+
+#: ../../index.md:135 ../../index.md:272
+msgid "Documentation"
+msgstr ""
+
+#: ../../index.md:175 ../../index.md:280
+msgid "Tests"
+msgstr ""
+
+#: ../../index.md:280
+msgid "Testing"
+msgstr ""
+
+#: ../../index.md:288
+msgid "Maintain"
+msgstr ""
+
+#: ../../index.md:288
+msgid "Continuous Integration"
+msgstr ""
+
+#: ../../index.md:296
+msgid "Glossary"
+msgstr ""
+
+#: ../../index.md:296
+msgid "Reference"
+msgstr ""
+
+#: ../../index.md:1
+msgid "pyOpenSci Python Package Guide"
+msgstr ""
+
+#: ../../index.md:3
+msgid ""
+"We support the Python tools that scientists need to create open science "
+"workflows."
+msgstr ""
+
+#: ../../index.md:20
+msgid ""
+" "
+"[](https://github.com/pyopensci/python-package-guide) "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+
+#: ../../index.md:20
+msgid "GitHub release (latest by date)"
+msgstr ""
+
+#: ../../index.md:20
+msgid "DOI"
+msgstr ""
+
+#: ../../index.md:27
+msgid "About this guide"
+msgstr ""
+
+#: ../../index.md:29
+msgid ""
+"Image with the pyOpenSci flower logo in the upper right hand corner. The "
+"image shows the packaging lifecycle. The graphic shows a high level "
+"overview of the elements of a Python package. The inside circle has 5 "
+"items - user documentation, code/api, test suite, contributor "
+"documentation, project metadata / license / readme. In the middle of the "
+"circle is says maintainers and has a small icon with people. On the "
+"outside circle there is an arrow and it says infrastructure."
+msgstr ""
+
+#: ../../index.md:35
+msgid "This guide will help you:"
+msgstr ""
+
+#: ../../index.md:37
+msgid "Learn how to create a Python package from start to finish"
+msgstr ""
+
+#: ../../index.md:38
+msgid "Understand the broader Python packaging tool ecosystem"
+msgstr ""
+
+#: ../../index.md:39
+msgid "Navigate and make decisions around tool options"
+msgstr ""
+
+#: ../../index.md:40
+msgid "Understand all of the pieces of creating and maintaining a Python package"
+msgstr ""
+
+#: ../../index.md:42
+msgid ""
+"You will also find best practice recommendations and curated lists of "
+"community resources surrounding packaging and package documentation."
+msgstr ""
+
+#: ../../index.md:45
+msgid "Todo"
+msgstr ""
+
+#: ../../index.md:46
+msgid "TODO: change the navigation of docs to have a"
+msgstr ""
+
+#: ../../index.md:48
+msgid "user documentation contributor / maintainer documentation"
+msgstr ""
+
+#: ../../index.md:50
+msgid "development guide"
+msgstr ""
+
+#: ../../index.md:51
+msgid "contributing guide"
+msgstr ""
+
+#: ../../index.md:53
+msgid "Community docs"
+msgstr ""
+
+#: ../../index.md:54
+msgid "readme, coc, license"
+msgstr ""
+
+#: ../../index.md:56
+msgid "Publish your docs"
+msgstr ""
+
+#: ../../index.md:59
+msgid "Tutorial Series: Create a Python Package"
+msgstr ""
+
+#: ../../index.md:61
+msgid ""
+"The first round of our community-developed, how to create a Python "
+"package tutorial series for scientists is complete! Join our community "
+"review process or watch development of future tutorials in our [GitHub "
+"repo here](https://github.com/pyOpenSci/python-package-guide)."
+msgstr ""
+
+#: ../../index.md:68
+msgid "✿ Create a Package Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:72
+msgid "[What is a Python package?](/tutorials/intro)"
+msgstr ""
+
+#: ../../index.md:73
+msgid "[Create a Python package](/tutorials/create-python-package)"
+msgstr ""
+
+#: ../../index.md:74
+msgid "[Publish your package to (test) PyPI](/tutorials/publish-pypi)"
+msgstr ""
+
+#: ../../index.md:75
+msgid "[Publish your package to conda-forge](/tutorials/publish-conda-forge)"
+msgstr ""
+
+#: ../../index.md:78
+msgid "✿ Package Metadata Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:82
+msgid "[How to add a README file](/tutorials/add-readme)"
+msgstr ""
+
+#: ../../index.md:83
+msgid ""
+"[How to add metadata to a pyproject.toml file for publication to "
+"PyPI.](/tutorials/pyproject-toml.md)"
+msgstr ""
+
+#: ../../index.md:86
+msgid "✿ Packaging Tool Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:90
+msgid "[Introduction to Hatch](/tutorials/get-to-know-hatch)"
+msgstr ""
+
+#: ../../index.md:91
+msgid "[Run Python scripts using Hatch](/tutorials/run-python-scripts-hatch)"
+msgstr ""
+
+#: ../../index.md:94
+msgid "✿ Reference Guides ✿"
+msgstr ""
+
+#: ../../index.md:98
+msgid "[Command Line Reference Guide](/tutorials/command-line-reference)"
+msgstr ""
+
+#: ../../index.md:102
+msgid "Python Packaging for Scientists"
+msgstr ""
+
+#: ../../index.md:104
+msgid ""
+"Learn about Python packaging best practices. You will also get to know "
+"the the vibrant ecosystem of packaging tools that are available to help "
+"you with your Python packaging needs."
+msgstr ""
+
+#: ../../index.md:111
+msgid "✨ Create your package ✨"
+msgstr ""
+
+#: ../../index.md:115
+msgid "[Package file structure](/package-structure-code/python-package-structure)"
+msgstr ""
+
+#: ../../index.md:116
+msgid ""
+"[Package metadata / pyproject.toml](package-structure-code/pyproject-"
+"toml-python-package-metadata.md)"
+msgstr ""
+
+#: ../../index.md:117
+msgid ""
+"[Build your package (sdist / wheel)](package-structure-code/python-"
+"package-distribution-files-sdist-wheel.md)"
+msgstr ""
+
+#: ../../index.md:118
+msgid "[Declare dependencies](package-structure-code/declare-dependencies.md)"
+msgstr ""
+
+#: ../../index.md:119
+msgid ""
+"[Navigate the packaging tool ecosystem](package-structure-code/python-"
+"package-build-tools.md)"
+msgstr ""
+
+#: ../../index.md:120
+msgid ""
+"[Non pure Python builds](package-structure-code/complex-python-package-"
+"builds.md)"
+msgstr ""
+
+#: ../../index.md:123
+msgid "✨ Publish your package ✨"
+msgstr ""
+
+#: ../../index.md:127
+msgid ""
+"Gain a better understanding of the Python packaging ecosystem Learn about"
+" best practices for:"
+msgstr ""
+
+#: ../../index.md:130
+msgid ""
+"[Package versioning & release](/package-structure-code/python-package-"
+"versions.md)"
+msgstr ""
+
+#: ../../index.md:131
+msgid ""
+"[Publish to PyPI & Conda-forge](/package-structure-code/publish-python-"
+"package-pypi-conda.md)"
+msgstr ""
+
+#: ../../index.md:142
+msgid "✨ Write The Docs ✨"
+msgstr ""
+
+#: ../../index.md:145
+msgid ""
+"[Create documentation for your users](/documentation/write-user-"
+"documentation/intro)"
+msgstr ""
+
+#: ../../index.md:146
+msgid ""
+"[Core files to include in your package repository](/documentation"
+"/repository-files/intro)"
+msgstr ""
+
+#: ../../index.md:147
+msgid ""
+"[Write tutorials to show how your package is used](/documentation/write-"
+"user-documentation/create-package-tutorials)"
+msgstr ""
+
+#: ../../index.md:150
+msgid "✨ Developer Docs ✨"
+msgstr ""
+
+#: ../../index.md:153
+msgid ""
+"[Create documentation for collaborating developers](/documentation"
+"/repository-files/contributing-file)"
+msgstr ""
+
+#: ../../index.md:154
+msgid ""
+"[Write a development guide](/documentation/repository-files/development-"
+"guide)"
+msgstr ""
+
+#: ../../index.md:157
+msgid "✨ Document For A Community ✨"
+msgstr ""
+
+#: ../../index.md:160
+msgid ""
+"[Writing a README file](/documentation/repository-files/readme-file-best-"
+"practices)"
+msgstr ""
+
+#: ../../index.md:161
+msgid ""
+"[Set norms with a Code of Conduct](/documentation/repository-files/code-"
+"of-conduct-file)"
+msgstr ""
+
+#: ../../index.md:162
+msgid "[License your package](/documentation/repository-files/license-files)"
+msgstr ""
+
+#: ../../index.md:165
+msgid "✨ Publish Your Docs ✨"
+msgstr ""
+
+#: ../../index.md:168
+msgid "[How to publish your docs](/documentation/hosting-tools/intro)"
+msgstr ""
+
+#: ../../index.md:169
+msgid "[Using Sphinx](/documentation/hosting-tools/intro)"
+msgstr ""
+
+#: ../../index.md:170
+msgid ""
+"[Markdown, MyST, and ReST](/documentation/hosting-tools/myst-markdown-"
+"rst-doc-syntax)"
+msgstr ""
+
+#: ../../index.md:171
+msgid ""
+"[Host your docs on Read The Docs or GitHub Pages](/documentation/hosting-"
+"tools/publish-documentation-online)"
+msgstr ""
+
+#: ../../index.md:181
+msgid "✨ Tests for your Python package ✨"
+msgstr ""
+
+#: ../../index.md:184
+msgid "[Intro to testing](tests/index.md)"
+msgstr ""
+
+#: ../../index.md:185
+msgid "[Write tests](tests/write-tests)"
+msgstr ""
+
+#: ../../index.md:186
+msgid "[Types of tests](tests/test-types)"
+msgstr ""
+
+#: ../../index.md:189
+msgid "✨ Run your tests ✨"
+msgstr ""
+
+#: ../../index.md:192
+msgid "[Run tests locally with Hatch](tests/run-tests)"
+msgstr ""
+
+#: ../../index.md:193
+msgid "[Run tests with nox](tests/run-tests-nox)"
+msgstr ""
+
+#: ../../index.md:194
+msgid "[Run tests in CI](tests/tests-ci)"
+msgstr ""
+
+#: ../../index.md:198
+msgid "Contributing"
+msgstr ""
+
+#: ../../index.md:205
+msgid "✨ Code style & Format ✨"
+msgstr ""
+
+#: ../../index.md:208
+msgid "[Code style](package-structure-code/code-style-linting-format.md)"
+msgstr ""
+
+#: ../../index.md:211
+msgid "✨ Want to contribute? ✨"
+msgstr ""
+
+#: ../../index.md:216
+msgid ""
+"We welcome contributions to this guide. Learn more about how you can "
+"contribute."
+msgstr ""
+
+#: ../../index.md:221
+msgid "A group of people building a pyramid with blocks"
+msgstr ""
+
+#: ../../index.md:227
+msgid "A community-created guidebook"
+msgstr ""
+
+#: ../../index.md:229
+msgid ""
+"Every page in this guidebook goes through an extensive community review "
+"process. To ensure our guidebook is both beginner-friendly and accurate, "
+"we encourage reviews from a diverse set of pythonistas and scientists "
+"with a wide range of skills and expertise."
+msgstr ""
+
+#: ../../index.md:232
+msgid "View guidebook contributors"
+msgstr ""
+
+#: ../../index.md:240
+msgid "Who this guidebook is for"
+msgstr ""
+
+#: ../../index.md:242
+msgid ""
+"This guidebook is for anyone interested in learning more about Python "
+"packaging. It is beginner-friendly and will provide:"
+msgstr ""
+
+#: ../../index.md:244
+msgid "Beginning-to-end guidance on creating a Python package."
+msgstr ""
+
+#: ../../index.md:245
+msgid ""
+"Resources to help you navigate the Python packaging ecosystem of tools "
+"and approaches to packaging."
+msgstr ""
+
+#: ../../index.md:246
+msgid ""
+"A curated list of resources to help you get your package into documented,"
+" usable and maintainable shape."
+msgstr ""
+
+#: ../../index.md:248
+msgid "Where this guide is headed"
+msgstr ""
+
+#: ../../index.md:250
+msgid ""
+"If you have ideas of things you'd like to see here clarified in this "
+"guide, [we invite you to open an issue on "
+"GitHub.](https://github.com/pyOpenSci/python-package-guide/issues)."
+msgstr ""
+
+#: ../../index.md:253
+msgid ""
+"If you have questions about our peer review process or packaging in "
+"general, you are welcome to use our [GitHub "
+"Discussions](https://github.com/orgs/pyOpenSci/discussions)."
+msgstr ""
+
+#: ../../index.md:255
+msgid ""
+"This living Python packaging guide is updated as tools and best practices"
+" evolve in the Python packaging ecosystem. We will be adding new content "
+"over the next year."
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/maintain-automate.po b/locales/de/LC_MESSAGES/maintain-automate.po
new file mode 100644
index 000000000..e9e50ae60
--- /dev/null
+++ b/locales/de/LC_MESSAGES/maintain-automate.po
@@ -0,0 +1,1807 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../maintain-automate/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:12
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:14
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:18
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:23
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:25
+msgid ""
+"When you're ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:28
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:29
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:30
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:32
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:34
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:35
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:37
+msgid "What is continuous deployment (CD)?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:39
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:41
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:42
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:44
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:47
+msgid "Why use CI?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:49
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:54
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:58
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:63
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:68
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:71
+msgid "CI/CD platforms"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:73
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:78
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:83
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:85
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:91
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:94
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:97
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:100
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:105
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:107
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:1
+msgid "Installing your own code"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:3
+msgid ""
+"You have a conda environment. It works. Maybe it has packages that were "
+"hard to install, like GDAL, HDF5, or other compiled scientific "
+"dependencies."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:5
+msgid ""
+"You also have code that you are writing locally. Maybe it started as a "
+"script, or maybe it is already organized as a Python package. You want to"
+" use that code inside the same environment with GDAL, HDF5, and the other"
+" tools you already installed."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:7
+msgid ""
+"The instructions to install your code into a conda environment is to "
+"first activate your conda environment `conda activate your_env_name` and "
+"then run this: `python -m pip install -e . --no-deps`. You may also see "
+"this written as `pip install -e .`. See [The Full Command](the-full-"
+"command) section below for more info as to the details of this command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:9
+msgid ""
+"If this is the first time you're seeing pip install commands, you may not"
+" be totally sure what is going on here. Conda created the environment, "
+"why am I using `pip` to install things now? You may have heard guidance "
+"to generally try and avoid mixing conda and pip? You may already be "
+"mixing conda and pip and things are totally fine. You may also not care "
+"at all because `pip install -e .` seems to work fine and you can get back"
+" to what you're actually trying to do. (If that last one is you, you're "
+"also probably not reading this page). In any event, all of these "
+"situations are perfectly understandable and totally okay for you to be "
+"going through."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:11
+msgid ""
+"So... why pip? The short answer is that conda and pip are doing different"
+" jobs here."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:13
+msgid ""
+"The slightly longer, mostly apologetic, answer is this is just sort of "
+"the current ergonomics of how python packaging works and, honestly? Most "
+"of us have turned this confusing pain point into muscle memory. But not "
+"you. You're new here. And you're like... wat? And you're totally "
+"justified to feel this way."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:15
+msgid ""
+"So, what is happening here? `conda` manages the environment: the Python "
+"runtime, compiled libraries, command line tools, and the packages your "
+"project depends on. This is stuff that you've already been doing and "
+"you're comfortable with (or at least familiar with). `pip` is doing one "
+"Python-packaging-specific job: installing your local package into the "
+"active environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:17
+msgid ""
+"In editable mode, the `-e` flag, `pip` connects the active environment to"
+" the source files you are editing. And... why exactly is that useful?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:19
+msgid "It's useful because it gives you a pretty quick development loop:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:21
+msgid "Edit your code in your editor."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:22
+msgid "Run it from a terminal, test suite, or Jupyter notebook."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:23
+msgid "Edit the code again."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:24
+msgid "Run it again without reinstalling your package."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:26
+msgid ""
+"So the goal is not to switch from conda to pip. The goal is to keep using"
+" your conda environment while making your local package importable inside"
+" that environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:28
+msgid "Should I use pip for everything now?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:30
+msgid "Probably not?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:32
+msgid ""
+"If conda is already working well for your project, keep using conda to "
+"manage the environment. Use pip only for this one task: installing your "
+"local package in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:34
+msgid ""
+"If you are curious about other tools like uv, pixi, Hatch, or pip-only "
+"workflows, see [Environment Managers](environment-managers.md). Those "
+"tools can be great choices. But you do not need to switch tools just to "
+"develop your local package inside a conda environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:36
+msgid ""
+"As a final note, people in the conda ecosystem are actively working on "
+"better conda/pip interoperability. In the future, this workflow may "
+"become less awkward. For now, `python -m pip install -e . --no-deps` is "
+"the standard bridge."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:39
+msgid "The full command"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:41
+msgid ""
+"`python -m pip install -e . --no-deps` is a mouthful. I know it. You know"
+" it. Why do we do these things?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:43
+msgid "The simplest version of this is:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:48
+msgid "But we recommend the longer version in conda environments for two reasons."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:50
+msgid ""
+"The `python -m pip` part ensures that you're using pip from the active "
+"conda environment. Sometimes this results in `pip not found`, which is "
+"actually a good error to get because it means you prevented an annoying-"
+"to-debug failure mode. If this happens just `conda install pip` and try "
+"again. So, why? Sometimes `pip` from a different python environment can "
+"be on your PATH which means that you'll accidentally install your code "
+"into an unrelated python environment. This can be confusing to debug. "
+"This has happened to most (all?) of us. It usually hits when you're least"
+" prepared to debug and fix it. So we recommend the `python -m` in front "
+"to prevent this from happening. But it does add to the length of the "
+"command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:52
+msgid ""
+"The `--no-deps` flag tells pip not to install your package's "
+"dependencies, if you have any listed in your project. If you do have them"
+" listed, probably in your `pyproject.toml` file, then `pip install -e .` "
+"will try to install the dependencies that are listed in that file. In a "
+"conda environment, that can range from \"mostly fine\" to \"now my "
+"environment is broken and I am not sure how to recover.\""
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:54
+msgid ""
+"With `--no-deps`, pip installs only your local package. You remain "
+"responsible for managing the environment dependencies with conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:2
+msgid "Environment Managers for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:4
+msgid "Quick Decision Guide"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:6
+msgid "**Python-only project, want simplicity?** → venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:7
+msgid "**Python-only, want speed?** → **uv** (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:8
+msgid "**Installing CLI tools globally?** → pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:9
+msgid ""
+"**Need conda packages or cross-language dependencies?** → **pixi** "
+"(recommended) or conda/mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:10
+msgid ""
+"**Creating a Python package?** → Use Hatch -- with UV as a dependency "
+"manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:12
+msgid ""
+"You can mix tools! For example, use **pipx** to install tools you use "
+"often (at the command line) like Hatch, ruff or pre-commit, then use "
+"**uv** within your projects for package and environment management."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:15
+msgid "Environment and package managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:17
+msgid ""
+"Package and environment managers are important tools in your Python "
+"packaging workflows. To make Your packaging experience when selecting a "
+"tool will be easier if you understand the difference between the two."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:20
+msgid ""
+"A **package manager** is used to install, update, and remove Python "
+"packages (libraries and tools) and their dependencies in your "
+"environment. When you use a package manager, you are often downloading "
+"packages from a repository like PyPI (Python Package Index) or a local "
+"repository like GitHub / GitLab."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:23
+msgid ""
+"When you run `pip install numpy`, pip acts as a package manager and "
+"installs numpy from PyPI. Pip's default repository when you install a "
+"package is PyPI, but it can be used to install packages from other "
+"repositories such as GitHub."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:26
+msgid ""
+"An **environment manager** creates isolated spaces (environments) for "
+"your Python projects. Each environment has its own Python installation "
+"and its own installed packages. Using isolated environments for different"
+" projects reduces the change of environment conflicts when using the same"
+" environment across different projects with different dependencies."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:28
+msgid ""
+"There are many tools listed below, but if you're short on time, you may "
+"want to consider"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:30
+msgid ""
+"Hatch combined with UV if you are managing a Python package. [Check out "
+"our tutorials for more on this workflow.](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:31
+msgid ""
+"Pixi or mamba as faster alternatives to conda if you are working in the "
+"non-Pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:33
+msgid "Where environment managers save your environment"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:35
+msgid ""
+"Environment managers save environments in different locations by default."
+" For instance, `venv`, an environment manager that ships with Python, "
+"saves an environment by default in your current working directory. UV has"
+" the same native behavior. In contrast, conda and mamba save environments"
+" in a global location, allowing you to access them easily across "
+"projects."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:38
+msgid ""
+"UV does have a global cache even tho its default behavior is to create an"
+" environment in your current working directory."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:42
+msgid "Some tools do everything"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:44
+msgid ""
+"Some modern tools handle both package installation and environment "
+"management. For instance, UV, conda and mamba can be used to both create "
+"environments, add dependencies, and build and install tools."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:46
+msgid "Comparison Table: pip ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Tool"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Type"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Language"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Speed"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Default Environment Location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Description"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pip**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Package manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+#: ../../maintain-automate/task-runners.md
+msgid "Python"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Slower"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "N/A (uses existing environment)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's standard package installer. pip also builds packages"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pipx**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (isolated per tool)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid ""
+"Installs tools that you need to regularly use across projects such as "
+"nox, pytest or ruff in a global location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**uv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Both"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Rust"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fastest"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fast package installer and environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**venv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's built-in environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**virtualenv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Moderate"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Feature-rich alternative to venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:56
+msgid "Comparison Table: conda ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**conda**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python/C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (`~/anaconda3/envs/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Cross-language package and environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**mamba**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster drop-in replacement for conda"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pixi**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory (`.pixi/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Modern conda-based tool with lock files"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:64
+msgid ""
+"**Speed comparison:** Rust-based tools (uv, pixi) are significantly "
+"faster when installing packages and resolving complex environments than "
+"Python-based tools. Mamba is faster than conda but might be slower than "
+"Rust-based alternatives such as Pixi."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:67
+msgid "Package Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:69
+msgid "pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:71
+msgid ""
+"Pip is Python's standard package installer. It is included with Python by"
+" default."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:72
+msgid ""
+"Pip is great for installing packages from PyPI and GitHub / GitLab into "
+"existing environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:73
+msgid ""
+"It is also great for development if you want to install your package "
+"locally in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:75
+#: ../../maintain-automate/environment-managers.md:87
+#: ../../maintain-automate/environment-managers.md:99
+#: ../../maintain-automate/environment-managers.md:127
+#: ../../maintain-automate/environment-managers.md:189
+#: ../../maintain-automate/environment-managers.md:211
+#: ../../maintain-automate/environment-managers.md:261
+#: ../../maintain-automate/environment-managers.md:280
+msgid "**Basic usage:**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:81
+msgid "pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:83
+msgid ""
+"Pipx is can be used to install a tool that you need to use across "
+"projects (like `riff`, `pytest`, `sphinx`, `nox`), globally."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:85
+msgid ""
+"Why use it: You might use it to avoid reinstalling the same tool over and"
+" over on your machine."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:93
+msgid "conda / mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:95
+msgid ""
+"Conda is a cross-language package manager that installs Python packages, "
+"R packages, system libraries, and more. Mamba is a faster, drop-in "
+"replacement for conda and we highly recommend mamba over conda if you are"
+" still using conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:97
+msgid ""
+"These tools are best for scientific computing projects and environments "
+"that need non-Python dependencies (like C libraries, GDAL, or R "
+"packages)."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:109
+msgid "Conda and mamba also function as environment managers - see below!"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:112
+#: ../../maintain-automate/index.md:51
+msgid "Environment Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:114
+msgid "hatch for pure Python packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:116
+#: ../../maintain-automate/environment-managers.md:204
+#: ../../maintain-automate/environment-managers.md:273
+msgid "pyOpenSci Recommends"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:118
+msgid ""
+"We recommend **hatch** as a complete project management tool for Python "
+"packaging. Hatch manages environments, builds packages, runs tests, and "
+"handles publishing—all in one tool. It can use **uv** as its backend for "
+"even faster operations."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:121
+msgid ""
+"Hatch is a comprehensive modern Python project manager that handles "
+"environments, package building, testing, and publishing. Hatch creates "
+"isolated environments for different tasks (testing, docs, development). "
+"Hatch uses UV under the hood to install Python, and can be set to use UV "
+"to manage environment installations too."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:123
+msgid ""
+"Hatch is best for Python package developers who want an all-in-one tool "
+"that handles the entire packaging workflow from development to "
+"publication."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:125
+msgid "[Check out our tutorial](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch with uv backend"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:160
+msgid ""
+"Hatch acts as a task runner and can manage multiple environments that you"
+" define. It also handles project and dependency installation, making it "
+"ideal for package maintainers who want consistency across development "
+"tasks."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:163
+msgid "venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:165
+msgid ""
+"venv is Python's built-in environment creator (included with Python "
+"3.3+). It is best for simple pure Python projects. Because venv ships "
+"with Python, and it is used by Hatch, UV and other tools under the hood, "
+"it is the most widely used tool."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:168
+msgid "Basic usage:"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:184
+msgid "virtualenv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:186
+msgid ""
+"virtualenv is a more feature-rich alternative to venv with better "
+"performance and additional options. It's best for you if you need more "
+"control over your environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:202
+msgid "uv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:206
+msgid ""
+"We recommend **uv** for fast, reliable Python package and environment "
+"management. It's significantly faster than pip and easily handles both "
+"installing packages and creating environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:209
+msgid ""
+"UV is a fast, Rust-based tool that replaces both pip and venv. It "
+"installs packages and creates virtual environments at lightning speed. UV"
+" is best for any pure Python project. Pixi is better if are working in "
+"the non-pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "uv (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+#: ../../maintain-automate/environment-managers.md:272
+msgid "pixi"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:256
+msgid "conda / mamba (as environment managers)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:258
+msgid ""
+"Conda and mamba create isolated environments that can contain Python, R, "
+"system libraries, and more. The conda ecosystem tools are best for "
+"managing complex dependencies across languages or when you need specific "
+"system libraries."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:275
+msgid ""
+"For projects needing conda packages, we recommend **pixi** over "
+"conda/mamba. It's faster, uses lock files for reproducibility, and works "
+"cross-platform."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:278
+msgid ""
+"Pixi is a modern, fast package and environment manager built on conda "
+"ecosystems. Similar to UV, Pixi uses lock files for reproducible "
+"environments. Pixi is best suited for scientific projects that require "
+"conda packages, teams that require exact reproducibility, or cross-"
+"platform development."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:299
+msgid ""
+"Pixi automatically creates a lock file (`pixi.lock`) ensuring everyone on"
+" your team gets identical environments."
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "What is CI?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Task runners"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Development installs with conda"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Maintain & Automate"
+msgstr ""
+
+#: ../../maintain-automate/index.md:2
+msgid "Automate Workflows and Maintain Your Package"
+msgstr ""
+
+#: ../../maintain-automate/index.md:4
+msgid ""
+"Once you've [created your package](create-pure-python-package), "
+"[published it](publish-pypi-tutorial), and set up a repository for it, "
+"the next step is to automate development and maintenance workflows. "
+"Automation makes maintaining your package easier, more robust, and more "
+"secure. It also helps new contributors get started quickly without having"
+" to manually set up complex development environments and testing "
+"workflows."
+msgstr ""
+
+#: ../../maintain-automate/index.md:11
+msgid "Why automate?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:13
+msgid ""
+"When you automate repetitive tasks like running tests, checking code "
+"style, and building documentation, you ensure that these important steps "
+"happen consistently every time. This consistency helps you catch bugs "
+"early, maintain code quality, and make it easier for others to contribute"
+" to your package. Automation also saves you time—instead of remembering "
+"and typing long command sequences, you can run everything with simple "
+"commands or have workflows run automatically when you push code to "
+"GitHub."
+msgstr ""
+
+#: ../../maintain-automate/index.md:22
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../maintain-automate/index.md:24
+msgid ""
+"This section will walk you through two key automation strategies for "
+"Python packages:"
+msgstr ""
+
+#: ../../maintain-automate/index.md:27
+msgid ""
+"[**Task runners**](task-runners-intro) help you automate common "
+"development tasks locally— things like running tests, building "
+"documentation, formatting code, and checking for errors. Instead of "
+"typing out long command sequences every time, you define tasks once and "
+"run them with simple commands. Task runners like Hatch and Nox also "
+"manage isolated environments for different workflows, ensuring you have "
+"the right dependencies for each task."
+msgstr ""
+
+#: ../../maintain-automate/index.md:35
+msgid ""
+"[**Continuous Integration (CI)**](ci-cd) takes automation further by "
+"running your tests and checks automatically every time code is pushed to "
+"GitHub or when someone opens a pull request. CI ensures that all changes "
+"are tested across different Python versions and operating systems before "
+"they're merged. You can also use Continuous Deployment (CD) to automate "
+"publishing your package to PyPI and deploying your documentation."
+msgstr ""
+
+#: ../../maintain-automate/index.md:42
+msgid ""
+"Together, task runners and CI/CD create a robust development workflow "
+"that makes your package easier to maintain and more welcoming to "
+"contributors."
+msgstr ""
+
+#: ../../maintain-automate/index.md:46
+msgid ""
+"[**Development installs in conda environments**](dev-installs) help you "
+"connect conda-based scientific development environments with local Python"
+" package development. This is especially useful when your package depends"
+" on compiled or system-level dependencies that conda manages well."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:2
+msgid "Task Runners for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:4
+msgid "What is a Task Runner?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:6
+msgid ""
+"A task runner is a tool that automates repetitive development workflows. "
+"Instead of typing out long command sequences every time you need to test "
+"your code, build documentation, or check your package, you define these "
+"tasks once and run them with simple commands."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:11
+msgid "For example, rather than running:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:19
+msgid "You can define a task and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:25
+msgid ""
+"Most modern task runners also include environment management features "
+"that make it quick and easy to run tasks. Task runners ensure that "
+"workflows are executed consistently every time, whether you're running "
+"them on your laptop or in continuous integration, and they also make it "
+"easier for contributors to recreate the same workflows in their local "
+"environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:32
+msgid "Benefits of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:34
+msgid ""
+"Task runners provide several benefits for package development. When you "
+"use a task runner, everyone on your team runs tasks the same way, "
+"reducing environment-specific issues and \"works on my machine\" "
+"problems. Complex multi-step processes become single commands, so "
+"contributors don't need to memorize or look up lengthy command sequences."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:41
+msgid ""
+"Many task runners also create isolated environments for different "
+"workflows, ensuring the right dependencies are available for each task "
+"without conflicts. This means your tasks run the same way locally and in "
+"continuous integration, making debugging easier and builds more reliable."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:47
+msgid "Two types of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:49
+msgid ""
+"The most common task runners used in the Python ecosystem fall into two "
+"categories:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:51
+msgid "Environment + command managers"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:53
+msgid ""
+"You can use these to both create custom isolated environments and also to"
+" run your tasks."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:55
+msgid ""
+"**[Hatch](https://hatch.pypa.io/):** Hatch is an all-in-one package "
+"management tool that includes a built-in task runner. It uses a "
+"declarative TOML configuration in your `pyproject.toml` file, which means"
+" everything related to your package—metadata, dependencies, and "
+"tasks—lives in one place. Hatch also integrates with UV for fast "
+"environment creation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:56
+msgid ""
+"**[Nox](https://nox.thea.codes/):** Nox is a flexible Python-based task "
+"runner that uses a code-based (imperative) configuration approach. You "
+"write Python functions to define your tasks in a `noxfile.py`, which "
+"gives you maximum flexibility for complex testing scenarios and "
+"conditional logic. It's especially popular in the Scientific Python "
+"ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:57
+msgid ""
+"**[Tox](https://tox.wiki/):** Tox is a mature declarative tool that uses "
+"INI or TOML configuration files. It's particularly well-suited for "
+"testing across multiple Python versions and dependency combinations, and "
+"has been a standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:59
+msgid "Command-only tools"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:61
+msgid "These tools execute your commands but don't manage environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:63
+msgid ""
+"**[Make](https://www.gnu.org/software/make/):** Make is a traditional "
+"build automation tool that uses Makefiles. It's widely known and "
+"available on most systems, making it a good choice for simple task "
+"automation when you don't need Python-specific features. However, it can "
+"have cross-platform compatibility issues, especially on Windows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:64
+msgid ""
+"**[Just](https://just.systems/):** Just is a modern command runner "
+"written in Rust with simple, Make-like syntax. It's fast, cross-platform,"
+" and easy to learn, making it a good lightweight alternative when you "
+"need basic task running without environment management."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:66
+msgid ""
+"Generally the two task runners that pyOpenSci suggests and uses are "
+"[Nox](https://nox.thea.codes/en/stable/) and [Hatch (also a package "
+"management tool)](https://hatch.pypa.io/latest/). Below, you will learn "
+"about the differences between all of the tools and can make a decision "
+"for yourself depending on your needs."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:71
+msgid "pyOpenSci recommends: Hatch and Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:73
+msgid ""
+"At pyOpenSci, the recommendation is **Hatch** for Python package "
+"development. Hatch also includes a task and environment system feature. "
+"Using Hatch means you don't need to setup another tool like Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:77
+msgid ""
+"However, **Nox** is also an excellent choice, particularly if you need "
+"complex testing, build or workflow logic."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:80
+msgid ""
+"You'll find many of the pyOpenSci documentation repositories use Nox to "
+"automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:83
+msgid "Why use Hatch?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:85
+msgid ""
+"Hatch is an all-in-one tool that helps you manage metadata, dependencies,"
+" build configuration, and tasks together in `pyproject.toml`. Using "
+"Hatch, everything related to your package lives in one place. It combines"
+" packaging (building and publishing) with everyday development tasks like"
+" testing, docs, and formatting, making workflows easier to run and share."
+" Hatch also integrates with UV making it extremely fast. Finally, Hatch "
+"follows modern packaging practices (for example, PEP 621), so your "
+"project stays aligned with community standards."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:95
+msgid "Why use Nox?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:97
+msgid ""
+"Python-based configuration gives Nox maximum flexibility, making it easy "
+"to express complex logic and conditionals directly. Because sessions are "
+"written in Python, they are explicit and easy to inspect and debug. Nox "
+"is particularly powerful for handling complex test and build scenarios "
+"that some packages require."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:103
+msgid "Declarative vs. imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:105
+msgid "An important distinction between these tools is how you configure them:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:107
+msgid ""
+"Hatch is a **Declarative tool**. This means it uses a configuration file "
+"where you specify *what* you want. See the example below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:119
+msgid ""
+"Nox uses an **Imperative** approach to defining workflows. With Nox, you "
+"write Python code that defines how to perform a task. An example of a Nox"
+" function (which would live in a separate noxfile.py file) is shown "
+"below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:132
+msgid "Trade-offs: declarative vs. imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:134
+msgid ""
+"**Declarative (Hatch, Tox):** Simpler syntax, easier to read and "
+"maintain. Might be slightly less flexible for complex logic (this is user"
+" dependent)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:137
+msgid ""
+"**Imperative (Nox):** You can easily include complex logic and "
+"conditionals. Because it uses Python, it might be more familiar to you!"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:141
+msgid ""
+"Neither approach is inherently better—it depends on your needs and "
+"preferences. Projects with complex testing scenarios may benefit from "
+"Nox's flexibility, while projects wanting simple, standardized workflows "
+"may prefer the clarity of declarative configuration."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:146
+msgid "An overview of the core task runners tools that you will find in"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:147
+msgid "the Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:149
+msgid "Comparison table"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:151
+msgid ""
+"Below you will see a comparison of features associated with each tool. "
+"Each tool is then described in a bit more detail just in case you want a "
+"better lay of the land."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Feature"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:167
+msgid "Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:223
+msgid "Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:275
+msgid "Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:321
+msgid "Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:360
+msgid "Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "noxfile.py"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "tox.ini"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Makefile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "justfile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration Style**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Declarative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Language**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "INI/TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Make syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Just syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Python-specific**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Yes"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "No"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Environment Management**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Matrix Testing**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Packaging Integration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Cross-platform**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Limited"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Best For**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complete package development"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complex testing workflows and other builds"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Legacy projects, standard testing"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple commands"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:169
+msgid ""
+"[Hatch](https://hatch.pypa.io/) is a modern, all-in-one packaging and "
+"task automation tool that simplifies Python package development by "
+"handling everything from building and publishing to running tests and "
+"formatting code. Hatch is what we use [in our packaging tutorials found "
+"in this guidebook](packaging-101)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:174
+msgid "Why we like Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:176
+msgid ""
+"Hatch stands out because it's a single tool that handles both packaging "
+"AND task running. Instead of juggling multiple tools, you configure "
+"everything in your `pyproject.toml` file—no extra configuration files "
+"needed. Hatch creates isolated environments for different tasks (like "
+"testing or building docs) and integrates with UV for extremely fast "
+"environment setup. It uses a declarative, clean syntax that's easy to "
+"read and maintain, and it supports matrix testing so you can easily test "
+"your package across multiple Python versions."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:185
+msgid "When to use Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:187
+msgid ""
+"Hatch is ideal for complete package development workflows. You can use it"
+" for testing across Python versions, building documentation, running code"
+" formatters and linters, and building and publishing your package to "
+"PyPI. If you want a modern, all-in-one solution that follows current "
+"Python packaging standards (like PEP 621), Hatch is an excellent choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:194
+#: ../../maintain-automate/task-runners.md:251
+#: ../../maintain-automate/task-runners.md:299
+#: ../../maintain-automate/task-runners.md:344
+#: ../../maintain-automate/task-runners.md:383
+msgid "Example configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:196
+msgid ""
+"Below is an example of how you'd set up a test environment in Hatch. This"
+" configuration creates a `test` environment with pytest and pytest-cov "
+"installed, defines a `run` script to execute your tests, and sets up "
+"matrix testing to run tests on Python 3.10, 3.11, and 3.12:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:217
+#: ../../maintain-automate/task-runners.md:269
+#: ../../maintain-automate/task-runners.md:315
+#: ../../maintain-automate/task-runners.md:356
+#: ../../maintain-automate/task-runners.md:396
+msgid "You would run the above in your terminal using:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:219
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:221
+msgid "**Learn more:** [Hatch documentation](https://hatch.pypa.io/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:225
+msgid ""
+"[Nox](https://nox.thea.codes/) is a Python-based automation toolkit "
+"focused on testing across environments. It uses a code-based (imperative)"
+" configuration approach that gives you maximum flexibility for complex "
+"testing workflows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:230
+msgid "Why we like Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:232
+msgid ""
+"Nox stands out because it uses Python code to define your tasks, which "
+"means you can include complex logic and conditionals directly in your "
+"automation workflows. Because sessions are written in Python, they're "
+"explicit, easy to inspect, and straightforward to debug. Nox is "
+"particularly powerful for handling complex test and build scenarios that "
+"some packages require, and it's especially popular in the Scientific "
+"Python ecosystem. You'll find many pyOpenSci documentation repositories "
+"use Nox to automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:242
+msgid "When to use Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:244
+msgid ""
+"Nox is ideal when you need complex testing scenarios with conditional "
+"logic or when you prefer Python-based configuration over declarative "
+"formats. It's excellent for testing across Python versions and managing "
+"multiple testing environments. If packaging is handled separately and you"
+" want maximum flexibility in your task automation, Nox is a great choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:253
+msgid ""
+"Below is an example of a Nox session that runs tests across multiple "
+"Python versions. The `@nox.session` decorator defines a session (similar "
+"to a task), and you specify which Python versions to test with. Nox will "
+"create isolated environments for each version and run your tests:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:271
+msgid "`nox -s tests`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:273
+msgid "**Learn more:** [Nox documentation](https://nox.thea.codes/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:277
+msgid ""
+"[Tox](https://tox.wiki/) is a mature automation tool for testing in "
+"multiple environments. It uses declarative configuration and has been a "
+"standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:281
+msgid "Why people use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:283
+msgid ""
+"Tox is mature and stable, with a long history in the Python ecosystem. It"
+" uses declarative configuration (traditionally INI format, though TOML "
+"support was added recently) and is particularly good for testing across "
+"Python versions and dependency sets. Many projects use Tox because it "
+"integrates well with CI/CD systems and has a robust plugin ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:290
+msgid "When to use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:292
+msgid ""
+"Tox is ideal if you're maintaining a legacy project that already uses it,"
+" or if you have existing `tox.ini` configuration you want to preserve. "
+"It's also a good choice if you need specific Tox plugins or prefer "
+"declarative configuration separate from your packaging tools. However, "
+"keep in mind that Tox can be slower than modern alternatives like Hatch."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:301
+msgid ""
+"Below is an example of a Tox configuration that runs tests across "
+"multiple Python versions. The `envlist` specifies which Python versions "
+"to test, and the `testenv` section defines what to install and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:317
+msgid ""
+"`tox` (runs all environments) or `tox -e py310` (runs a specific "
+"environment)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:319
+msgid "**Learn more:** [Tox documentation](https://tox.wiki/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:323
+msgid ""
+"[Make](https://www.gnu.org/software/make/) is a traditional build "
+"automation tool that uses Makefiles. It's been around since the 1970s and"
+" is widely used across many programming languages."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:327
+msgid "Why people use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:329
+msgid ""
+"Make is widely known and available on most systems, making it a familiar "
+"choice for many developers. It has simple syntax for basic tasks and "
+"executes very quickly. Because it's not Python-specific, you can use it "
+"to coordinate tasks across different languages in the same project."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:335
+msgid "When to use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:337
+msgid ""
+"Make is best for simple task automation when you don't need Python-"
+"specific features or environment management. It's a good lightweight "
+"option if you want something fast and universally available. However, be "
+"aware that Make can have cross-platform compatibility issues, especially "
+"on Windows, and you'll need to handle Python environment management "
+"separately."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:346
+msgid ""
+"Below is an example of a simple Makefile with tasks for testing and "
+"building documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:358
+msgid "`make test` or `make docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:362
+msgid ""
+"[Just](https://just.systems/) is a modern command runner written in Rust "
+"that offers a simpler, more user-friendly alternative to Make."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:365
+msgid "Why people use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:367
+msgid ""
+"Just has simple, Make-like syntax but with better error messages and more"
+" intuitive behavior. It's fast, truly cross-platform (unlike Make), and "
+"easy to learn. The tool is written in Rust, which makes it very "
+"performant, and it avoids many of the quirks and gotchas that Make has "
+"accumulated over decades."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:373
+msgid "When to use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:375
+msgid ""
+"Just is ideal when you need a lightweight command runner for simple tasks"
+" and don't require Python-specific features or environment management. "
+"It's a great choice if you want something faster and more modern than "
+"Make, with better cross-platform support. However, keep in mind that Just"
+" requires separate installation and has less integration with the Python "
+"packaging ecosystem compared to tools like Hatch or Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:385
+msgid ""
+"Below is an example of a justfile with tasks for testing and building "
+"documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:398
+msgid "`just test` or `just docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:400
+msgid "**Learn more:** [Just documentation](https://just.systems/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:402
+msgid "Choosing the right task runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:404
+msgid "**Choose Hatch if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:406
+msgid "You're building a Python package"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:407
+msgid "You want an all-in-one tool"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:408
+msgid "You prefer configuration in pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:409
+msgid "You want fast environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:410
+msgid "You prefer declarative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:412
+msgid "**Choose Nox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:414
+msgid "You need complex testing scenarios with conditional logic"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:415
+msgid "You prefer Python-based, imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:416
+msgid "You're working in the Scientific Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:417
+msgid "Packaging is handled separately"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:418
+msgid "You want maximum flexibility"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:420
+msgid "**Choose Tox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:422
+msgid "You're maintaining a legacy project already using it"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:423
+msgid "You have existing tox.ini configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:424
+msgid "You need specific tox plugins"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:425
+msgid "You prefer declarative configuration separate from packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:427
+msgid "**Choose Make or Just if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:429
+msgid "You need a lightweight command runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:430
+msgid "You're not doing Python-specific workflows"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:431
+msgid "You want something simple and fast"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:432
+msgid "You don't need environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:434
+msgid "Next steps"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:436
+msgid ""
+"Learn how to use [Hatch "
+"environments](https://hatch.pypa.io/latest/tutorials/environment/basic-"
+"usage/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:437
+msgid ""
+"[Create a package using the Python package tutorial.](create-pure-python-"
+"package)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:438
+msgid ""
+"Explore and use the [pyOpenSci package "
+"template](https://github.com/pyOpenSci/pyos-package-template) with pre-"
+"configured Hatch tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:441
+msgid ""
+"Read the [Scientific Python development guide on task "
+"runners](https://learn.scientific-python.org/development/guides/tasks/). "
+"This guide is excellent if you plan to use nox as your task runner as it "
+"has lots of examples that you can follow."
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/package-structure-code.po b/locales/de/LC_MESSAGES/package-structure-code.po
new file mode 100644
index 000000000..551f2655b
--- /dev/null
+++ b/locales/de/LC_MESSAGES/package-structure-code.po
@@ -0,0 +1,5442 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../package-structure-code/code-style-linting-format.md:1
+msgid "Python Package Code Style, Format and Linters"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:3
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:12
+msgid "Take Aways"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:5
+msgid "pyOpenSci requires authors to follow PEP 8 code format guidelines"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:6
+msgid ""
+"Setting up a code formatters like Black and isort will help you enforce "
+"PEP 8 style guidelines and also consistent, readable code format"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:7
+msgid "Some commonly used tools are: Black, Isort, flake8, Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:8
+msgid ""
+"You can also setup pre-commit hooks which will run code formatters "
+"locally each time you make a commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:10
+msgid ""
+"[precommit.ci](https://pre-commit.ci/) is a bot that you can add to your "
+"GitHub repository. It will automagically apply code format to every PR "
+"using the tools specified in your pre-commit-config.yaml file. It can "
+"save significant time and make contributions easier for new contributors."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:11
+msgid ""
+"Automation is good! By making code quality tools care of your code, you "
+"can focus on structural and high values tasks."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:14
+msgid ""
+"Consistent code format and style is useful to both your package and "
+"across the scientific Python ecosystem because using similar formats "
+"makes code easier to read."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:18
+msgid ""
+"For instance, if you saw a sentence like this one without any spaces, or "
+"punctuation, it would take your brain longer to process it."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:25
+msgid ""
+"pyOpenSci peer review process requires that you to follow standard "
+"[Python PEP 8 format rules](https://peps.python.org/pep-0008/) as closely"
+" as you can."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:29
+msgid ""
+"pyOpenSci doesn't require you to use a specific code format tool. "
+"However, we do look for consistency and readability in code style. Below "
+"you will find a discussion of:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:33
+msgid "The benefits of using linters and code format tools in your workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:34
+msgid "Some commonly used tools in the scientific Python space"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:35
+msgid ""
+"Setting up pre-commit hooks and the pre-commit.ci bot to make using code "
+"format tools in daily workflows and in pull requests on GitHub easier."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:39
+msgid "Use a code format tool (or tools) to make your life easier"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:41
+msgid ""
+"We suggest that you use a code format tool, or a set of format tools, "
+"because manually applying all of the PEP 8 format specifications is both "
+"time consuming for maintainers and can be a road block for potential new "
+"contributors. Code formatters will automagically reformat your code for "
+"you, adhering to PEP 8 standards and applying consistent style decisions "
+"throughout."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:47
+msgid "Setting up a code format suite of tools will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:49
+msgid "Save you and your maintainer team time in fixing PEP 8 inconsistencies."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:50
+msgid "Ensure that format and style is consistent across your entire code-base."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:51
+msgid ""
+"Avoid lengthy discussions with contributors and other maintainers about "
+"personalized code format preferences during reviews."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:53
+msgid ""
+"Avoid pure visual edits in the code base so that code reviews focus on "
+"added value"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:55
+msgid ""
+"Many packages use a suite of tools to apply code format rules, taking the"
+" work out of manually implementing code format requirements."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:58
+msgid ""
+"Consistent code format across packages within the (scientific) Python "
+"ecosystem, will also broadly make code easier to scan, understand and "
+"contribute to."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:61
+msgid "Linting vs. format and style"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:63
+msgid "Before we dive in let's get a few definitions out of the way."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:65
+msgid "Code linting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:67
+msgid ""
+"A code linter is a tool that will review your code and identify errors or"
+" issues. A linter typically does not modify your code. It will tell you "
+"what the error is and on what line it was discovered. Flake8, discussed "
+"below, is an example of a commonly-used code linter."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:72
+msgid "Code formatters (and stylers)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:74
+msgid ""
+"Code formatters will reformat your code for you. Python focused code "
+"formatters often follow PEP 8 standards. However, they also make "
+"stylistic decisions about code consistency."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:78
+msgid ""
+"Black is an example of a commonly-used code formatter. Black both applies"
+" PEP 8 standards while also making decisions about things like consistent"
+" use of double quotes for strings, and spacing of items in lists."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:82
+msgid "You will learn more about Black below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:84
+msgid "Code linting, formatting and styling tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:87
+msgid "Black"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:89
+msgid ""
+"[Black](https://black.readthedocs.io/en/stable/) is a code formatter. "
+"Black will automagically (and _unapologetically_) fix spacing issues and "
+"ensure code format is consistent throughout your package. Black also "
+"generally adheres to PEP 8 style guidelines with some exceptions. A few "
+"examples of those exceptions are below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:95
+msgid ""
+"Black defaults to a line length of 88 (79 + 10%) rather than the 79 "
+"character `PEP 8` specification. However, line length is a setting can be"
+" manually overwritten in your Black configuration."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:96
+msgid "Black will not adjust line length in your comments or docstrings."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:97
+msgid ""
+"This tool will not review and fix import order (you need `isort` or "
+"`ruff` to do that - see below)."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:100
+msgid ""
+"If you are interested in seeing how Black will format your code, you can "
+"use the [Black playground](https://black.vercel.app/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:104
+msgid ""
+"Using a code formatter like Black will leave you more time to work on "
+"code function rather than worry about format."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:108
+msgid "Flake8"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:110
+msgid ""
+"To adhere to Python `pep8` format standards, you might want to add "
+"[flake8](https://flake8.pycqa.org/en/latest/) to your code format "
+"toolbox."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:114
+msgid "flake8 will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:116
+msgid ""
+"Flag every line in your code that extends beyond 79 characters (including"
+" those in docstrings and comments)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:117
+msgid ""
+"Flag spacing issues that conflict with PEP 8 guidelines such as missing "
+"spaces after commas"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:119
+msgid ""
+"Flake8 also flags unused imports and unused declared variables in your "
+"modules."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:122
+msgid ""
+"Below you can see the output of running `flake8 filename.py` at the "
+"command line for a Python file within a package called `stravalib`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:126
+msgid "The line length standard for PEP 8 is 79 characters."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:128
+msgid ""
+"Notice that flake8 returns a list of issues that it found in the model.py"
+" module on the command line. The Python file itself is not modified. "
+"Using this output, you can fix each issue line by line manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:143
+msgid "Isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:145
+msgid ""
+"Python imports refer to the Python packages that a module in your package"
+" requires. Imports should always be located at the top of each Python "
+"module in your package."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:149
+msgid ""
+"[PEP 8 has specific standards for the order of these "
+"imports](https://peps.python.org/pep-0008/#imports). These standards are "
+"listed below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:151
+msgid "Imports should be grouped in the following order:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:153
+msgid "Standard library imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:154
+msgid "Related third party imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:155
+msgid "Local application/library specific imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:157
+msgid ""
+"While `flake8` will identify unused imports in your code, it won't fix or"
+" identify issues with the order of package imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:160
+msgid ""
+"`isort` will identify where imports in your code are out of order. It "
+"will then modify your code, automatically reordering all imports. This "
+"leaves you with one less thing to think about when cleaning up your code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:165
+msgid "Example application of isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:167
+msgid "Code imports before `isort` is run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:169
+msgid ""
+"Below, the `pandas` is a third party package, `typing` is a core `Python`"
+" package distributed with `Python`, and `examplePy.temperature` is a "
+"first-party module which means it belongs to the same package as the file"
+" doing the import. Also notice that there are no spaces in the imports "
+"listed below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:179
+msgid "From the project root, run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:185
+msgid "Python file `temporal.py` imports after `isort` has been run"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:193
+msgid "Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:195
+msgid ""
+"[Ruff](https://docs.astral.sh/ruff/) is a new addition to the code "
+"quality ecosystem, gaining some traction since its release. `ruff` is "
+"both a linter and a code formatter for Python, aiming to replace several "
+"tools behind a single interface. As such, `ruff` can be used at a "
+"replacement of all other tools mentioned here, or in complement to some "
+"of them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:201
+msgid ""
+"`ruff` has some interesting features that distinguish it from other "
+"linters:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:203
+msgid "Linter configuration in `pyproject.toml`"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:204
+msgid "Several hundred rules included, many of which are automatically fixable"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:205
+msgid ""
+"Rules explanation, see [F403](https://docs.astral.sh/ruff/rules"
+"/undefined-local-with-import-star/) for an example"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:206
+msgid ""
+"Fast execution time, makes a quick feedback loop possible even on large "
+"projects."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:208
+msgid ""
+"Here is a simple configuration to get started with `ruff`. It would go "
+"into your `pyproject.toml`:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:216
+msgid ""
+"Depending on your project, you might want to add the following to sort "
+"imports correctly:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:224
+msgid "How to use code formatter in your local workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:226
+msgid "Linters, code formatters and your favorite coding tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:228
+msgid ""
+"Linters can be run as a command-line tool as shown above. They also can "
+"be run within your favorite coding tool (e.g. VScode, pycharm, etc). For "
+"example, you might prefer to have tools like Black and isort run when you"
+" save a file. In some editors you can also setup shortcuts that run your "
+"favorite code format tools on demand."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:234
+msgid "Use pre-commit hooks to run code formatters and linters on commits"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:236
+msgid "You can also setup a `pre-commit hook` in your Python package repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:238
+msgid ""
+"A pre-commit hook is a tool that allows an action (or actions) to be "
+"triggered when you apply a commit to your git repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:241
+msgid "Pre-commit hook example workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:243
+msgid "The precommit workflow looks like this: You type and run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:246
+msgid "`git commit -m \"message here\"` at the command line"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:248
+msgid ""
+"Once you hit return, pre-commit will run any tools that you have "
+"configured in a **.pre-commit-config.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:250
+msgid ""
+"If the tools configured in the pre-commit hook run successfully without "
+"making changes or finding errors in your code, the commit will be applied"
+" to the repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:254
+msgid ""
+"If the tools configured in the hook find errors in your files, the commit"
+" will NOT be applied to the repository. Remember from the discussion "
+"above that a code formatter like Black will run and reformat your code. A"
+" linter like _flake8_ will provide you with some output that details "
+"where there are syntax issues in your code. You will then need to fix "
+"those issues, manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:261
+msgid ""
+"Once all of the fixes are applied you can re-add (stage) the files to be "
+"commit. And re-run your commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:265
+msgid "Diagram showing the steps of a pre-commit workflow from left to right."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:267
+msgid ""
+"The pre-commit workflow begins with you adding files that have changes to"
+" be staged in git. Next, you'd run git commit. When you run git commit, "
+"the pre-commit hooks will then run. In this example, Black, the code "
+"formatter and flake8, a linter both run. If all of the files pass Black "
+"and flake8 checks, then your commit will be recorded. If they don't, the "
+"commit is canceled. You will have to fix any flake8 issues, and then re-"
+"add / stage the files to be committed. [_Image "
+"Source_](https://ljvmiranda921.github.io/notebook/2018/06/21/precommits-"
+"using-black-and-flake8/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:280
+msgid ""
+"If have a Python code-base and multiple maintainers actively working on "
+"the code, and you intend to run a tool like Black, be sure to coordinate "
+"across your team. An initial commit that applies Black to your entire "
+"package will likely change a significant amount of your code. This could "
+"lead to merge conflicts on open and new PR's before the new changes are "
+"merged."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:287
+msgid "General pre commit checks"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:289
+msgid ""
+"In addition to calling tools, Pre-commit also has a suite of [built in "
+"format hooks](https://github.com/pre-commit/pre-commit-hooks#hooks-"
+"available) that you can call. Some, such as `trailing-whitespace` can be "
+"also useful to add to your pre-commit workflow to ensure clean, "
+"streamlined code files."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:294
+msgid ""
+"An example pre-commit-config.yaml file is below with examples of how this"
+" is all setup."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:297
+msgid "Pre-commit.ci"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:299
+msgid ""
+"[Pre-commit.ci](https://pre-commit.ci) is a bot that may become your new "
+"best friend. This bot, when setup on a repo can be configured to do the "
+"following:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:302
+msgid "It will check every pull request using all of the pre-commit hook setting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:303
+msgid ""
+"If you wish, it will also submit a pull request to your repo with pre-"
+"commit fixes, saving you, and new contributors the time of reformatting a"
+" pr that has format issues."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:306
+msgid "You can also call the bot on any pull request to run / and fix the code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:308
+msgid ""
+"The pre-commit.ci bot uses the same pre-commit-config.yaml file that you "
+"use to setup pre-commit locally."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:311
+msgid "Setting up a bot like this can be valuable because:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:313
+msgid ""
+"It can make is easier for maintainers as they no longer have to worry at "
+"allows about fixing code format. The bot will do the work for them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:315
+msgid ""
+"It can make it easier for new comers as they never have to setup pre-"
+"commit locally or worry about linting their code. They can even make "
+"small fixes to the code directly on GitHub without worry."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:317
+msgid "Setting up a git pre-commit hook"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:319
+msgid "To setup pre-commit locally, you need to do 3 things:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:321
+msgid ""
+"Install pre-commit (and include it as a development requirement in your "
+"repository)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:331
+msgid ""
+"Create a .pre-commit-config.yaml file in the root of your package "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:333
+msgid ""
+"Below is an example **.pre-commit-cofig.yaml** file that can be used to "
+"setup the pre-commit hook and the pre-commit.ci bot if you chose to "
+"implement that too."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:341
+msgid ""
+"This file specifies a hook that will be triggered automatically before "
+"each `git commit`, in this case, it specifies a `flake8` using version "
+"`6.0.0`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:344
+msgid ""
+"Install your pre-commit hook(s) using `pre-commit install`. This will "
+"install all of the hooks specified in the pre-commit yaml file into your "
+"environment."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:346
+msgid ""
+"Once you have done the above, you are ready to start working on your "
+"code. Pre-commit will run every time you run `git commit`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:349
+msgid "Summary"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:351
+msgid ""
+"pyOpenSci suggests setting up a linter and a code styler for your "
+"package, regardless of whether you use pre-commit hooks, CI or other "
+"infrastructure to manage code format. Setting up these tools will give "
+"you automatic feedback about your code's structure as you (or a "
+"contributor) write it. And using a tool like black that format code for "
+"you, reduce effort that you need to make surrounding decisions around "
+"code format and style."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:1
+msgid "Complex Python package builds"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:3
+msgid ""
+"This guide is focused on packages that are either pure-python or that "
+"have a few simple extensions in another language such as C or C++."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:6
+msgid ""
+"For comprehensive guidance on packaging compiled projects with "
+"C/C++/Fortran/Rust extensions, see the [Scientific Python Development "
+"Guide on compiled packaging](https://learn.scientific-"
+"python.org/development/guides/packaging-compiled/). This is the best "
+"reference for complex builds and covers scikit-build-core, meson-python, "
+"maturin, and other modern build backends."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:8
+msgid ""
+"If you have questions about these types of package, please open an [issue"
+" about this guide specifically in the GitHub repo for this "
+"guide](https://github.com/pyOpenSci/python-package-guide/issues). There "
+"are many nuances to building and distributing Python packages that have "
+"compiled extensions requiring non-Python dependencies at build time. For "
+"an overview and thorough discussion of these nuances, please see [this "
+"site.](https://pypackaging-native.github.io/)"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:10
+msgid "Pure Python packages vs. packages with extensions in other languages"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:12
+msgid ""
+"You can classify Python package complexity into three general categories."
+" These categories can in turn help you select the correct package "
+"frontend and backend tools."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:16
+msgid ""
+"**Pure-python packages:** these are packages that only rely on Python to "
+"function. Building a pure Python package is simpler. As such, you can "
+"chose a tool below that has the features that you want and be done with "
+"your decision!"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:18
+msgid ""
+"**Python packages with non-Python extensions:** These packages have "
+"additional components called extensions written in other languages (such "
+"as C or C++). If you have a package with non-Python extensions, then you "
+"need to select a build backend tool that allows additional build steps "
+"needed to compile your extension code. Further, if you wish to use a "
+"frontend tool to support your workflow, you will need to select a tool "
+"that supports additional build setups. We suggest that you chose build "
+"tool that supports custom build steps like Hatch."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:20
+msgid ""
+"**Python packages that have extensions written in different languages "
+"(e.g. Fortran and C++) or that have non Python dependencies that are "
+"difficult to install (e.g. GDAL):** These packages often have complex "
+"build steps (more complex than a package with just a few C extensions for"
+" instance). As such, these packages require tools such as [scikit-"
+"build](https://scikit-build.readthedocs.io/en/latest/) or [meson-"
+"python](https://mesonbuild.com/Python-module.html) to build. NOTE: you "
+"can use meson-python with PDM."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:23
+msgid "Mixing frontend and backend projects"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:25
+msgid ""
+"It is sometimes necessary or desirable to use a build frontend with an "
+"alternative build-backend. This is because some frontends do not have a "
+"default backend (`build`), and this choice is placed on the maintainer. "
+"Other backends (`hatch`) have a preferred backend (`hatchling`) but allow"
+" the maintainer to migrate to another, while some backends (`poetry`) "
+"only work with a single backend (`poetry-core`). Refer to (#python-"
+"package-build-tools) for more information about frontend and backend "
+"compatibility."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:31
+msgid ""
+"In this packaging guide we recommend using `hatch` along with its "
+"preferred backend `hatchling`. While this will be suitable for most "
+"packages, an alternate backend may be used with Hatch if needed when "
+"creating an extension module. A Python extension module is one that is "
+"made up, either in part or entirely, of compiled code. In this case the "
+"backend chosen (such as `meson-python`) must know how to compile the "
+"extension language and bind it to Python. `hatchling` does not know how "
+"to do this all on its own and must either make use of "
+"[plugins](https://hatch.pypa.io/1.9/plugins/about/) or be replaced by a "
+"backend that is already capable of building extension modules."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:39
+msgid ""
+"In order to use a different backend you will need to edit your project's "
+"`pyproject.toml`. If you have a `pyproject.toml` generated by the `hatch`"
+" command, or from following the packaging tutorial, you may have to make "
+"a change like this"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:6
+msgid "Dependencies for your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:8
+msgid ""
+"In the [pyproject.toml overview page](pyproject-toml-python-package-"
+"metadata), you learned how to set up a **pyproject.toml** file with basic"
+" metadata for your package. On this page, you will learn how to specify "
+"different types of dependencies in your `pyproject.toml`."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:14
+msgid "What is a package dependency?"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:16
+msgid ""
+"A Python package dependency refers to an external package or A tool that "
+"is needed when using or working on your Python project. Declare your "
+"dependencies in your `pyproject.toml` file. This keeps all package "
+"metadata in one place, making it simpler for users and contributors to "
+"understand your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:19
+msgid "Older ways to declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:22
+msgid ""
+"While `pyproject.toml` is now the standard, you may sometimes encounter "
+"older approaches to storing dependencies \"in the wild\":"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:24
+msgid ""
+"**requirements.txt**: Previously common for dependencies, still used by "
+"some projects for local development"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:25
+msgid ""
+"**setup.py or setup.cfg**: May be needed for packages with extensions in "
+"other languages"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:27
+msgid ""
+"[Learn more in the setuptools "
+"documentation](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html"
+"#declaring-required-dependency)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:30
+msgid "Why specify dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:32
+msgid ""
+"Specifying dependencies in the `project.dependencies` array of your "
+"`pyproject.toml` file ensures that libraries needed to run your package "
+"are correctly installed into a user's environment. For instance, if your "
+"package requires Pandas to run properly, and you add Pandas to the "
+"`project.dependencies` array, Pandas will be installed into the users' "
+"environment when they install your package using uv, pip, or conda."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:45
+msgid ""
+"Development dependencies make it easier for contributors to work on your "
+"package. You can set up instructions for running specific workflows, such"
+" as tests, linting, and even typing, that automatically install groups of"
+" development dependencies. These dependencies can be stored in arrays "
+"(lists of dependencies) within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:55
+msgid "Types of dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:57
+msgid ""
+"There are three different types of dependencies that you will learn about"
+" on this page:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:59
+msgid ""
+"**Required dependencies:** These are dependencies that need to be "
+"installed for your package to work correctly in a user's environment. You"
+" add these dependencies to the `project.dependencies` table in your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:60
+msgid ""
+"**Feature Dependencies:** These are dependencies that are required if a "
+"user wants to access additional functionality (that is not core) to your "
+"package. Store these in the `[project.optional-dependencies]` table or "
+"your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:61
+msgid ""
+"**Development Dependencies:** These dependencies are required if someone "
+"wants to develop or work on your package. These include instance linters,"
+" testing tools like pytest and mypy are examples of development "
+"dependencies. Store these in the `[dependency-groups]` table of your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:64
+msgid ""
+"A dependency is not part of your project's codebase. It is a package or "
+"software called within the code of your project or used during the "
+"development of your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:69
+msgid "1. Required dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:71
+msgid ""
+"Required dependencies are imported and called directly within your "
+"package's code. They are needed for your package to run."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:74
+msgid ""
+"You can add your required dependencies to the `dependencies` array in the"
+" `[project]` table of your **pyproject.toml** file. When users install "
+"your package with uv, pip, or conda, these dependencies will be "
+"automatically installed alongside your package in their environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:92
+msgid ""
+"Try your best to minimize dependencies whenever possible. Remember that "
+"fewer dependencies reduce the possibility of version conflicts in user "
+"environments."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add Required Dependencies with UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:102
+#: ../../package-structure-code/declare-dependencies.md:162
+#: ../../package-structure-code/declare-dependencies.md:222
+msgid "You can use uv to add dependencies to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:104
+msgid "**Add a required dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:110
+msgid "Will add numpy as a dependency to your `project.dependencies` array:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:121
+msgid "Requiring packages from GitHub / Gitlab"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:124
+msgid ""
+"If you have dependencies that need to be installed directly from GitHub, "
+"you can specify them in your pyproject.toml file like this:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:133
+msgid ""
+"IMPORTANT: If your library depends on a GitHub-hosted project, you should"
+" point to a specific commit/tag/hash of that repository before you upload"
+" your project to PyPI. You never know how the project might change over "
+"time. Commit hashes are more reliable as they can't be changed"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:140
+msgid "2. Optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:142
+msgid ""
+"Optional (also referred to as feature) dependencies can be installed by "
+"users as needed. Optional dependencies add specific features to your "
+"package that not all users need. For example, if your package has an "
+"optional interactive plotting feature that uses Bokeh, you would list "
+"Bokeh under `[project.optional-dependencies]`. Users who want interactive"
+" plotting will install it. Users who don't need plotting don't have to "
+"install it."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:144
+msgid "Place these dependencies in the `[project.optional-dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:155
+msgid ""
+"When a user installs your package, uv, pip, or conda automatically "
+"installs all required dependencies. Optional dependencies are only "
+"installed if the user explicitly requests them."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add optional dependencies using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:164
+msgid "**Add an optional dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:170
+msgid "Will add this to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:181
+msgid "3. Dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:183
+msgid ""
+"Development dependencies include packages needed to work on your package "
+"locally. They are used to perform tasks such as:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:186
+msgid "running your test suite (pytest, pytest-cov)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:187
+msgid "building your documentation (sphinx, sphinx-theme packages)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:188
+msgid "linting and formatting code (ruff, black)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:189
+msgid "building package distribution files (build, twine)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:191
+msgid ""
+"Dependency groups are optional because they are not required for users to"
+" install and use your package. However, they will make it easier for "
+"contributors to your project to setup development environments locally."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:196
+msgid "New: PEP 735 dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:199
+msgid ""
+"`[dependency-groups]` is a newer specification introduced by PEP 735. "
+"They are intended to organize development dependencies and are "
+"intentionally separate from `[project.optional-dependencies]`, which can"
+" be installed into a user's environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:203
+msgid "How to declare dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:205
+msgid ""
+"You declare development dependencies in your **pyproject.toml** file "
+"within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:208
+msgid ""
+"Similar to optional-dependencies, you can create separate subgroups or "
+"arrays with names using the syntax: `group-name = [\"dep1\", \"dep2\"]`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add [dependency-groups] using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:224
+msgid "**Add a development dependency group:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:231
+msgid "Will add the following to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:244
+#: ../../package-structure-code/declare-dependencies.md:250
+#: ../../package-structure-code/declare-dependencies.md:294
+#: ../../package-structure-code/declare-dependencies.md:413
+#: ../../package-structure-code/declare-dependencies.md:495
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:14
+msgid "Todo"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:245
+msgid ""
+"i'll pick back up here tomorrow - this section is all about how things "
+"install and what \"ships\" with your package vs what just gets installed "
+"via commands (ie development)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:248
+msgid "Understanding required vs. optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:251
+msgid ""
+"The purpose of this section is to help users understand how dependencies "
+"relate to what is installed in their environment. We have two graphics on"
+" this page - one that breaks out the two buckets of tools (required and "
+"optional) that both get installed into a user's envt vs development "
+"groups, which are contributor/ development facing, not user-facing. When "
+"we originally wrote this section, development groups didn't exist, and we"
+" were using optional dependencies for dev groups."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:253
+msgid ""
+"The graphic below is two circles representing optional vs regular / "
+"required deps - created before development groups existed... there is "
+"another graphi that shows what gets installed into a uses envt."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:257
+msgid ""
+"Diagram showing two main groups of Python package dependencies: required "
+"and optional. Required dependencies include core packages needed to use "
+"your package. Optional dependencies include development dependencies for "
+"working on the package locally and feature dependencies for additional "
+"functionality."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:259
+msgid ""
+"Python package dependencies fall into two categories: **required** "
+"dependencies that users need to run your package, and **optional** "
+"dependencies for development work or additional features."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:264
+msgid "Additional dependency resources"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:266
+msgid ""
+"[Learn more: View PyPA's overview of declaring optional "
+"dependencies](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/#dependencies-optional-dependencies)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:267
+msgid ""
+"[Dependency "
+"specifiers](https://packaging.python.org/en/latest/specifications"
+"/dependency-specifiers/)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:271
+msgid "Install dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:273
+msgid ""
+"When someone installs your package, only core dependencies are installed "
+"by default. To install optional dependencies, you need to specify which "
+"groups to include when installing the package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:279
+msgid ""
+"Diagram showing a Venn diagram with three sections representing "
+"dependency groups - docs, feature, and tests. In the center it shows "
+"your-package with core dependencies seaborn and numpy. Two arrows on the "
+"right demonstrate: first, python -m pip install your-package installs "
+"only the package and core dependencies. Second, python -m pip install "
+"your-package[tests] installs the package, core dependencies, and test "
+"dependencies including pytest and pytest-cov."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:281
+msgid ""
+"When a user installs your package using `pip install your-package`, only "
+"your package and its core dependencies get installed. When they install "
+"with `pip install your-package[tests]`, pip will install your package, "
+"core dependencies, and the test dependencies from the `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:288
+msgid "Using uv or pip for installation"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:290
+msgid ""
+"UV streamlines this process, allowing you to sync a venv in your project "
+"directory with both an editable install of your package and its "
+"dependencies automatically. You can also use pip and install dependencies"
+" into the environment of your choice."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:295
+msgid ""
+"We shouldn't show UV pip install, so how do you add optional feature deps"
+" with UV??"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:298
+#: ../../package-structure-code/declare-dependencies.md:340
+msgid "**Install dependency groups:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:304
+msgid "You can use uv sync to sync dependency groups in your uv-managed venv"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:312
+#: ../../package-structure-code/declare-dependencies.md:333
+msgid "**Install optional dependencies:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:320
+msgid "**Install everything (package + all dependencies):**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:326
+msgid ""
+"`uv sync` is the recommended command for development workflows. It "
+"manages your virtual environment and keeps your lockfile up to date. Use "
+"`uv pip install` when you need pip-compatible behavior."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use pip (version >=25.1)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:347
+msgid ""
+"Always call pip using `python -m pip` to ensure you're using the pip from"
+" your current active Python environment. This helps avoid installation "
+"conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:351
+msgid ""
+"**Note:** Some shells (like zsh on Mac) require quotes around brackets to"
+" run successfully:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:353
+msgid "`python -m pip install \".[tests]\"`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:359
+msgid "Combining dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:361
+msgid "You can also create combined groups that reference other groups:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:370
+msgid "Then install everything with pip install or uv sync as needed:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:379
+msgid ""
+"When you install optional dependencies, pip and uv install your package "
+"and its core dependencies automatically."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:383
+msgid "Version specifiers for dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:385
+msgid ""
+"Version specifiers control which versions of a dependency work with your "
+"package. Use them to specify minimum versions, exclude buggy releases, or"
+" set version ranges."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:389
+msgid "Common operators"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:391
+msgid ""
+"**`>=`** Minimum version set: `numpy>=1.20` (This is the most common "
+"approach and is recommended)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:392
+msgid ""
+"**`==`** Exact version: `requests==2.28.0` (Avoid pinning dependencies "
+"like this unless necessary)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:393
+msgid ""
+"**`~=`** Compatible release: `django~=4.2.0` (Allows patches: "
+">=4.2.0,<4.3.0)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:394
+msgid "**`<` or `>`** - Upper/lower bounds: `pandas>=1.0,<3.0`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:395
+msgid ""
+"**`!=`** Exclude version: `scipy>=1.7,!=1.8.0` (Rare but allows you to "
+"skip a buggy release version)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:398
+msgid ""
+"**Best practice:** Use `>=` to specify your minimum tested version and "
+"avoid upper bounds unless you know at what version that dependency is no "
+"longer compatible. UV will do this by default when it adds a dependency "
+"to your pyproject.toml file. This keeps your package flexible and reduces"
+" dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:414
+msgid "Using conda and Pixi"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:418
+msgid ""
+"The `pyproject.toml` file works great for pure-Python packages. However, "
+"some packages (particularly in the scientific Python ecosystem) require "
+"dependencies written in other languages like C or Fortran. Conda was "
+"created to support the distribution of tools with non-Python "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:423
+msgid "**For conda users:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:425
+msgid ""
+"You can maintain an `environment.yml` file to help users and contributors"
+" set up conda environments. This is especially useful for packages with "
+"system-level dependencies like GDAL."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:429
+msgid "**Consider Pixi for conda package focused workflows:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:431
+msgid ""
+"[Pixi](https://pixi.sh) is a modern package manager built on top of both "
+"the conda and Python package ecosystems. Pixi is able to treat conda and "
+"Python package requirements with parity when resolving environments, but "
+"uses a \"conda-first\" approach of using already resolved conda packages "
+"if possible when resolving Python dependencies. Pixi [can also use "
+"`pyproject.toml` for "
+"configuration](https://pixi.sh/latest/python/pyproject_toml/). If your "
+"project relies heavily on conda packages, Pixi offers a streamlined "
+"workflow with faster dependency resolution and automatic lock file "
+"support for full environment reproducibility. If you already have an "
+"existing conda environment definition file, like an `environment.yml`, "
+"you can [import the "
+"environment](https://pixi.sh/latest/tutorials/import/) into a new Pixi "
+"workspace with"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:449
+msgid "A note for conda users"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:452
+msgid ""
+"If you use a conda environment for development and install your package "
+"with `python -m pip install -e .` dependencies will be installed from "
+"PyPI, potentially overwriting conda packages that had already been "
+"installed. This can cause conflicts, especially for packages with system "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:457
+msgid "To avoid this, install your package without dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:463
+msgid "Then install dependencies through your conda `environment.yml` file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:466
+msgid "Dependencies in Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:468
+msgid ""
+"Once you've specified dependencies in your `pyproject.toml`, you can use "
+"them in other workflows like building documentation on Read the Docs."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:471
+msgid ""
+"[Read the Docs](https://readthedocs.org) is a documentation platform that"
+" automatically builds and publishes your documentation. To install your "
+"dependencies during the build process, configure them in a "
+"**readthedocs.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:476
+msgid "Here's an example that installs your `docs` optional dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:487
+msgid "Learn more about Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:490
+msgid ""
+"[Creating a readthedocs.yaml file](https://docs.readthedocs.io/en/stable"
+"/config-file/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:491
+msgid ""
+"[Using uv with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:492
+msgid ""
+"[Using Poetry with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html#install-dependencies-with-poetry)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:497
+msgid ""
+"Keep this comment - in this file for now - Jeremiah "
+"did a nice inventory of common shells and whether they need quotes or "
+"not. It's really comprehensive. But do we want it in the guide?? It's "
+"really useful for more advanced users."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:499
+msgid ""
+"Following this comment: "
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:502
+msgid "Jonny will add a section that talks about:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:504
+msgid ""
+"Why you specify dependencies How to specify dependencies When you use "
+"different specifiers"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Intro"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Python package structure"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "pyproject.toml Package Metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Package Build Tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Complex Builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Create & Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish with Conda / PyPI"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Package versions"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Code style"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish your package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:1
+msgid "Python Package Structure & Code"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:3
+msgid ""
+"This section covers everything you need to structure your Python package,"
+" configure metadata, choose build tools, and publish your package to PyPI"
+" and conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:9
+msgid "New to Python packaging?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:13
+msgid "**Start with our step-by-step tutorials:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:15
+msgid "Follow along as we create a package from scratch"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:16
+msgid "Learn by doing with guided examples"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:17
+msgid "Perfect for your first package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:19
+msgid "Start the tutorial series"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:27
+msgid "Already have code to package?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:30
+msgid "**Jump into the reference guides:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:32
+msgid "Learn about package structure and metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:33
+msgid "Compare build tools and choose what's right for you"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:34
+msgid "Understand the publishing process"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:36
+msgid "Start with the cards below ↓"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:40
+msgid "How this content is developed"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:43
+msgid ""
+"All of the content in this guide has been vetted by community members, "
+"including maintainers and developers of the core packaging tools."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:46
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:48
+msgid "In this section, you'll learn how to:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:50
+msgid ""
+"**Structure your package** - Choose between src and flat layouts, "
+"organize tests and documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:51
+msgid ""
+"**Configure metadata** - Set up `pyproject.toml` with project "
+"information, dependencies, and versioning"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:52
+msgid ""
+"**Choose build tools** - Compare Hatch, PDM, Poetry, and setuptools to "
+"find the right fit"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:53
+msgid ""
+"**Build distributions** - Create sdist and wheel files ready for "
+"publication"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:54
+msgid ""
+"**Publish your package** - Make your package available on PyPI and "
+"optionally conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:55
+msgid ""
+"**Maintain code quality** - Set up linters and formatters to keep your "
+"code consistent"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:57
+msgid ""
+"Our recommendations align with current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/), while "
+"prioritizing tools that are beginner-friendly and well-maintained."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:59
+msgid "Package setup"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:66
+msgid "✨ Package file structure ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:68
+msgid ""
+"Learn how to organize your package files using [src or flat layouts"
+"](package-source-layout). This page helps you decide on a package "
+"structure that follows modern Python best practices, including where to "
+"place [tests](src-layout-test) and [documentation](package-source-"
+"layout)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:71
+msgid "✨ Add metadata ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:73
+msgid ""
+"Learn how to add [project metadata](pyproject-toml-python-package-"
+"metadata) to your Python package to support both filtering on PyPI and "
+"also the metadata that a package installer needs to build and install "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:78
+msgid "✨ Declare dependencies ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:80
+msgid ""
+"Learn how to specify [required dependencies](required-dependencies), "
+"[optional feature dependencies](optional-dependencies), and [development "
+"dependencies](dependency-groups) in your [pyproject.toml file](pyproject-"
+"toml-overview)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:83
+msgid "✨ Setup package versioning ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:85
+msgid ""
+"Learn how to manage package versions using [semantic versioning (SemVer"
+")](package-versioning) or [calendar versioning (CalVer)](package-"
+"versioning). This page helps you choose the right versioning strategy and"
+" set up [automated version management](tools-version-management) using "
+"tools like hatch_vcs or setuptools-scm."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:89
+msgid "Development practices"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:96
+msgid "✨ Code style & linters ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:98
+msgid ""
+"Learn how to set up [code formatters and linters](code-style-tools) "
+"([Black](about-black), [Ruff](about-ruff), [flake8](about-flake8)) to "
+"ensure your package follows [PEP 8 standards](code-style-tools) and "
+"maintains consistent code style throughout your project."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:102
+msgid "Build & publish"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:109
+msgid "✨ Choose your build tool ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:111
+msgid ""
+"Learn how to choose the right packaging tool for your project. Compare "
+"[Hatch](about-hatch), [PDM](about-pdm), [Poetry](about-poetry), and "
+"[setuptools](about-setuptools) to find the best fit for your workflow. "
+"See the [summary comparison](summary-build-tools) to help decide."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:114
+msgid "✨ Build your package ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:116
+msgid ""
+"Learn how to build your Python package into [distribution files](build-"
+"package) ([sdist](python-source-distribution) and [wheel](python-wheel)) "
+"that can be published on [PyPI](publish-pypi-conda)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:119
+msgid "✨ Publish to PyPI and Conda ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:121
+msgid ""
+"Learn how to publish your package to [PyPI](publish-pypi-conda) and "
+"optionally to [conda-forge](how-to-submit-to-conda-forge). This page "
+"covers the complete process for making your package available to users, "
+"including the [conda-forge submission process](how-to-submit-to-conda-"
+"forge) after publishing to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:125
+msgid "Choosing the right tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:127
+msgid ""
+"Not sure which build tool to use? This decision tree can help you choose "
+"based on your package's needs:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:131
+msgid ""
+"Figure showing a decision tree with the various packaging tool front-end "
+"and back-end options."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:133
+msgid ""
+"Use this decision tree to help select a packaging tool. See the "
+"[packaging tools page](python-package-build-tools) for detailed "
+"comparisons and recommendations."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:136
+msgid "Our recommendations"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:138
+msgid "We suggest tools and approaches based on three principles:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:140
+msgid ""
+"**Beginner-friendly** - Tools that are easy to learn and use for those "
+"new to packaging"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:141
+msgid "**Well-maintained** - Tools with active development and good documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:142
+msgid ""
+"**Standards-aligned** - Tools that follow current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/)"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:144
+msgid "Pure Python vs. complex builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:146
+msgid ""
+"**Pure Python packages** can use any modern tool (Hatch, PDM, Poetry, "
+"Flit) - choose based on the features you want"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:147
+msgid ""
+"**Packages with C/C++ extensions** may need additional build steps. See "
+"our [complex builds page](complex-python-package-builds) for guidance. "
+"For comprehensive information on packaging compiled projects, see the "
+"[Scientific Python Development Guide on compiled packaging](https://learn"
+".scientific-python.org/development/guides/packaging-compiled/)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:149
+msgid ""
+"Most scientific Python packages start simple and can evolve to handle "
+"more complex requirements as needed."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:151
+msgid "Submitting your package for peer review?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:153
+msgid ""
+"If you're planning to submit your package to pyOpenSci for [peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), check "
+"out our [editor checklist](https://www.pyopensci.org/software-peer-review"
+"/how-to/editor-in-chief-guide.html#editor-checklist-template) for the "
+"minimum requirements. These checks are useful for anyone creating a "
+"Python package, not just those submitting for review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:155
+msgid "These are recommendations, not requirements"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:158
+msgid ""
+"The suggestions in this guide are designed to help you create a well-"
+"structured package. They are **not** specific requirements for pyOpenSci "
+"peer review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:160
+msgid ""
+"If you're submitting to pyOpenSci, see our [package "
+"scope](https://www.pyopensci.org/software-peer-review/about/package-"
+"scope.html) and [author guide](https://www.pyopensci.org/software-peer-"
+"review/how-to/author-guide.html#) for actual review requirements."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:1
+msgid "Publishing Your Package In A Community Repository: PyPI or Anaconda.org"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:5
+msgid ""
+"pyOpenSci requires that your package has an distribution that can be "
+"installed from a public community repository such as PyPI or a conda "
+"channel such as `bioconda` or `conda-forge` on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:9
+msgid ""
+"Below you will learn more about the various publishing options for your "
+"Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:14
+msgid ""
+"Installing packages in the same environment using both pip and conda can "
+"lead to package conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:16
+msgid ""
+"To minimize conflicts for users who may be using conda (or pip) to manage"
+" local environments, consider publishing your package to both PyPI and "
+"the conda-forge channel on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:18
+msgid ""
+"Below you will learn more specifics about the differences between PyPI "
+"and conda publishing of your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:23
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:6
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:25
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires a source distribution on PyPI in order to build"
+" your package on conda-forge. You do not need to rebuild your package to "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:29
+msgid "What is PyPI"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:31
+msgid ""
+"[PyPI](https://pypi.org/) is an online Python package repository that you"
+" can use to both find and install and publish your Python package. There "
+"is also a test PyPI repository where you can test publishing your package"
+" prior to the final publication on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:36
+msgid ""
+"Many if not most Python packages can be found on PyPI and are thus "
+"installable using `pip`."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:38
+msgid ""
+"The biggest different between using pip and conda to install a package is"
+" that conda can install any package regardless of the language(s) that it"
+" is written in. Whereas `pip` can only install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:43
+msgid "Click here for a tutorial on publishing your package to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:51
+msgid ""
+"On the package build page, we discussed the [two package distribution "
+"types that you will create when making a Python package](python-package-"
+"distribution-files-sdist-wheel): SDist (packaged as a .tar.gz or .zip) "
+"and Wheel (.whl) which is really a zip file. Both of those file "
+"\"bundles\" will be published on PyPI when you use [a standard build tool"
+"](python-package-build-tools) to build your package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:59
+msgid "What is conda and Anaconda.org?"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:61
+msgid ""
+"conda is an open source package and environment management tool. conda "
+"can be used to install tools from the [Anaconda "
+"repository](https://repo.anaconda.com/)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:65
+msgid ""
+"Anaconda.org contains public and private repositories for packages. These"
+" repositories are known as channels (discussed below)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:68
+msgid "A brief history of conda's evolution"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:71
+msgid ""
+"The conda ecosystem evolved years ago to provide support for, and "
+"simplify the process of, managing software dependencies in scientific "
+"Python projects."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:75
+msgid ""
+"Many of the core scientific Python projects depend upon or wrap around "
+"tools and extensions that are written in other languages, such as C++. In"
+" the early stages of the scientific ecosystem's development, these non-"
+"Python extensions and tools were not well supported on PyPI, making "
+"publication difficult. In recent years there is more support for complex "
+"builds that allow developers to bundle non-Python code into a Python "
+"distribution using the [wheel distribution format](python-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:77
+msgid ""
+"Conda provides a mechanism to manage these dependencies and ensure that "
+"the required packages are installed correctly."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:81
+msgid ""
+"While conda was originally created to support Python packages, it is now "
+"used across all languages. This cross-language support makes it easier "
+"for some packages to include and have access to tools written in other "
+"languages, such as C/C++ (gdal), Julia, or R. Creating an environment "
+"that mixes all of these packages is usually easier and more consistent "
+"with full-fledged package managers like conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:89
+msgid "conda channels"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:91
+msgid ""
+"conda built packages are housed within repositories that are called "
+"channels. The conda package manager can install packages from different "
+"channels."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:94
+msgid ""
+"There are several core public channels that most people use to install "
+"packages using conda, including:"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:97
+msgid ""
+"**defaults:** this is a channel managed by Anaconda. It is the version of"
+" the Python packages that you will install if you install the Anaconda "
+"Distribution. Anaconda (the company) decides what packages live on the "
+"`defaults` channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:98
+msgid ""
+"[**conda-forge:**](https://conda-forge.org/) this is a community-driven "
+"channel that focuses on scientific packages. This channel is ideal for "
+"tools that support geospatial data. Anyone can publish a package to this "
+"channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:99
+msgid ""
+"[**bioconda**](https://bioconda.github.io/): this channel focuses on "
+"biomedical tools."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:101
+msgid ""
+"**conda-forge** emerged as many of the scientific packages did not exist "
+"in the `defaults` Anaconda channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:106
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"Anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI. And test PyPI. A "
+"testbed server for you to practice."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:108
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:111
+msgid "conda channels, PyPI, conda, pip - Where to publish your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:113
+msgid ""
+"You might be wondering why there are different package repositories that "
+"can be used to install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:116
+msgid ""
+"And more importantly you are likely wondering how to pick the right "
+"repository to publish your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:119
+msgid "The answer to both questions relates dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:123
+msgid ""
+"Image showing an XKCD comic that shows a web of Python environments and "
+"tools and installations. At the bottom is says - My python environment "
+"has become so degraded that my laptop has been declared a superfund site."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:125
+msgid ""
+"Installing Python and Python packages from different repositories can "
+"lead to environment conflicts where a version of on package doesn't work "
+"with a version of another package. To keep your environments clean and "
+"working, it's best to install packages from the same repository. So use "
+"pip to install everything. Or use conda. If you can, try to avoid "
+"installing package from both pip and conda into the same environment."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:133
+msgid "Managing Python package dependency conflicts"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:135
+msgid ""
+"Python environments can encounter conflicts because Python tools can be "
+"installed from different repositories. Broadly speaking, Python "
+"environments have a smaller chance of dependency conflicts when the tools"
+" are installed from the same package repository. Thus environments that "
+"contain packages installed from both pip and conda are more likely to "
+"yield dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:142
+msgid ""
+"Similarly installing packages from the default anaconda channel mixed "
+"with the conda-forge channel can also lead to dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:144
+msgid ""
+"Many install packages directly from conda `defaults` channel. However, "
+"because this channel is managed by Anaconda, the packages available on it"
+" are limited to those that Anaconda decides should be core to a stable "
+"installation. The conda-forge channel was created to complement the "
+"`defaults` channel. It allows anyone to submit a package to be published "
+"in the channel . Thus, `conda-forge` channel ensures that a broad suite "
+"of user-developed community packages can be installed from conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:148
+msgid ""
+"Take-aways: If you can, publish on both PyPI and conda-forge to "
+"accommodate more users of your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:150
+msgid ""
+"The take-away here for maintainers is that if you anticipate users "
+"wanting to use conda to manage their local environments (which many do), "
+"you should consider publishing to both PyPI and the conda-forge channel "
+"(_more on that below_)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:155
+msgid "Additional resources"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:157
+msgid ""
+"[learn more about why conda-forge was created, here](https://conda-"
+"forge.org/docs/user/introduction.html)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:159
+msgid ""
+"[To learn more about conda terminology, check out their "
+"glossary.](https://docs.conda.io/projects/conda/en/latest/glossary.html )"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:165
+msgid "How to submit to conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:167
+msgid ""
+"While pyOpenSci doesn't require you to add your package to conda-forge, "
+"we encourage you to consider doing so!"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:170
+msgid ""
+"Once your package is on PyPI, the process to add your package to conda-"
+"forge is straight forward to do. [You can follow the detailed steps "
+"provided by the conda-forge maintainer team.](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:174
+msgid "Click here for a tutorial on adding your package to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:181
+msgid "If you want a step by step tutorial, click here."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:183
+msgid ""
+"Once your package is added, you will have a feedstock repository on "
+"GitHub with your packages name"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:186
+msgid ""
+"[Here is an example conda-forge feedstock for the pyOpenSci approved "
+"package - movingpandas](https://github.com/conda-forge/movingpandas-"
+"feedstock)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:189
+msgid "Maintaining your conda-forge package repository"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:191
+msgid ""
+"Once your package is on the conda-forge channel, maintaining it is "
+"simple. Every time that you push a new version of your package to PyPI, "
+"it will kick off a continuous integration build that updates your package"
+" in the conda-forge repository. Once that build is complete, you will get"
+" a notification to review the update."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:197
+msgid ""
+"You can merge the pull request for that update once you are happy with "
+"it. A ready-to-merge PR usually means ensuring that your project's "
+"dependencies (known as runtime requirements) listed in the updated YAML "
+"file found in the pull request match the PyPI metadata of the new "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:2
+msgid "Use a pyproject.toml file for your package configuration & metadata"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:4
+msgid "pyproject.toml takeaways"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:6
+msgid ""
+"There are only two tables that are required for an installable Python "
+"package: **[build-system]** and **[project]**. The **[project]** table "
+"stores your package's metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:7
+msgid ""
+"There are two _required_ fields in the **[project]** table: **name=** and"
+" **version=**."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:8
+msgid ""
+"Add metadata to the classifiers section of your `pyproject.toml` file to "
+"make it easier for users to find your project on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:9
+msgid ""
+"When you are adding classifiers to the [project] table, only use valid "
+"values from [PyPI’s classifier page](https://PyPI.org/classifiers/). An "
+"invalid value here will raise an error when you build your package or "
+"publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:10
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However fields need to be placed within the correct table sections. For "
+"example `requires =` always need to be associated with the **[build-"
+"system]** table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:16
+msgid "when these are published, remove this todo"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:25
+msgid ""
+"Need help creating your pyproject.toml file? This tutorial will walk you"
+" through the process."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:39
+msgid ""
+"Click here if need help migrating from setup.py/setup.cfg to "
+"pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:50
+msgid "About the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:52
+msgid ""
+"Every modern Python package should include a `pyproject.toml` file. For "
+"pure Python packages, this file replaces the `setup.py` and/or "
+"`setup.cfg` file to describe project metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:54
+msgid ""
+"If your project isn’t pure Python, you might still require a `setup.py` "
+"file to build the non-Python extensions. However, a `pyproject.toml` file"
+" should still be used to store your project’s metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:56
+msgid "Tutorial"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:59
+msgid ""
+"If you are migrating from a **setup.py** or **setup.cfg** file, and want "
+"help, [check out this tutorial.](migrate-pyproj) [specify build "
+"requirements and metadata is called a "
+"**pyproject.toml**](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:64
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:66
+msgid ""
+"The **pyproject.toml** file is written in [TOML (Tom's Obvious, Minimal "
+"Language) format](https://toml.io/en/). TOML is an easy-to-read structure"
+" based on key/value pairs. Each section in the **pyproject.toml** file "
+"contains a `[table identifier]`. Below that table identifier are "
+"key/value pairs that support configuration for that particular table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:70
+msgid "Below `[build-system]` is considered a table in the toml language."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:71
+msgid "Within the `build-system` table, `requires =` is a key."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:72
+msgid ""
+"The associated value for `requires` is an array containing the value "
+"`\"hatchling\"`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:80
+msgid "How the pyproject.toml is used when you build a package"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:84
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let’s have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:86
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:82
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:91
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:87
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:96
+msgid "Benefits of using a pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:98
+msgid ""
+"Including your package's metadata in a separate human-readable "
+"**pyproject.toml** format also allows someone to view the project's "
+"metadata in a GitHub repository."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:101
+msgid "Setup.py is still useful for complex package builds"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:105
+msgid ""
+"Using **setup.py** to manage package builds and metadata [can cause "
+"problems with package "
+"development](https://blog.ganssle.io/articles/2021/10/setup-py-"
+"deprecated.html). In some cases where a Python package build is complex, "
+"a **setup.py** file may be required. While this guide will not cover "
+"complex builds, we will provide resources working with complex builds in "
+"the future."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:111
+msgid "Optional vs. required pyproject.toml file fields"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:113
+msgid ""
+"When you create your `pyproject.toml` file, there are numerous metadata "
+"fields that you can use. Below we suggest specific fields to get you "
+"started that support publication on PyPI and users finding your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:115
+msgid ""
+"[An overview of all of the project metadata elements can be found "
+"here.](https://packaging.python.org/en/latest/specifications/core-"
+"metadata/#project-url-multiple-use)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:117
+msgid "Required fields for the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:119
+msgid ""
+"As mentioned above, your `pyproject.toml` file needs to have a **`name`**"
+" and **`version`** field in order to properly build your package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:121
+msgid "`name`: This is the name of your project provided as a string"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:122
+msgid ""
+"`version`: This is the version of your project. If you are using a SCM "
+"tool for versioning (using git tags to determine versions), then the "
+"version may be dynamic (more on that below)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:124
+msgid "Optional fields to include in the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:126
+msgid ""
+"We strongly suggest that you also add the metadata keys below as they "
+"will help users finding your package on PyPI. These fields will make it "
+"clear how your package is structured, what platforms you support and what"
+" dependencies your package requires."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:131
+msgid "**Description:** this is a short one-line description of your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:132
+msgid ""
+"**Readme:** A link to your README.md file is used for the long long-"
+"description. This information will be published on your packages PyPI "
+"landing page."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:133
+msgid ""
+"**Requires-python** (used by pip): this is a field that is used by pip. "
+"Here you tell the installer whether you are using Python 2.x or 3.x. Most"
+" projects will be using 3.x."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:134
+msgid "**License:** the license you are using"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:135
+msgid ""
+"**Authors:** these are the original authors of the package. Sometimes the"
+" authors are different from the maintainers. Other times they might be "
+"the same."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:136
+msgid ""
+"**Maintainers:** you can choose to populate this or not. You can populate"
+" this using a list with a sub element for each author or maintainer name,"
+" email"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:144
+msgid ""
+"**project.dependencies:** The dependency group is optional because not "
+"all packages require dependencies. However, if your project has specific "
+"dependencies, include this section in your `pyproject.toml`. Dependencies"
+" declared in the pyproject.toml file will be installed by uv or pip when "
+"your project is installed."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:146
+msgid ""
+"**project.optional-dependencies:** Optional or feature dependencies will "
+"be installed if someone runs `python -m pip install "
+"projectname[feature]`. Use this array to declare dependencies that add "
+"specific features to your package that are not installed by default when "
+"a user runs `uv sync` or `python -m pip install packagename`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:147
+msgid ""
+"**dependency-groups:** Dependency groups organize packages and tools that"
+" a contributor or developer would need to work on your package. These "
+"dependencies may include tools for building and running tests, linters, "
+"and code formatters. This is an optional but highly suggested way to "
+"organize and install dependencies. This section can replace a "
+"requirements.txt file. [Learn more about adding these to your package in "
+"the PyPA guide "
+"here.](https://packaging.python.org/en/latest/specifications/dependency-"
+"groups/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:148
+msgid ""
+"**keywords:** These are the keywords that will appear on your PyPI "
+"landing page. Think of them as words that people might use to search for "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:149
+msgid ""
+"**classifiers:** The classifiers section of your metadata is also "
+"important for the landing page of your package in PyPI and for filtering "
+"of packages in PyPI. A list of [all options for classifiers can be found "
+"here](https://PyPI.org/classifiers/). Some of the classifiers that you "
+"should consider including"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:150
+msgid "Development Status"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:151
+msgid "Intended Audience"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:152
+msgid "Topic"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:153
+msgid "Programming language"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:155
+msgid "Advanced options in the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:157
+msgid ""
+"**`[project.scripts]` (Entry points):** Entry points are optional. If you"
+" have a command line tool that runs a specific script hosted in your "
+"package, you may include an entry point to call that script directly at "
+"the command line (rather than at the Python shell)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:159
+msgid ""
+"Here is an example of[a package that has entry point "
+"script](https://github.com/pyOpenSci/pyosMeta/blob/main/pyproject.toml#L60)s."
+" Notice that there are several core scripts defined in that package that "
+"perform sets of tasks. The pyOpenSci is using those scripts to process "
+"their metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:160
+msgid ""
+"Use **Dynamic Fields** If you have fields that are dynamically populated."
+" For example, you may wish to automatically update your package's version"
+" using Git tags (SCM/version control-based versioning). Example: "
+"**dynamic = [\"version\"]**"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:162
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Add dependencies to your pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:164
+msgid ""
+"The `pyproject.toml` file is a modern replacement for the "
+"`requirements.txt` file, which has been traditionally used to store "
+"development dependencies and also configuration for tools such as pytest,"
+" black, and others."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:166
+msgid ""
+"To add development dependencies to your build, add a `[dependency-"
+"groups]` array to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:168
+msgid "Then specify dependency groups as follows:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:176
+msgid "Following the above example, you install dependencies like this:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:178
+msgid "`python -m pip install -e .[tests]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:180
+msgid "pip install --group test _# requires pip 25.1 or greater_"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:182
+msgid ""
+"The above will install both your package in editable mode and all of the "
+"dependencies declared in the tests section of your `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:184
+msgid "To install all dependencies and also your package, you'd use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:186
+msgid "`python -m pip install -e .[tests,lint,docs]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:188
+msgid "Recursive dependencies"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:192
+msgid ""
+"You can also setup sets of recursive dependencies. [See this blog post "
+"for more.](https://hynek.me/articles/python-recursive-optional-"
+"dependencies/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:195
+msgid "Example pyproject.toml for building using hatchling"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:197
+msgid ""
+"Below is an example build configuration for a Python project. This "
+"example package setup uses **hatchling** to build the [package's sdist "
+"and wheels](python-package-distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:205
+msgid "Notice that dependencies are specified in this file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:207
+msgid "Example pyproject.toml for building using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:209
+msgid ""
+"The package metadata including authors, keywords, etc is also easy to "
+"read. Below you can see the same TOML file that uses a different build "
+"system (setuptools). Notice how simple it is to swap out the tools needed"
+" to build this package!"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:213
+msgid "In this example package setup you use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:215
+msgid ""
+"**setuptools** to build the [package's sdist and wheels](python-package-"
+"distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:216
+msgid ""
+"**setuptools_scm** to manage package version updates using version "
+"control tags"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:218
+msgid ""
+"In the example below `[build-system]` is the first table of values. It "
+"has two keys that specify the build backend API and containing package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:221
+msgid "`requires =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:222
+msgid "`build-back-end =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:229
+msgid ""
+"[Click here to read about our packaging build tools including PDM, "
+"setuptools, Poetry and Hatch.](/package-structure-code/python-package-"
+"build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:1
+msgid "Python Packaging Tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:4
+msgid "Tools for building your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:6
+msgid ""
+"There are a several different build tools that you can use to [create "
+"your Python package's _sdist_ and _wheel_ distributions](python-package-"
+"distribution-files-sdist-wheel). Below, we discuss the features, benefits"
+" and limitations of the most commonly used Python packaging tools. We "
+"focus on pure-python packages in this guide. However, we also highlight "
+"tools that currently support packages with C/C++ and other language "
+"extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:14
+msgid ""
+"Decision tree diagram showing the various front and back end packaging "
+"tools. You can decide what packaging tool to use by thinking about what "
+"features you need. PDM and Hatch are currently the most flexible tools "
+"as they also using different build back-ends. As such currently PDM and "
+"Hatch are the tools we think beginners might appreciate most with Poetry "
+"being a close second. Poetry is nice for pure Python projects."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:16
+msgid ""
+"Diagram showing the different front end build tools available to use in "
+"the Python package ecosystem that you can select from. We selected tools "
+"to include in this diagram based upon the PyPI survey which helped us "
+"understand the most populate tools in the ecosystem. Each tool has "
+"different features as highlighted below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:19
+msgid ""
+"If you want to know more about Python packages that have extensions "
+"written in other languages, [check out the page on complex package builds"
+".](complex-python-package-builds)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:22
+msgid "Tools that we review here"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:24
+msgid ""
+"In this section we have selected tools that were returned as the most "
+"popular packaging tools in the PyPA survey. You will learn more about the"
+" following tools on this page:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:28
+msgid ""
+"[Twine](https://twine.readthedocs.io/en/stable/), [Build](https://pypa-"
+"build.readthedocs.io/en/stable/) + "
+"[setuptools](https://setuptools.pypa.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:29
+msgid "[Flit](https://flit.pypa.io/en/stable/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:30
+msgid "[Hatch](https://hatch.pypa.io/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:31
+msgid "[PDM](https://pdm-project.org/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:32
+msgid "[Poetry](https://python-poetry.org/docs/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:35
+msgid "Summary of tools Hatch vs. PDM vs. Poetry (and setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:37
+msgid "If you are looking for a quick summary, read below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:39
+msgid ""
+"In general, any modern tool that you select from this page will be great "
+"to build your package. Selecting a tool comes down to the features that "
+"you are looking for in your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:40
+msgid ""
+"We suggest that beginners start with a modern workflow tool like PDM as "
+"opposed to navigating the complexities of setuptools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:41
+msgid ""
+"If you are going to use Poetry (it is the most popular tool and does have"
+" the best documentation) beware of the upper bounds dependency additions "
+"and consider overriding dependencies when you add them. If you do that "
+"Poetry will work well for pure-python builds! Poetry also has an active "
+"discord where you can ask questions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:43
+msgid "Below are some features that Hatch and PDM offer that Poetry does not."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:45
+msgid "PDM:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:47
+msgid ""
+"Supports other back-ends making it ideal for builds that are not pure "
+"Python. This means PDM is a great option for both pure python and more "
+"complex Python builds as it supports meson-python and other build "
+"backends."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:48
+msgid "Offers flexibility in dependency management which we like"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:49
+msgid "Offers lock files if you need them"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:51
+msgid "Hatch:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:53
+msgid ""
+"Offers matrix environment management that allows you to run tests across "
+"Python versions. If this feature is important to you, then Hatch is a "
+"clear winner."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:54
+msgid ""
+"Offers a Nox / Make file like tool to streamline your build workflow. If "
+"you are looking to reduce the number of tools in your workflow, Hatch "
+"might be for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:57
+msgid "Build front-end vs. build back-end tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:59
+msgid ""
+"To better understand your options, when it comes to building a Python "
+"package, it's important to first understand the difference between a "
+"build tool front-end and build back-end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:64
+msgid "Build back-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:66
+msgid ""
+"Most packaging tools have a back-end build tool that builds you package "
+"and creates associated [(sdist and wheel) distribution files](python-"
+"package-distribution-files-sdist-wheel). Some tools, such as **Flit**, "
+"only support pure-Python package builds. A pure-Python build refers to a "
+"package build that does not have extensions that are written in another "
+"programming language (such as `C` or `C++`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:73
+msgid ""
+"Other packages that have C and C++ extensions (or that wrap other "
+"languages such as fortran) require additional code compilation steps when"
+" built. Back-ends such as **setuptools.build**, **meson.build** and "
+"**scikit-build** support complex builds with custom steps. If your build "
+"is particularly complex (i.e. you have more than a few `C`/`C++` "
+"extensions), then we suggest you use **meson.build** or **scikit-build**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:79
+msgid "Python package build front-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:81
+msgid ""
+"A packaging front-end tool refers to a tool that makes it easier for you "
+"to perform common packaging tasks using similar commands. These tasks "
+"include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:84
+msgid ""
+"[Build your packages (create the sdist and wheel distributions)](python-"
+"package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:85
+msgid ""
+"Installing your package in a development mode (so it updates when you "
+"update your code)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:86
+msgid "Publishing to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:87
+msgid "Running tests"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:88
+msgid "Building documentation"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:89
+msgid ""
+"Managing an environment or multiple environments in which you need to run"
+" tests and develop your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:91
+msgid ""
+"There are several Python packaging tools that you can use for pure Python"
+" builds. Each front-end tool discussed below supports a slightly "
+"different set of Python packaging tasks."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:95
+msgid ""
+"For instance, you can use the packaging tools **Flit**, **Hatch** or "
+"**PDM** to both build and publish your package to PyPI. However while "
+"**Hatch** and **PDM** support versioning and environment management, "
+"**Flit** does not. If you want a tool that supports dependency locking, "
+"you can use **PDM** or **Poetry** but not **Hatch**. If you only need to "
+"build your package's sdist and wheel distribution files, then you can "
+"stick with PyPA's Build. You'd then use Twine to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:102
+msgid ""
+"If you are using **Setuptools**, there is no default user-friendly build "
+"front-end that performs multiple tasks. You will need to use **build** to"
+" build your package and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:105
+msgid "Example build steps that can be simplified using a front-end tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:107
+msgid ""
+"Below, you can see how a build tool streamlines your packaging "
+"experience. Example to build your package with **Hatch**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:117
+msgid "Example build steps using the **setuptools** back-end and **build**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:127
+msgid "Choosing a build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:129
+msgid ""
+"Most front-end packaging tools have their own back-end build tool. The "
+"build tool creates your package's (sdist and wheel) distribution files. "
+"For pure Python packages, the main difference between the different build"
+" back-ends discussed below is:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:134
+msgid ""
+"How configurable they are - for example, do they allow you to add build "
+"steps that support non python extensions?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:135
+msgid ""
+"How much you need to configure them to ensure the correct files are "
+"included in your sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:137
+msgid "Build back-end support for non pure-python packages"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:139
+msgid ""
+"It is important to note that some build back-ends, such as **Flit-core**,"
+" only support pure Python builds. Other back-ends support C and C++ "
+"extensions as follows:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:142
+msgid "setuptools supports builds using C / C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:143
+msgid ""
+"Hatchling (hatch's back-end) supports C / C++ extensions via plugins that"
+" the developer creates to customize a build"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:144
+msgid "PDM's back-end supports C / C++ extensions by using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:145
+msgid ""
+"Poetry's back-end supports C/C++ extensions however this functionality is"
+" currently undocumented. As such we don't recommend using Poetry for "
+"complex or non pure Python builds until it is documented."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:147
+msgid ""
+"While we won't discuss more complex builds below, we will identify which "
+"tools have documented support for C / C++ extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:150
+msgid "An ecosystem of Python build tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:152
+msgid ""
+"Below we introduce several of the most commonly used Python packaging "
+"build front-end tools. We highlight the features that each tool offers as"
+" a way to help you decide what tool might be best for your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:156
+msgid "We do not suggest using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:159
+msgid ""
+"We suggest that you pick one of the modern tools listed above rather than"
+" setuptools because setuptools will require some additional knowledge to "
+"set up correctly."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:163
+msgid ""
+"We review setuptools as a back-end because it is still popular. However "
+"it is not the most user friendly option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:167
+msgid ""
+"The most commonly used tools in the ecosystem are setuptools back-end "
+"(with build) and Poetry (a front end tool with numerous features and "
+"excellent documentation)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:173
+msgid ""
+"Graph showing the results of the 2022 PyPA survey of Python packaging "
+"tools. On the x axis is percent response and on the y axis are the tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:175
+msgid ""
+"The Python developers survey results (n=>8,000 PyPI users) show "
+"setuptools and poetry as the most commonly used Python packaging tools. "
+"The core tools that we've seen being used in the scientific community are"
+" included here. [You can view the full survey results by clicking "
+"here.](https://drive.google.com/file/d/1U5d5SiXLVkzDpS0i1dJIA4Hu5Qg704T9/view)"
+" NOTE: this data represent maintainers across domains and is likely "
+"heavily represented by those in web development. So this represents a "
+"snapshot across the broader Python ecosystem."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:178
+msgid "Chose a build workflow tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:180
+msgid "The tools that we review below include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:182
+msgid "Twine, Build + setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:183
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:294
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:184
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:336
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:185
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:233
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:186
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:380
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:188
+msgid ""
+"When you are selecting a tool, you might consider this general workflow "
+"of questions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:191
+msgid ""
+"**Is your tool pure python? Yes?** You can use any tool that you wish! "
+"Pick the tool that has the features that you want to use in your build "
+"workflow. We suggest:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:193
+msgid "Flit, Hatch, PDM or Poetry (read below for more)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:195
+msgid ""
+"**Does your tool have a few C or C++ extensions?** Great, we suggest "
+"using **PDM** for the time being. It is the only tool in the list below "
+"that has both documented workflow to support such extensions and support "
+"for other back-ends in the case that build hooks are not enough for your "
+"workflow. PDM supports other back-ends such as scikit-build and meson-"
+"python that will allow you to fully customize your package's build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:199
+msgid ""
+"NOTE: You can also use Hatch for non pure python builds. Hatch, similar "
+"to PDM, allows you to write your own build hooks or plugins to support "
+"custom build steps. But currently, hatch does not support other build "
+"back ends. Many of the core scientific packages are moving to meson-"
+"python to build their packages. Thus, we appreciate that PDM can work "
+"with meson-python specifically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:201
+msgid "Python packaging tools summary"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:203
+msgid ""
+"Below, we summarize features offered by the most popular build front end "
+"tools. It is important to keep in mind that these front-end tools remove "
+"the need to use other core tools in your workflow. For example if you use"
+" setuptools, you will need to also use Build and Twine to build your "
+"package and publish to PyPI. But if you use Poetry, Hatch or PDM you can "
+"do all of those things using the same tool (e.g. `hatch build`, `hatch "
+"publish` or `pdm build`, `pdm publish`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:206
+msgid ""
+"Note that because setuptools does not offer a front-end interface, it is "
+"not included in the table."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:210
+msgid "Package tool features table"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Feature"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Default Build Back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Flit-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Poetry-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Use Other Build Backends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✖"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "✅"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Dependency management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Version Control based versioning (using `git tags`)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Environment Management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "More than one maintainer? (bus factor)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:227
+msgid "Notes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:229
+msgid "_Hatch plans to support dependency management in the future_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:230
+msgid ""
+"Poetry supports semantic versioning. Thus, it will support version "
+"bumping following commit messages if you use a tool such as Python "
+"Semantic Release"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:235
+msgid ""
+"[PDM is a Python packaging and dependency management tool](https://pdm-"
+"project.org/latest/). PDM supports builds for pure Python projects. It "
+"also provides multiple layers of support for projects that have C and C++"
+" extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:239
+msgid "PDM support for C and C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:241
+msgid ""
+"PDM supports using the PDM-back-end and setuptools at the same time. This"
+" means that you can run setuptools to compile and build C extensions. "
+"PDM's build back-end receives the compiled extension files (.so, .pyd) "
+"and packages them with the pure Python files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:247
+msgid "PDM features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Notes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you setup PDM it allows you to select one of several build back ends"
+" including: PDM-core, flit-core and hatchling. PDM also can work with "
+"Meson-Python which supports move complex python builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Dependency specifications"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has flexible support for managing dependencies. PDM defaults to "
+"using an open bound (e.g. `requests >=1.2`) approach to dependencies. "
+"However you can [customize how you want to add dependencies in case you "
+"prefer another approach such as that of Poetry which uses an upper bound "
+"limit](https://pdm-project.org/en/latest/usage/dependency/#about-update-"
+"strategy).**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Environment lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM and Poetry are currently the only tools that create environment lock "
+"files. Lock files are often most useful to developers creating web apps "
+"where locking the environment is critical for consistent user experience."
+" For community-used packages, you will likely never want to use a lock "
+"file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Environment management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM provides environment management support. It supports Python virtual "
+"environments, conda and a local `__pypackages__` environment which is a "
+"newer option in the Python ecosystem. No extensions are needed for this "
+"support."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Select your environment type on install"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you run `PDM init`, PDM will discover environments that are already "
+"on your system and allow you to select one to use for your project."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version Control based versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has a setuptools_scm like tool built into it which allows you to use "
+"dynamic versioning that rely on git tags."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Follows current packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Install your package in editable mode"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Build your sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"Similar to all of the other tools PDM builds your packages sdist and "
+"wheel files for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:267
+msgid "PDM vs. Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:268
+msgid ""
+"The functionality of PDM is similar to Poetry. However, PDM also offers "
+"additional, documented support for C extensions and version control based"
+" versioning. As such, PDM is preferred for those working on non pure-"
+"Python packages."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:272
+msgid ""
+"If you are deciding between the Poetry and PDM, a smaller difference is "
+"the default way that dependencies are added to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:274
+msgid ""
+"Poetry by default follows strict semantic versioning adding dependencies "
+"to your pyproject.toml file [using an upper bounds constraint "
+"(`^`)](https://python-poetry.org/docs/dependency-specification/#version-"
+"constraints). Upper bounds lock means that Poetry will never bump a "
+"dependency to the next major version (i.e. from 1.2 to 2.0). However, you"
+" can tell Poetry to use an open bound approach by explicitly adding the "
+"package like this: `poetry add requests >= 1.2` rather than just using "
+"`poetry add requests` which will result in a upper bound locked (ie Upper"
+" bound locks means that requests 2.0 could never be installed even if it "
+"came out and your package could benefit from it)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:275
+msgid ""
+"PDM defaults to open-bounds (`>=`) dependency additions which is the "
+"preferred approach in the scientific python ecosystem. However, PDM also "
+"allows you to specify the way dependencies are added by default. As such,"
+" you can also specify upper-bounds (`^`) using PDM if require that "
+"approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:277
+msgid ""
+"Finally there are some nuanced differences in how both tools create lock "
+"files which we will not go into detail about here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:280
+msgid "Challenges with PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:282
+msgid ""
+"PDM is a full-featured packaging tool. However it is not without "
+"challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:284
+msgid ""
+"Its documentation can be confusing, especially if you are new to "
+"packaging. For example, PDM doesn't provide an end to end beginning "
+"workflow in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:286
+msgid ""
+"PDM also only has one maintainer currently. We consider individual "
+"maintainer teams to be a potential risk. If the maintainer finds they no "
+"longer have time to work on the project, it leaves users with a gap in "
+"support. Hatch and Flit also have single maintainer teams."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:291
+msgid ""
+"[You can view an example of a package that uses PDM "
+"here](https://github.com/pyOpenSci/examplePy/tree/main/example4_pdm). The"
+" README file for this directly provides you with an overview of what the "
+"PDM command line interface looks like when you use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:296
+msgid ""
+"[Flit is a no-frills, streamlined packaging "
+"tool](https://flit.pypa.io/en/stable/) that supports modern Python "
+"packaging standards. Flit is a great choice if you are building a basic "
+"package to use in a local workflow that doesn't require any advanced "
+"features. And if your package structure is already created. More on that "
+"below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:300
+msgid "Flit features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Publish to PyPI and test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Helps you add metadata to your **pyproject.toml** file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit does support adding metadata to your **pyproject.toml** file "
+"following modern packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports installing your package in editable mode.**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit can be used to build your packages sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:314
+msgid ""
+"NOTE: _If you are using the most current version of pip, it supports both"
+" a symlink approach `flit install -s` and `python -m pip install -e .`_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:316
+msgid "Learn more about flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:318
+msgid "[Why use flit?](https://flit.pypa.io/en/stable/rationale.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:321
+msgid "Why you might not want to use Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:323
+msgid ""
+"Because Flit is no frills, it is best for basic, quick builds. If you are"
+" a beginner you may want to select Hatch or PDM which will offer you more"
+" support in common operations."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:327
+msgid "You may NOT want to use flit if:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:329
+msgid ""
+"You want to setup more advanced version tracking and management (using "
+"version control for version bumping)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:330
+msgid ""
+"You want a tool that handles dependency versions (use PDM or Poetry "
+"instead)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:331
+msgid "You have a project that is not pure Python (Use Hatch, PDM or setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:332
+msgid "You want environment management (use PDM, Hatch or Poetry)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:338
+msgid ""
+"[**Hatch**](https://hatch.pypa.io/latest/), similar to Poetry and PDM, "
+"provides a unified command line interface. To separate Hatch from Poetry "
+"and PDM, it also provides an environment manager for testing that will "
+"make it easier for you to run tests locally across different versions of "
+"Python. It also offers a nox / makefile like feature that allows you to "
+"create custom build workflows such as building your documentation "
+"locally. This means that you could potentially drop a tool like **Make** "
+"or **Nox** from your workflow and use Hatch instead."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:345
+msgid "Hatch features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch is used with the backend Hatchling by default, but allows you to "
+"use another backend by switching the declaration in pyproject.toml."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Currently you have to add dependencies manually with Hatch. However a "
+"feature to support dependencies management may be added in a future "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports Python virtual environments. If you wish to use other "
+"types of environments such as Conda, you will need to [install a plugin "
+"such as hatch-conda for conda support](https://github.com/OldGrumpyViking"
+"/hatch-conda)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch offers `hatch_vcs` which is a plugin that uses setuptools_scm to "
+"support versioning using git tags. The workflow with `hatch_vcs` is the "
+"same as that with `setuptools_scm`."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch will install your package into any of its environments by default "
+"in editable mode. You can install your package in editable mode manually "
+"using `python -m pip install -e .` Hatch mentions [editable "
+"installs](https://hatch.pypa.io/latest/config/build/#dev-mode) but refers"
+" to pip in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch will build the sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨Matrix environment creation to support testing across Python versions✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"The matrix environment creation is a feature that is unique to Hatch in "
+"the packaging ecosystem. This feature is useful if you wish to test your "
+"package locally across Python versions (instead of using a tool such as "
+"tox)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"✨[Nox / MAKEFILE like "
+"functionality](https://hatch.pypa.io/latest/environment/#selection)✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"This feature is also unique to Hatch. This functionality allows you to "
+"create workflows in the **pyproject.toml** configuration to do things "
+"like serve docs locally and clean your package build directory. This "
+"means you may have one less tool in your build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨A flexible build backend: **hatchling**✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"**The hatchling build backend offered by the maintainer of Hatch allows "
+"developers to easily build plugins to support custom build steps when "
+"packaging."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:367
+msgid ""
+"_There is some argument about this approach placing a burden on "
+"maintainers to create a custom build system. But others appreciate the "
+"flexibility. The Hatch build hook approach is also comparable with the "
+"features offered by PDM._"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:369
+msgid "Why you might not want to use Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:371
+msgid ""
+"There are a few features that hatch is missing that may be important for "
+"some. These include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:374
+msgid ""
+"Hatch doesn't support adding dependencies. You will have to add them "
+"manually."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:375
+msgid "Hatch won't by default recognize Conda environments without a plugin."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:376
+msgid ""
+"Similar to PDM, Hatch's documentation can difficult to work through, "
+"particularly if you are just getting started with creating a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:377
+msgid "Hatch, similar to PDM and Flit currently only has one maintainer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:382
+msgid ""
+"[Poetry is a full-featured build tool.](https://python-poetry.org/) It is"
+" also the second most popular front-end packaging tool (based upon the "
+"PyPA survey). Poetry is user-friendly and has clean and easy-to-read "
+"documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:387
+msgid ""
+"While some have used Poetry for Python builds with C/C++ extensions, this"
+" support is currently undocumented. Thus, we don't recommend using Poetry"
+" for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:391
+msgid "Poetry features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry helps you add dependencies to your `pyproject.toml` metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Dependency specification"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to be specific about version of dependencies that you "
+"add to your package's pyproject.toml file. However, it's default upper "
+"bound approach can be problematic for some packages (We suggest you "
+"override the default setting when adding dependencies). Read below for "
+"more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to either use its built in environment or you can "
+"select the environment type that you want to use for managing your "
+"package. [Read more about its built in environment management "
+"options](https://python-poetry.org/docs/basic-usage/#using-your-virtual-"
+"environment)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry creates a **poetry.lock** file that you can use if you need a lock"
+" file for your build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"The plugin [Poetry dynamic versioning](https://github.com/mtkennerly"
+"/poetry-dynamic-versioning) supports versioning using git tags with "
+"Poetry."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Since version 2.0, Poetry supports most current project metadata "
+"standards. However, not all standards are supported, and it also supports"
+" the legacy Poetry format. Read below for more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry will build your sdist and wheel distributions using `poetry build`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:413
+msgid "Challenges with Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:415
+msgid "Some challenges of Poetry include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:417
+msgid ""
+"Poetry has its own concept of grouped dependencies (`poetry add "
+"--group=GROUP_NAME DEPENDENCY`). Dependencies added as grouped "
+"dependencies are not optional and there is no Python standard for this "
+"type of dependency. This should not be confused with \"optional\" "
+"dependencies (`poetry add --optional=GROUP_NAME DEPENDENCY`), which is "
+"standardised and lets you group your dependencies into several optional "
+"groups."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:418
+msgid ""
+"While Poetry supports \"development\" dependencies (i.e. dependencies you"
+" use for development but not running the code, such as `pytest`), Poetry "
+"does not yet follow the standardised format for specifying such "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:419
+msgid ""
+"Poetry, by default, pins dependencies using an \"upper bound\" limit "
+"(which is specified with the `^` symbol in the legacy format). However, "
+"this behavior can be over-written by specifying the dependency when you "
+"use `poetry add` as follows: `poetry add \"requests>=2.1\"` See breakout "
+"below for more discussion on issues surrounding upper-bounds pinning."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:421
+msgid ""
+"Poetry is a popular packaging tool and introduced many very useful "
+"features. However, if you decide to use it, then use caution when adding "
+"dependencies as Poetry's approach to pinning can be problematic for many "
+"builds. If you use Poetry, we strongly suggest that you override the "
+"default upper bound dependency option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:426
+msgid "Challenges with Poetry dependency pinning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:429
+msgid ""
+"By default, Poetry pins dependencies using `^` by default. This `^` "
+"symbol means that there is an \"upper bound\" to the dependency. Thus "
+"poetry won't bump a dependency version to a new major version. Thus, if "
+"your package uses a dependency that is at version 1.2.3, Poetry will "
+"never bump the dependency to 2.0 even if there is a new major version of "
+"the package. Poetry will instead bump up to 1.9.x."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:435
+msgid ""
+"Poetry does this because it adheres to strict semantic versioning which "
+"states that a major version bump (from 1.0 to 2.0 for example) means "
+"there are breaking changes in the tool. However, not all tools follow "
+"strict semantic versioning. [This approach has been found to be "
+"problematic by many of our core scientific "
+"packages.](https://iscinumpy.dev/post/bound-version-constraints/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:440
+msgid ""
+"This approach also won't support others ways of versioning tools, for "
+"instance, some tools use [calver](https://calver.org/) which creates new "
+"versions based on the date."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:445
+msgid "Using Setuptools back-end for Python packaging with Build front-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:447
+msgid ""
+"[Setuptools](https://setuptools.pypa.io/en/latest/) is the most mature "
+"Python packaging build tool with [development dating back to 2009 and "
+"earlier](https://setuptools.pypa.io/en/latest/history.html#). Setuptools "
+"also has the largest number of community users (according to the PyPA "
+"survey). Setuptools does not offer a user front-end like Flit, Poetry and"
+" Hatch offer. As such you will need to use other tools such as **build** "
+"to create your package distributions and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:455
+msgid ""
+"While setuptools is the most commonly used tool, we encourage package "
+"maintainers to consider using a more modern tool for packaging such as "
+"Poetry, Hatch or PDM."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:458
+msgid ""
+"We discuss setuptools here because it's commonly found in the ecosystem "
+"and contributors may benefit from understanding it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:461
+msgid "Setuptools features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:463
+msgid "Some of features of setuptools include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:465
+msgid "Fully customizable build workflow"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:466
+msgid "Many scientific Python packages use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:467
+msgid ""
+"It offers version control based package versioning using "
+"**setuptools_scm**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:468
+msgid "It supports modern packaging using **pyproject.toml** for metadata"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:469
+msgid "Supports backwards compatibly for older packaging approaches."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:471
+msgid "Challenges using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:475
+msgid "Setuptools has a few challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:477
+msgid ""
+"Setuptools does not support interactive features such as auto / tab "
+"completion by default if you are working in an IDE like VSCODE and using "
+"an editable install for development. [See notes here about pylance "
+"support](https://github.com/microsoft/pylance-"
+"release/blob/main/TROUBLESHOOTING.md#editable-install-modules-not-found)."
+" In comparison, tools such as flit, hatch, PDM support interactive "
+"features such as tab / auto completion when using an IDE like VSCODE or "
+"pycharm (as long as your version of pip is current!)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:478
+msgid ""
+"Because **setuptools** has to maintain backwards compatibility across a "
+"range of packages, it is not as flexible in its adoption of modern Python"
+" packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:481
+msgid ""
+"The above-mentioned backwards compatibility makes for a more complex "
+"code-base."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:482
+msgid ""
+"Your experience as a user will be less streamlined and simple using "
+"setuptools compared to other tools discussed on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:484
+msgid ""
+"There are also some problematic default settings that users should be "
+"aware of when using setuptools. For instance:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:487
+msgid ""
+"setuptools will build a project without a name or version if you are not "
+"using a **pyproject.toml** file to store metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:489
+msgid ""
+"setuptools also will include all of the files in your package repository "
+"if you do not explicitly tell it to exclude files using a **MANIFEST.in**"
+" file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:1
+msgid "Learn about Building a Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:8
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires an source distribution on PyPI in order to "
+"build your package on conda-forge. You do not need to rebuild your "
+"package to publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:11
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"a conda channel). The build process organizes your code and metadata into"
+" a distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:14
+msgid "What is building a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:16
+msgid ""
+"To [publish your Python package](publish-python-package-pypi-conda) and "
+"make it easy for anyone to install, you first need to build it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:18
+msgid "But, what does it mean to build a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:20
+msgid ""
+"[As shown in the figure above](#pypi-conda-channels), when you build your"
+" Python package, you convert the source files into something called a "
+"distribution package. A distribution package contains your source code "
+"and metadata about the package, in the format required by the Python "
+"Package Index, so that it can be installed by tools like pip."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:23
+msgid ""
+"The term package used to mean many different things in Python and other "
+"languages. On this page, we adapt the convention of the [Python Packaging"
+" Authority](https://www.pypa.io/en/latest/) and refer to the product of "
+"the build step as a **distribution package**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:27
+msgid ""
+"This process of organizing and formatting your code, documentation, tests"
+" and metadata into a format that both pip and PyPI can use, is called a "
+"build step."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:31
+msgid "Project metadata and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:33
+msgid ""
+"The metadata that both build tools and PyPI uses to describe and "
+"understand your package is generally stored in a [pyproject.toml file"
+"](pyproject-toml-python-package-metadata). This metadata is used for "
+"several purposes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:35
+msgid ""
+"It helps whatever tool you use to build your package (pip, [pypa's "
+"Build](https://pypi.org/project/build/) or an end-to-end tool such as "
+"poetry, PDM or Hatch) understand how to build your package. Information "
+"it provides to your build tool includes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:37
+msgid ""
+"The `[build-system]` table in your pyproject.toml file tells pip what "
+"[build backend tool](build_backends) you wish to use for creating your "
+"sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:45
+msgid ""
+"And the dependencies section of your project table tells the build tool "
+"and PyPI what dependencies your project requires."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:54
+msgid ""
+"When the build tool creates your package distribution file (the file that"
+" you publish on PyPI), it also creates a METADATA file which PyPI can "
+"read and use to help users find your package. For example:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:56
+msgid ""
+"The `classifiers = ` section of your `[project]` table in the "
+"pyproject.toml file provides information that users on PyPI can use to "
+"filter for packages that address different topics or that support "
+"specific versions of python."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:72
+msgid "What happened to setup.py and setup.cfg for metadata?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:75
+msgid ""
+"Project metadata used to be stored in either a setup.py file or a "
+"setup.cfg file. The current recommended practice for storing package "
+"metadata is to use a pyproject.toml file. [Learn more about the "
+"pyproject.toml file here.](pyproject-toml-python-package-metadata)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:78
+msgid "An example - xclim"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:80
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let's have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:93
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:95
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:100
+msgid ""
+"This screenshot shows the metadata on PyPI for the xclim package. On it "
+"you can see the name of the license, the author and maintainer names "
+"keywords associated with the package and the base python version it "
+"requires which is 3.8."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:102
+msgid "PyPI screenshot showing metadata for the xclim package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:109
+msgid ""
+"Here you see the maintainer metadata as it is displayed on PyPI. For "
+"xclim there are three maintainers listed with their profile pictures and "
+"github user names to the right."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:111
+msgid ""
+"Maintainer names and GitHub usernames for the xclim package as they are "
+"displayed on PyPI. This information is recorded in your pyproject.toml "
+"and then processed by your build tool and stored in your packages sdist "
+"and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:114
+msgid "How to create the distribution format that PyPI and Pip expects?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:116
+msgid ""
+"You could in theory create your own scripts to organize your code the way"
+" PyPI wants it to be. However, just like there are packages that handle "
+"known structures such as Pandas for data frames and Numpy for arrays, "
+"there are packages and tools that help you create package build "
+"distribution files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:120
+msgid ""
+"There are a suite of packaging tools that can either help you with the "
+"entire packaging process or just one step of the process. For instance "
+"setuptools is a commonly used build back end that can be used to create "
+"your sdist and wheel. Whereas tools like Hatch, PDM, Poetry and flit help"
+" with other parts of the packaging process."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:126
+msgid ""
+"While this can cause some confusion and complexity in the packaging "
+"ecosystem - for the most part, each tool provides the same distribution "
+"output (with minor differences that most users may not care about). Learn"
+" more about those tools on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:132
+msgid ""
+"Below, you will learn about the two distribution files that PyPI expects "
+"you to publish: sdist and wheel. You will learn about their structure and"
+" what files belong in each."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:135
+msgid ""
+"There are two core distribution files that you need to create to publish "
+"your Python package to PyPI source distribution (often called an sdist) "
+"and wheel. The sdist contains the raw source code for your package. The "
+"wheel (.whl) contains the built / compiled files that can be directly "
+"installed onto anyones' computer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:141
+msgid "Learn more about both distributions below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:144
+msgid ""
+"If your package is a pure python package with no additional build / "
+"compilation steps then the sdist and wheel distributions will have "
+"similar content. However if your package has extensions in other "
+"languages or is more complex in its build, the two distributions will be "
+"very different."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:149
+msgid ""
+"Also note that we are not discussing conda build workflows in this "
+"section. [You can learn more about conda builds "
+"here.](https://docs.conda.io/projects/conda-build/en/latest/user-"
+"guide/tutorials/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:154
+msgid "What is a source distribution (sdist)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:156
+msgid ""
+"**Source files** are the unbuilt files needed to build your package. "
+"These are the \"raw / as-is\" files that you store on GitHub or whatever "
+"platform you use to manage your code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:160
+msgid ""
+"Source Distributions (**S** + **Dist**) are referred to as sdist. As the "
+"name implies, a SDIST contains the source code; it has not been built or "
+"compiled in any way. Thus, when a user installs your source distribution "
+"using pip, pip needs to run a build step first. For this reason, you "
+"could define a source distribution as a compressed archive that contains "
+"everything required to build a wheel (except for project dependencies) "
+"without network access."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:164
+msgid ""
+"Sdist is normally stored as a `.tar.gz` archive (often called a "
+"\"tarball\"). Thus, when a user installs your source distribution using "
+"pip, pip needs to run a build step first."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:166
+msgid "Below is an example sdist for the stravalib Python package:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:218
+msgid "GitHub archive vs sdist"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:220
+msgid ""
+"When you make a release on GitHub, it creates a `git archive` that "
+"contains all of the files in your GitHub repository. While these files "
+"are similar to an sdist, these two archives are not the same. The sdist "
+"contains a few other items including a metadata directory and if you use "
+"`setuptools_scm` or `hatch_vcs` the sdist may also contain a file that "
+"stores the version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:228
+msgid "What is a Python wheel (whl):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:230
+msgid ""
+"A wheel file is a ZIP-format archive whose filename follows a specific "
+"format (below) and has the extension `.whl`. The `.whl` archive contains "
+"a specific set of files, including metadata that are generated from your "
+"project's pyproject.toml file. The pyproject.toml and other files that "
+"may be included in source distributions are not included in wheels "
+"because it is a built distribution."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:237
+msgid ""
+"The wheel (.whl) is your built binary distribution. **Binary files** are "
+"the built / compiled source files. These files are ready to be installed."
+" A wheel (**.whl**) is a **zip** file containing all of the files needed "
+"to directly install your package. All of the files in a wheel are "
+"binaries - this means that code is already compiled / built. Wheels are "
+"thus faster to install - particularly if you have a package that requires"
+" build steps."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:239
+msgid ""
+"The wheel does not contain any of your package's configuration files such"
+" as **setup.cfg** or **pyproject.toml**. This distribution is already "
+"built so it's ready to install."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:243
+msgid ""
+"Because it is built, the wheel file will be faster to install for pure "
+"Python projects and can lead to consistent installs across machines."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:251
+msgid ""
+"Wheels are also useful in the case that a package needs a **setup.py** "
+"file to support a more complex build. In this case, because the files in "
+"the wheel bundle are pre built, the user installing doesn't have to worry"
+" about malicious code injections when it is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:258
+msgid "The filename of a wheel contains important metadata about your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:260
+msgid "Example: **stravalib-1.1.0.post2-py3-none.whl**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:262
+msgid "name: stravalib"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:263
+msgid "version: 1.1.0"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:264
+msgid ""
+"build-number: 2 (post2) [(read more about post "
+"here)](https://peps.python.org/pep-0440/#post-release-separators)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:265
+msgid "py3: supports Python 3.x"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:266
+msgid "none: is not operating system specific (runs on windows, mac, linux)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:267
+msgid "any: runs on any computer processor / architecture"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:269
+msgid "What a wheel file looks like when unpacked (unzipped):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:303
+msgid "[Read more about the wheel format here](https://pythonwheels.com/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:1
+msgid "Python Package Structure & Layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:3
+msgid ""
+"There are two different layouts that you will commonly see within the "
+"Python packaging ecosystem: src and flat layouts. Both layouts have "
+"advantages for different groups of maintainers."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:8
+msgid ""
+"We strongly suggest, but do not require, that you use the **src/** layout"
+" (discussed below) for creating your Python package. This layout is also "
+"recommended in the [PyPA packaging guide "
+"tutorial](https://packaging.python.org/en/latest/tutorials/packaging-"
+"projects/)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:12
+msgid "pyOpenSci will never require a specific package structure for peer review"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:15
+msgid ""
+"We understand that it would take significant effort for existing "
+"maintainers to move to a new layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:18
+msgid ""
+"The overview on this page presents recommendations that we think are best"
+" for someone getting started with Python packaging or someone who's "
+"package has a simple build and might be open to moving to a more fail-"
+"proof approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:22
+msgid "Other resources you can check out:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:24
+msgid ""
+"[PyPA's overview of src vs flat "
+"layouts](https://packaging.python.org/en/latest/discussions/src-layout-"
+"vs-flat-layout/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:27
+msgid ""
+"You can use tools like Hatch to quickly create a modern Python package "
+"structure. Check out our quickstart tutorial:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:29
+msgid ""
+"Want to learn how to create the structure to build your package? Click "
+"here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:38
+msgid "What is the Python package source layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:40
+msgid "An example of the **src/package** layout structure is below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:62
+msgid "Note the location of the following directories in the example above:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:64
+msgid ""
+"**docs/:** Discussed in our docs chapter, this directory contains your "
+"user-facing documentation website. In a **src/** layout docs/ are "
+"normally included at the same directory level as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:65
+msgid ""
+"**tests/** This directory contains the tests for your project code. In a "
+"**src/** layout, tests are normally included at the same directory level "
+"as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:66
+msgid ""
+"**src/package/**: this is the directory that contains the code for your "
+"Python project. \"Package\" is normally your project's name."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:68
+msgid ""
+"Also in the above example, notice that all of the core documentation "
+"files that pyOpenSci requires live in the root of your project directory."
+" These files include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:72
+msgid "CHANGELOG.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:73
+msgid "CODE_OF_CONDUCT.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:74
+msgid "CONTRIBUTING.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:75
+msgid "LICENSE.txt"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:76
+msgid "README.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:80
+msgid "Click here to read about our packaging documentation requirements."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:87
+msgid "Example scientific packages that use **src/package** layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:89
+msgid "[Sourmash](https://github.com/sourmash-bio/sourmash)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:90
+msgid "[bokeh](https://github.com/bokeh/bokeh)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:91
+msgid "[openscm](https://github.com/openscm/openscm-runner)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:92
+msgid "[awkward](https://github.com/scikit-hep/awkward)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:93
+msgid "[poliastro](https://github.com/poliastro/poliastro/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:98
+msgid "The src layout and testing"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:100
+msgid ""
+"The benefit of using the **src/package** layout is that it ensures tests "
+"are run against the installed version of your package rather than the "
+"files in your package working directory. If you run your tests on your "
+"files rather than the installed version of your package, you may be "
+"missing issues that users encounter when your package is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:106
+msgid ""
+"If `tests/` are outside the **src/package** directory, they aren't "
+"included in the package's [wheel](python-wheel). This makes your package "
+"size slightly smaller, which places a smaller storage burden on PyPI, and"
+" makes them faster to fetch."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:108
+msgid ""
+"[Read more about reasons to use the **src/package** "
+"layout](https://hynek.me/articles/testing-packaging/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:110
+msgid "How Python discovers and prioritizes importing modules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:112
+msgid ""
+"By default, Python adds a module in your current working directory to the"
+" front of the Python module search path."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:114
+msgid ""
+"This means that if you run your tests in your package's working "
+"directory, using a flat layout, `/package/module.py`, Python will "
+"discover `package/module.py` file before it discovers the installed "
+"package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:116
+msgid ""
+"However, if your package lives in a src/ directory structure "
+"**src/package**, then it won't be added to the Python path by default. "
+"This means that when you import your package, Python will be forced to "
+"search the active environment (which has your package installed)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:118
+msgid ""
+"Note: Python versions 3.11 and above have a path setting that can be "
+"adjusted to ensure the priority is to use installed packages first (e.g.,"
+" `PYTHONSAFEPATH`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:121
+msgid "Don't include tests in your package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:123
+msgid ""
+"Writing [tests](tests-intro) for your package is important; however, we "
+"do not recommend including tests as part of your [package wheel](python-"
+"wheel) by default. However, not including tests in your package "
+"distribution will make it harder for people other than yourself to test "
+"whether your package runs properly on their system. If you have a small "
+"test suite (Python files + data), and think your users may want to run "
+"tests locally on their systems, you can include tests by moving the "
+"`tests/` directory into the **src/package** directory (see example "
+"below)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:132
+msgid ""
+"Including the **tests/** directory in your **src/package** directory "
+"ensures that tests will be included in your package's [wheel](python-"
+"wheel)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:134
+msgid ""
+"Be sure to read the [pytest documentation for more about including tests "
+"in your package "
+"distribution](https://docs.pytest.org/en/7.2.x/explanation/goodpractices.html#choosing-a"
+"-test-layout-import-rules)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:136
+msgid "Challenges with including tests and data in a package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:139
+msgid ""
+"Tests, especially when accompanied by test data, can create a few small "
+"challenges, including:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:141
+msgid ""
+"Take up space in your distribution, which will build up over time as "
+"storage space on PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:142
+msgid "Large file sizes can also slow down package installation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:144
+msgid ""
+"However, in some cases, particularly in the scientific Python ecosystem, "
+"you may need to include tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:147
+msgid "**Don't include test suite datasets in your package**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:149
+msgid ""
+"If you include your tests in your package distribution, we strongly "
+"discourage you from including data in your test suite directory. Rather, "
+"host your test data in a repository such as Figshare or Zenodo. Use a "
+"tool such as [Pooch](https://www.fatiando.org/pooch/latest/) to access "
+"the data when you (or a user) runs tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:155
+msgid ""
+"For more information about Python package tests, see the [tests section "
+"of our guide](tests-intro)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:157
+msgid ""
+"The **src/package** layout is semantically more clear. Code is always "
+"found in the **src/package** directory, `tests/` and `docs/`are in the "
+"root directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:161
+msgid ""
+"If your package tests require data, do NOT include that data within your "
+"package structure. Including data in your package structure increases the"
+" size of your distribution files. This places a maintenance toll on "
+"repositories like PyPI and Anaconda.org that have to deal with thousands "
+"of package uploads."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:167
+msgid "Click here for a quickstart tutorial on creating your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:176
+msgid "What is the flat Python package layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:178
+msgid "Many scientific packages use the **flat-layout** given:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:180
+msgid ""
+"This layout is used by many core scientific Python packages such as "
+"NumPy, SciPy, and Matplotlib."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:181
+msgid ""
+"Many Python tools depend upon tools in other languages and/or complex "
+"builds with compilation steps. Many maintainers prefer features of the "
+"flat layout for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:185
+msgid ""
+"While we suggest that you use the **src/package** layout discussed above,"
+" it's important to also understand the flat layout, especially if you "
+"plan to contribute to a package that uses this layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:188
+msgid "Why most scientific Python packages do not use src/ layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:191
+msgid ""
+"Migrating larger scientific packages that already use a flat layout would"
+" consume significant time and resources."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:193
+msgid ""
+"However, the advantages of using the **src/package** layout for a "
+"beginner are significant. As such, we recommend that you use the "
+"**src/package** layout if you are creating a new package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:196
+msgid ""
+"Numerous packages in the ecosystem [have had to move to a **src/package**"
+" layout](https://github.com/scikit-build/cmake-python-"
+"distributions/pull/145)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:200
+msgid "What does the flat layout structure look like?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:202
+msgid "The flat layout's primary characteristics are:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:204
+msgid ""
+"The source code for your package lives in a directory with your package's"
+" name in the root of your directory"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:206
+msgid ""
+"Often the `tests/` directory also lives within that same `package` "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:208
+msgid ""
+"Below you can see the recommended structure of a scientific Python "
+"package using the flat layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:230
+msgid "Benefits of using the flat layout in your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:232
+msgid ""
+"There are some benefits to the scientific community in using the flat "
+"layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:234
+msgid ""
+"This structure has historically been used across the ecosystem and "
+"packages using it are unlikely to change."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:236
+msgid ""
+"You can import the package directly from the root directory. For some "
+"this is engrained in their respective workflows. However, for a beginner "
+"the danger of doing this is that you are not developing and testing "
+"against the installed version of your package. Rather, you are working "
+"directly with the flat files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:242
+msgid "Core scientific Python packages that use the flat layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:245
+msgid "[numpy](https://github.com/numpy/numpy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:246
+msgid "[scipy](https://github.com/scipy/scipy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:247
+msgid "[pandas](https://github.com/pandas-dev/pandas)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:248
+msgid "[xarray](https://github.com/pydata/xarray)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:249
+msgid "[Jupyter-core](https://github.com/jupyter/jupyter_core)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:250
+msgid "[Jupyter notebook](https://github.com/jupyter/notebook)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:251
+msgid "[scikit-learn](https://github.com/scikit-learn/scikit-learn)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:253
+msgid ""
+"It would be a significant maintenance cost and burden to move all of "
+"these packages to a different layout. The potential benefits of the "
+"source layout for these tools are not worth the maintenance investment."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:258
+msgid "Multiple packages in a src/ folder"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:261
+msgid ""
+"In some more advanced cases, you may have more than one package in your "
+"**src/** directory. See [Black's GitHub "
+"repo](https://github.com/psf/black/tree/main/src) for an example of this."
+" However, for most beginners you will likely only have one sub-directory "
+"in your **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:1
+msgid "Creating New Versions of Your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:6
+msgid "Key Takeways"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:8
+msgid ""
+"Follow [semantic versioning guidelines (SemVer) "
+"rules](https://semver.org/) when bumping (increasing) your Python's "
+"package version; for example a major version bump (version 1.0 --> 2.0) "
+"equates to breaking changes in your package's code for a user."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:9
+msgid ""
+"You may want to consider using a plugin like hatch_vsc for managing "
+"versions of your package - if you want to have a GitHub only release "
+"workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:10
+msgid ""
+"Otherwise most major package build tools such as Hatch, Flit and PDM have"
+" a version feature that will help you update your package's version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:11
+msgid "Avoid updating your packages version number manually by hand in your code!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:14
+msgid ""
+"pyOpenSci recommends that you follow the [Python PEP "
+"440](https://peps.python.org/pep-0440) which recommends using [semantic "
+"versioning guidelines](https://www.python.org/dev/peps/pep-0440"
+"/#semantic-versioning) when assigning release values to new versions of "
+"your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:18
+msgid ""
+"[Semantic versioning](https://semver.org/) is an approach to updating "
+"package versions that considers the type and extent of a change that you "
+"are making to the package code. Being consistent with how and when you "
+"update your package versions is important as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:23
+msgid ""
+"It helps your users (which might include other developers that depend on "
+"your package) understand the extent of changes to a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:24
+msgid ""
+"It helps your development team make decisions about when to bump a "
+"package version based on standard rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:26
+msgid ""
+"Consistent version increases following semver rules mean that values of "
+"your package version explain the extent of the changes made in the code "
+"base from version to version. Thus your package version numbers become "
+"\"expressive\" in the same way that naming code variables well can [make "
+"code expressive](https://medium.com/@daniel.oliver.king/writing-"
+"expressive-code-b69ef7a5a2fa)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:28
+msgid "A note about versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:29
+msgid ""
+"In some cases even small version changes can turn a package update into a"
+" breaking change for some users. What is also important is that you "
+"document how you version your code and if you can, also document your "
+"deprecation policy for code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:38
+msgid "SemVer rules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:40
+msgid "Following SemVer, your bump your package version to a:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:42
+msgid "patch (1.1.1 --> 1.1.**2**)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:43
+msgid "minor (1.1.1 --> 1.**2**.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:44
+msgid "major (1.1.1 --> **2**.1.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:46
+msgid "version number change based on the following rules:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:48
+msgid "Given a version number MAJOR.MINOR.PATCH, increment the:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:50
+msgid "**MAJOR version** when you make incompatible API changes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:51
+msgid ""
+"**MINOR version** when you add functionality in a backwards compatible "
+"manner"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:52
+msgid ""
+"**PATCH version** when you make backwards compatible bug fixes Additional"
+" labels for pre-release and build metadata are available as extensions to"
+" the MAJOR.MINOR.PATCH format."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:57
+msgid ""
+"Some people prefer to use [calver](https://calver.org/index.html) for "
+"versioning. It may be a simpler-to-use system given it relies upon date "
+"values associated with released versions. However, calver does not "
+"provide a user with a sense of when a new version might break an existing"
+" build. As such we still suggest semver."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:60
+msgid ""
+"pyOpenSci will never require semver in a peer review as long as a package"
+" has a reasonable approach to versioning!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:64
+msgid "Avoid manually updating Python package version numbers if you can"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:66
+msgid ""
+"Often times you may want to have your package version value in multiple "
+"locations. One example of this is that it might be both an attribute in "
+"your package **version** and also called in your documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:71
+msgid ""
+"We recommend that you avoid manual updates of your package version number"
+" to avoid human-error. It is better practice to keep your version number "
+"in one location."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:75
+msgid ""
+"If you can't implement a single location version, then consider using a "
+"tool like hatch, PDM or bump2version that will update the version values "
+"for you - throughout your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:79
+msgid ""
+"Below we discuss some tools that you can use to manage updating Python "
+"package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:85
+msgid "Tools to manage versions for your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:87
+msgid ""
+"There are a handful of tools that are widely used in the scientific "
+"ecosystem that you can use to manage your package versions. Some of these"
+" tools are built into or work with your chosen [packaging build tools "
+"that discussed in this chapter.](python-package-build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:93
+msgid "Below, we provide an overview of these tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:99
+msgid ""
+"There are three general groups of tools that you can use to manage "
+"package versions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:102
+msgid ""
+"**semantic release tools:** These tools will automagically determine what"
+" type of version bump to use using the text in your commit messages. "
+"Below we discuss [Python Semantic Release](https://python-semantic-"
+"release.readthedocs.io/en/latest/) as a Python tool that implements a "
+"semantic versioning approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:104
+msgid ""
+"**Manual incremental bump tools:** Tools like "
+"[Hatch](https://hatch.pypa.io/latest/version/) offer version bumping "
+"within your package. Normally this is implemented at the command link for"
+" instance `hatch version major` would bump your project from 0.x to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:105
+msgid ""
+"**Version Control System tools:** Finally there are tools that rely on "
+"your version control system to track versions. These tools often are "
+"plugins to your package build tool (ex: setuptools build or hatchling). "
+"We discuss this option below assuming that you are using **.git tags** "
+"and **GitHub** to manage your package repository."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:107
+msgid "Semantic release, vs version control based vs manual version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:109
+msgid ""
+"Generally semantic release and version control system tools can be setup "
+"to run automatically on GitHub using GitHub Actions. This means that you "
+"can create a workflow where a GitHub release and associated new version "
+"tag is used to trigger an automated build that:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:115
+msgid "Builds your package and updates the version following the new tag"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:116
+msgid "Tests the build and publishes to test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:117
+msgid "Publishes the package to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:120
+msgid ""
+"Bumping a package version refers to the step of increasing the package "
+"version after a set number of changes have been made to it. For example, "
+"you might bump from version 0.8 to 0.9 of a package or from 0.9 to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:124
+msgid ""
+"Using semantic versioning, there are three main \"levels\" of versions "
+"that you might consider:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:127
+msgid "Major, minor and patch. These are described in more detail below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:130
+msgid "Tools for bumping Python package versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:132
+msgid ""
+"In this section we discuss the following tools for managing your Python "
+"package's version:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:135
+msgid "hatch &"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:136
+msgid "hatch_vcs plugin for hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:137
+msgid "setuptools-scm"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:138
+msgid "python-semantic-version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:140
+msgid "Tool 1: Hatch and other build tools that offer incremental versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:142
+msgid ""
+"Many of the modern build tool front end tools offer version support that "
+"follow semantic versioning rules. These tools are different from Python "
+"Semantic Version in that they do not require specific commit messages to "
+"implement version. Rather, they allow you to update the version at the "
+"command line using commands such as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:148
+msgid "`tool-name version update major`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:149
+msgid "`tool-name version update minor`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:151
+msgid ""
+"[Hatch](https://hatch.pypa.io/latest/version/), for instance offers "
+"`hatch version minor` which will modify the version of your package "
+"incrementally. With **Hatch** the version value will be found in your "
+"`pyproject.toml` file. "
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:154
+msgid "Hatch (or other tools like PDM) pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:156
+msgid "Easy to use version updates locally using a single tool!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:158
+msgid "Hatch (or other tools like PDM) cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:160
+msgid ""
+"There will be some setup involved to ensure package version is updated "
+"throughout your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:162
+msgid "Tool 2: Hatch_vcs & hatchling build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:164
+msgid ""
+"[hatch_vcs](https://github.com/ofek/hatch-vcs) is a versioning tool that "
+"allows you to manage package versions using **git tags**. Hatch_vcs "
+"creates a **\\_version.py** file in your package ecosystem that keeps "
+"track of the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:169
+msgid ""
+"Hatch keeps track of your package's version in a `_version.py` file. "
+"Storing the version in a single file managed by Hatch provides your "
+"package with a \"single source of truth\" value for the version number. "
+"This in turn eliminates potential error associated with manually updating"
+" your package's version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:175
+msgid ""
+"When you (or your CI system) build your package, hatch checks the current"
+" tag number for your package. If it has increased, it will update the "
+"**\\_version.py** file with the new value."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:178
+msgid ""
+"Thus, when you create a new tag or a new release with a tag and build "
+"your package, Hatch will access the new tag value and use it to update "
+"your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:181
+msgid ""
+"To use **hatch_vcs** you will need to use the **hatchling** build back "
+"end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:184
+msgid ""
+"Hatchling can also be used with any of the modern build tools including "
+"**Flit** and **PDM** if you prefer those for your day to day workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:189
+msgid "Hatch example setup in your pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:198
+msgid ""
+"**Hatch_vcs** supports a fully automated package release and build, and "
+"push to PyPI workflow on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:208
+msgid ""
+"If you use **setuptools_scm**, then you might find **hatch_vcs** and "
+"**hatchling** to be the modern equivalent to your current setuptools / "
+"build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:211
+msgid "hatch_vcs pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:213
+msgid "Hatch supports modern Python packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:214
+#: ../../package-structure-code/python-package-versions.md:240
+msgid "It creates a single-source file that contains your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:215
+#: ../../package-structure-code/python-package-versions.md:241
+msgid "You never manually update the package version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:216
+#: ../../package-structure-code/python-package-versions.md:242
+msgid ""
+"You can automate writing the version anywhere in your package including "
+"your documentation!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:217
+#: ../../package-structure-code/python-package-versions.md:243
+msgid ""
+"It supports a purely GitHub based release workflow. This simplifies "
+"maintenance workflows."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:218
+#: ../../package-structure-code/python-package-versions.md:244
+msgid ""
+"Version number is updated in your package via a hidden `_version.py` "
+"file. There is no manual configuration updates required."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:219
+#: ../../package-structure-code/python-package-versions.md:245
+msgid ""
+"While we like detailed commit messages (See Python Semantic Version "
+"below), we know that sometimes when maintaining a package specific "
+"guidelines around commit messages can be hard to apply and manage."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:221
+msgid "hatch_vcs cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:223
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub. But you could locally develop a build"
+" to \"bump\" tag versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:226
+msgid "Tool 3: setuptools-scm versioning using git tags"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:228
+msgid ""
+"[`Setuptools_scm`](https://github.com/pypa/setuptools-scm/) is an "
+"extension that you can use with setuptools to manage package versions. "
+"**Setuptools_scm** operates the same way that **hatch_vcs** (discussed "
+"above) does. It stores a version in a **\\_version.py** file and relies "
+"on (**git**) tags to determine the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:234
+msgid ""
+"If you are using **setuptools** as your primary build tool, then "
+"`*setuptools-scm` is a good choice as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:238
+msgid "setuptools_scm Pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:246
+msgid "**setuptools** is still the most commonly used Python packaging build tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:248
+msgid "setuptools_scm cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:250
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:251
+msgid "Not well documented"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:252
+msgid ""
+"Because setuptools will always have to support backwards compatibility it"
+" will always be slower in adopting modern Python packaging conventions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:254
+msgid ""
+"As such you might consider using a more modern tool such as **hatch_vcs**"
+" and **hatchling** to build your package and manage package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:266
+msgid ""
+"Tool 4: [Python semantic release](https://python-semantic-"
+"release.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:268
+msgid ""
+"Python semantic release uses a commit message workflow that updates the "
+"version of your package based on keywords found in your commit messages. "
+"As the name implies, Python Semantic Release follows semver release "
+"rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:273
+msgid ""
+"With Python Semantic Release, versions are triggered using specific "
+"language found in a git commit message."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:276
+msgid ""
+"For example, the words `fix(attribute_warning):` trigger Python Semantic "
+"Release to implement a **patch** version bump. For instance if your "
+"package was at version 1.1.0 and you made the commit below with the words"
+" fix(text-here), Python Semantic Release would bump your package to "
+"version 1.1.1."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:286
+msgid ""
+"Similarly a feature (`feat()`) triggers a minor version bump. For example"
+" from version 1.1 to version 1.2"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:294
+msgid ""
+"You can find a thoughtful discussion of python semantic version [in this "
+"Python package guide](https://py-pkgs.org/07-releasing-versioning"
+"#automatic-version-bumping). Note that the guide hasn't been updated "
+"since 2020 and will potentially be updated in the future! But for now, "
+"some of the commands are dated but the content is still excellent."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:297
+msgid "Python Semantic Release pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:299
+msgid "Follows semver versioning closely"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:300
+msgid ""
+"Enforces maintainers using descriptive commit messages which can simplify"
+" troubleshooting and ensure a cleaner and more self-describing git "
+"history."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:302
+msgid "Python Semantic Release cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:304
+msgid ""
+"Requires very specific commit language to work. In practice some "
+"maintainers and contributors may not be able to maintain that level of "
+"specificity in commit messages (NOTE: there are bots that will check git "
+"commit messages in a repo)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:305
+msgid ""
+"Release happens at the command line. This makes is harder to implement a "
+"GitHub based release workflow as the wrong commit message could trigger a"
+" release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:306
+msgid ""
+"The version number is manually updated in a configuration file such as "
+"`pyproject.toml` vs. in a package **\\_version.py** file."
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/tests.po b/locales/de/LC_MESSAGES/tests.po
new file mode 100644
index 000000000..fbcd8fc40
--- /dev/null
+++ b/locales/de/LC_MESSAGES/tests.po
@@ -0,0 +1,1594 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tests/code-cov.md:1
+msgid "Code coverage for your Python package test suite"
+msgstr ""
+
+#: ../../tests/code-cov.md:3
+msgid ""
+"Code coverage measures how much of your package's code runs during "
+"testing. Achieving high coverage can help ensure the reliability of your "
+"codebase, but it’s not a guarantee of quality. Below, we outline key "
+"considerations for using code coverage effectively."
+msgstr ""
+
+#: ../../tests/code-cov.md:8
+msgid "Why aim for high code coverage?"
+msgstr ""
+
+#: ../../tests/code-cov.md:10
+msgid ""
+"A good practice is to ensure that every line of your code runs at least "
+"once during your test suite. This helps you:"
+msgstr ""
+
+#: ../../tests/code-cov.md:13
+msgid ""
+"**Identify untested parts:** Parts of your codebase that are not covered "
+"by tests."
+msgstr ""
+
+#: ../../tests/code-cov.md:15
+msgid "**Catch bugs:** Bugs that might otherwise go unnoticed."
+msgstr ""
+
+#: ../../tests/code-cov.md:16
+msgid "**Build confidence:** Confidence in your software's stability."
+msgstr ""
+
+#: ../../tests/code-cov.md:18
+msgid "Limitations of code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:20
+msgid "While high code coverage is valuable, it has its limits:"
+msgstr ""
+
+#: ../../tests/code-cov.md:22
+msgid ""
+"**Difficult-to-test code:** Some parts of your code might be challenging "
+"to test, either due to complexity or limited resources."
+msgstr ""
+
+#: ../../tests/code-cov.md:24
+msgid ""
+"**Missed edge cases:** Running all lines of code doesn't guarantee that "
+"edge cases are handled correctly."
+msgstr ""
+
+#: ../../tests/code-cov.md:27
+msgid ""
+"Ultimately, you should focus on how your package will be used and ensure "
+"your tests cover those scenarios adequately."
+msgstr ""
+
+#: ../../tests/code-cov.md:30
+msgid "Tools for analyzing Python package code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:32
+msgid ""
+"Some common services for analyzing code coverage are "
+"[codecov.io](https://about.codecov.io/) and "
+"[coveralls.io](https://coveralls.io/). These projects are free for open "
+"source tools and provide dashboards that show how much of your codebase "
+"is covered during your tests. We recommend setting up an account (on "
+"either CodeCov or Coveralls) and using it to keep track of your code "
+"coverage."
+msgstr ""
+
+#: ../../tests/code-cov.md:39
+#, python-format
+msgid ""
+"Screenshot of the code cov service - showing test coverage for the "
+"stravalib package. This image shows a list of package modules and the "
+"associated number of lines and % lines covered by tests. At the top of "
+"the image, you can see what branch is being evaluated and the path to the"
+" repository."
+msgstr ""
+
+#: ../../tests/code-cov.md:44
+msgid ""
+"The CodeCov platform is a useful tool if you wish to track code coverage "
+"visually. Using it, you can get the same summary information that you can"
+" get with the **pytest-cov** extension. You can also see what lines are "
+"covered by your tests and which are not. Code coverage is useful for "
+"evaluating [unit tests](test-types.md#unit-tests) and/or how much of your"
+" package code is \"covered\". It, however, will not evaluate things like "
+"[integration tests](test-types.md#integration-tests) and [end-to-end "
+"workflows](test-types.md)."
+msgstr ""
+
+#: ../../tests/code-cov.md:56
+msgid "Typing & MyPy coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:57
+msgid "You can also create and upload typing reports to CodeCov."
+msgstr ""
+
+#: ../../tests/code-cov.md:60
+msgid "Exporting Local Coverage Reports"
+msgstr ""
+
+#: ../../tests/code-cov.md:62
+msgid ""
+"In addition to using services like CodeCov or Coveralls, you can generate"
+" local coverage reports directly using the **coverage.py** tool. This can"
+" be especially useful if you want to create reports in Markdown or HTML "
+"format for offline use or documentation."
+msgstr ""
+
+#: ../../tests/code-cov.md:67
+msgid "To generate a coverage report in **Markdown** format, run:"
+msgstr ""
+
+#: ../../tests/code-cov.md:73
+msgid ""
+"This command will produce a Markdown-formatted coverage summary that you "
+"can include in project documentation or share with your team."
+msgstr ""
+
+#: ../../tests/code-cov.md:76
+msgid ""
+"To generate an HTML report that provides a detailed, interactive view of "
+"which lines are covered, use:"
+msgstr ""
+
+#: ../../tests/code-cov.md:83
+msgid ""
+"The generated HTML report will be saved in a directory named `htmlcov` by"
+" default. Open the `index.html` file in your browser to explore your "
+"coverage results."
+msgstr ""
+
+#: ../../tests/code-cov.md:87
+msgid ""
+"These local reports are an excellent way to quickly review coverage "
+"without setting up an external service."
+msgstr ""
+
+#: ../../tests/code-cov.md:90 ../../tests/run-tests-nox.md:168
+#: ../../tests/run-tests.md:332 ../../tests/test-types.md:346
+#: ../../tests/write-tests.md:136
+msgid "Next steps"
+msgstr ""
+
+#: ../../tests/code-cov.md:92
+msgid ""
+"Writing meaningful tests is the foundation of useful coverage. See [Write"
+" tests](write-tests.md) and [Test types](test-types.md) to learn more "
+"about developing better test suites. Learn how to run your tests both "
+"[locally](run-tests.md) and in [continuous integration](tests-ci.md)."
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Intro"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Write tests"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Test types"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests locally"
+msgstr ""
+
+#: ../../tests/index.md:70 ../../tests/run-tests-nox.md:7
+msgid "Run tests with Nox"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests online (using CI)"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Code coverage"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Create & Run Tests"
+msgstr ""
+
+#: ../../tests/index.md:2
+msgid "Tests and data for your Python package"
+msgstr ""
+
+#: ../../tests/index.md:4
+msgid ""
+"Adding tests to your package provides a set of checks that ensure that "
+"its functioning how you expect it to."
+msgstr ""
+
+#: ../../tests/index.md:7
+msgid ""
+"In this section, you will learn about the importance of writing tests for"
+" your Python package, different [types of tests that you should consider"
+"](test-types) and how you can set up infrastructure to run your tests "
+"both [locally](run-tests) and [on GitHub](tests-ci)."
+msgstr ""
+
+#: ../../tests/index.md:16
+msgid "✨ Why write tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:21
+msgid ""
+"Learn about the importance of writing tests for your Python package and "
+"how they help you and potential contributors."
+msgstr ""
+
+#: ../../tests/index.md:25
+msgid "✨ Types of tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:30
+msgid ""
+"Get to know the three test types: unit, integration, and end-to-end "
+"tests. Learn when and how to use each."
+msgstr ""
+
+#: ../../tests/index.md:34
+msgid "✨ Run tests locally ✨"
+msgstr ""
+
+#: ../../tests/index.md:39
+msgid ""
+"Learn about testing tools like pytest, nox, and tox to run tests across "
+"different Python versions on your computer. And explore examples of using"
+" Hatch with UV as a task runner to run tests across Python versions."
+msgstr ""
+
+#: ../../tests/index.md:43
+msgid "✨ Run tests locally (using nox) ✨"
+msgstr ""
+
+#: ../../tests/index.md:48
+msgid ""
+"Nox is a python powered task runner that can be used to run tests. Learn "
+"how to use nox to run tests."
+msgstr ""
+
+#: ../../tests/index.md:51
+msgid "✨ Run tests online (using CI) ✨"
+msgstr ""
+
+#: ../../tests/index.md:56
+msgid ""
+"Set up continuous integration with GitHub Actions to run tests across "
+"Python versions and operating systems."
+msgstr ""
+
+#: ../../tests/index.md:60
+msgid "✨ Code coverage ✨"
+msgstr ""
+
+#: ../../tests/index.md:65
+msgid ""
+"Measure how much of your package code runs during tests. Learn to "
+"generate local reports and visualize coverage online."
+msgstr ""
+
+#: ../../tests/run-tests.md:7
+msgid "Run tests for your Python package"
+msgstr ""
+
+#: ../../tests/run-tests.md:9
+msgid ""
+"Running your tests across different Python versions and operating systems"
+" is critical to ensuring your package works for your users. Your users "
+"may be running different versions of Python and operating systems than "
+"you are."
+msgstr ""
+
+#: ../../tests/run-tests.md:13
+msgid ""
+"This page teaches you how to run tests locally in isolated environments "
+"and across multiple Python versions. You'll learn about two main "
+"automation tools: [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/en/stable/index.html). In the next "
+"lesson, you will learn about running your tests online in [continuous "
+"integration (CI)](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:20
+msgid "Why run tests across multiple environments?"
+msgstr ""
+
+#: ../../tests/run-tests.md:22
+msgid ""
+"When you develop a package on your computer, it works in one specific "
+"environment: your Python version, your operating system, and your "
+"installed dependencies. Your users, however, will run your code in many "
+"different environments. By running your tests across multiple Python "
+"versions and operating systems, you catch compatibility issues before "
+"users do."
+msgstr ""
+
+#: ../../tests/run-tests.md:28
+msgid ""
+"Additionally, running tests in isolated environments ensures that your "
+"tests pass because of your code, not because of unexpected dependencies "
+"installed on your computer. This gives you confidence that your package "
+"will work when others install it."
+msgstr ""
+
+#: ../../tests/run-tests.md:33
+msgid ""
+"On this page, you will learn about the tools that you can use to both run"
+" tests in isolated environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:37
+msgid "**Related pages:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:39
+msgid "[Write tests](write-tests.md) for best practices on writing test suites"
+msgstr ""
+
+#: ../../tests/run-tests.md:41
+msgid ""
+"[Test types](test-types.md) to understand unit, integration, and end-to-"
+"end tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:43
+msgid "[Run tests online with CI](tests-ci.md) for GitHub Actions setup"
+msgstr ""
+
+#: ../../tests/run-tests.md:44
+msgid "[Code coverage](code-cov.md) to measure how much code your tests cover"
+msgstr ""
+
+#: ../../tests/run-tests.md:48
+msgid "Tools to run your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:50
+msgid ""
+"There are three categories of tools that will make it easier to setup and"
+" run your tests in various environments:"
+msgstr ""
+
+#: ../../tests/run-tests.md:53
+msgid ""
+"**Testing framework (pytest):** Provides the syntax and tools for writing"
+" and running your tests. Learn more from the [pytest "
+"documentation](https://docs.pytest.org/). Below you will learn about "
+"pytest, the most commonly used testing framework in the scientific Python"
+" ecosystem. Testing frameworks are essential for running tests, but they "
+"don't provide an easy way to run tests across Python versions or in "
+"isolated environments—that's where automation tools come in."
+msgstr ""
+
+#: ../../tests/run-tests.md:61
+msgid ""
+"**Automation tools (Nox, Tox, Hatch):** Allow you to run tests in "
+"isolated environments and across multiple Python versions with a single "
+"command. We focus on [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/) below. These tools create virtual "
+"environments automatically and ensure your tests run consistently. "
+"However, they typically only test on your local operating system."
+msgstr ""
+
+#: ../../tests/run-tests.md:69
+msgid ""
+"**Continuous Integration (CI):** Runs your tests online across different "
+"operating systems (Windows, Mac, and Linux) and Python versions. CI "
+"integrates with platforms like GitHub Actions to automatically test every"
+" pull request and code change."
+msgstr ""
+
+#: ../../tests/run-tests.md:74
+msgid "[Learn about CI here](ci-cd)."
+msgstr ""
+
+#: ../../tests/run-tests.md:76
+msgid "Quick comparison: what each tool does"
+msgstr ""
+
+#: ../../tests/run-tests.md:78
+msgid "**Testing Framework (pytest):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:80
+msgid "Runs your tests locally in your current Python environment"
+msgstr ""
+
+#: ../../tests/run-tests.md:81
+msgid "Provides the core syntax for writing tests (assertions, fixtures, etc.)"
+msgstr ""
+
+#: ../../tests/run-tests.md:83
+msgid "Can be extended with plugins (like pytest-cov for coverage)"
+msgstr ""
+
+#: ../../tests/run-tests.md:85
+msgid "**Automation Tools (Nox, Tox, Hatch):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:87
+msgid "Run tests locally across multiple Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:88
+msgid "Create and manage isolated virtual environments automatically"
+msgstr ""
+
+#: ../../tests/run-tests.md:89
+msgid "Can automate other tasks like building documentation"
+msgstr ""
+
+#: ../../tests/run-tests.md:90
+msgid "Make it easy to reproduce test environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:92
+msgid "**Continuous Integration (GitHub Actions):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:94
+msgid "Runs tests online automatically for every pull request"
+msgstr ""
+
+#: ../../tests/run-tests.md:95
+msgid "Tests across different operating systems (Windows, Mac, Linux)"
+msgstr ""
+
+#: ../../tests/run-tests.md:96
+msgid "Tests across multiple Python versions in parallel"
+msgstr ""
+
+#: ../../tests/run-tests.md:97
+msgid "Can automate deployments, releases, and other workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:99
+msgid "What testing framework / package should I use to run tests?"
+msgstr ""
+
+#: ../../tests/run-tests.md:101
+msgid ""
+"We recommend using `Pytest` to build and run your package tests. Pytest "
+"is the most common testing tool used in the Python ecosystem."
+msgstr ""
+
+#: ../../tests/run-tests.md:103
+msgid ""
+"[The Pytest package](https://docs.pytest.org/en/latest/) also has a "
+"number of extensions that can be used to add functionality such as:"
+msgstr ""
+
+#: ../../tests/run-tests.md:106
+msgid ""
+"[pytest-cov](https://pytest-cov.readthedocs.io/en/latest/) allows you to "
+"analyze the code coverage of your package during your tests, and "
+"generates a report that you can [upload to "
+"codecov](https://about.codecov.io/)."
+msgstr ""
+
+#: ../../tests/run-tests.md:108 ../../tests/tests-ci.md:7
+msgid "Todo"
+msgstr ""
+
+#: ../../tests/run-tests.md:109
+msgid "Learn more about code coverage here. (add link)"
+msgstr ""
+
+#: ../../tests/run-tests.md:113
+msgid ""
+"Your editor or IDE may add additional convenience for running tests, "
+"setting breakpoints, and toggling the `–no-cov` flag. Check your editor's"
+" documentation for more information."
+msgstr ""
+
+#: ../../tests/run-tests.md:116
+msgid "Run tests using pytest"
+msgstr ""
+
+#: ../../tests/run-tests.md:118
+msgid "If you are using **pytest**, you can run your tests locally by calling:"
+msgstr ""
+
+#: ../../tests/run-tests.md:121
+msgid "`pytest`"
+msgstr ""
+
+#: ../../tests/run-tests.md:123
+msgid ""
+"Or if you want to run a specific test file - let's call this file "
+"\"`test_module.py`\" - you can run:"
+msgstr ""
+
+#: ../../tests/run-tests.md:125
+msgid "`pytest test_module.py`"
+msgstr ""
+
+#: ../../tests/run-tests.md:127
+msgid ""
+"Learn more about pytest [here](https://docs.pytest.org/en/stable/getting-"
+"started.html)."
+msgstr ""
+
+#: ../../tests/run-tests.md:129
+msgid ""
+"Running pytest on your computer is going to run your tests in whatever "
+"Python environment you currently have activated. This means that tests "
+"will be run on a single version of Python and only on the operating "
+"system that you are running locally."
+msgstr ""
+
+#: ../../tests/run-tests.md:134
+msgid ""
+"An automation tool can simplify the process of running tests in various "
+"Python environments."
+msgstr ""
+
+#: ../../tests/run-tests.md:137
+msgid "Tests across operating systems"
+msgstr ""
+
+#: ../../tests/run-tests.md:138
+msgid ""
+"If you want to run your tests on different operating systems you can use "
+"continuous integration. [Learn more here](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:141
+msgid "Tools to automate running your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:143
+msgid ""
+"To run tests on various Python versions or in various specific "
+"environments with a single command, you can use an automation tool such "
+"as `nox` or `tox`. Both `nox` and `tox` can create an isolated virtual "
+"environments. This allows you to easily run your tests in multiple "
+"environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:146
+msgid ""
+"We will focus on Hatch on this page as Hatch is the default tool that we "
+"use in our [tutorials](create-pure-python-package) and for our [Python "
+"package template](https://github.com/pyOpenSci/pyos-package-template)."
+msgstr ""
+
+#: ../../tests/run-tests.md:149
+msgid ""
+"If you are not a hatch fan, then [Nox](https://nox.thea.codes/) is an "
+"alternative tool that we cover in the next lesson. `nox` is a Python-"
+"based automation tool that builds upon the features of both `make` and "
+"`tox`. `nox` is designed to simplify and streamline testing and "
+"development workflows. Everything that you do with `nox` can be "
+"implemented using a Python-based interface. You will learn more about "
+"using nox [here](run-tests-nox)."
+msgstr ""
+
+#: ../../tests/run-tests.md:151
+msgid "Other automation tools you'll see in the wild"
+msgstr ""
+
+#: ../../tests/run-tests.md:154
+msgid ""
+"**[Tox](https://tox.wiki/en/latest/index.html#useful-links)** is an "
+"automation tool that supports common steps such as building "
+"documentation, running tests across various versions of Python, and more."
+msgstr ""
+
+#: ../../tests/run-tests.md:159
+msgid ""
+"**[Make](https://www.gnu.org/software/make/manual/make.html)** is a build"
+" automation tool that some developers use for running tests due to its "
+"versatility. However, Make's unique syntax can be challenging to learn, "
+"and it won't manage environments for you like Hatch and Nox do."
+msgstr ""
+
+#: ../../tests/run-tests.md:166
+msgid "Run tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:168
+msgid ""
+"**Hatch** is a modern Python packaging and environment manager that "
+"integrates test running capabilities directly into your `pyproject.toml`."
+" Unlike Nox (which uses a separate `noxfile.py`), Hatch keeps all your "
+"project configuration in one place, making it ideal if you're already "
+"using Hatch for packaging workflows."
+msgstr ""
+
+#: ../../tests/run-tests.md:174
+msgid "Why Hatch for testing?"
+msgstr ""
+
+#: ../../tests/run-tests.md:176
+msgid "Configuration lives in `pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:178
+msgid "Integrates seamlessly with Hatch's packaging and build workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:179
+msgid "No separate Python file needed (unlike Nox)"
+msgstr ""
+
+#: ../../tests/run-tests.md:180
+msgid "Easy to share standardized test environments across your team"
+msgstr ""
+
+#: ../../tests/run-tests.md:182
+msgid "Setting up Hatch environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:184
+msgid ""
+"Hatch environments are defined in your `pyproject.toml`. Rather than "
+"duplicating dependencies, use `dependency-groups` to reference your test "
+"dependencies:"
+msgstr ""
+
+#: ../../tests/run-tests.md:205
+msgid ""
+"This approach keeps your test dependencies in one place and avoids "
+"duplication. For a complete example, see our [packaging template "
+"tutorial](https://www.pyopensci.org/tutorials/create-python-package.html)"
+" which shows a full `pyproject.toml` configuration."
+msgstr ""
+
+#: ../../tests/run-tests.md:210
+msgid "Running tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:212
+msgid ""
+"Once you've defined your test environment, you can run tests with simple "
+"commands:"
+msgstr ""
+
+#: ../../tests/run-tests.md:215
+msgid "**List available environments:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:221
+msgid "**Run pytest in the test environment:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:228
+msgid "Testing across Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:230
+msgid ""
+"To test across multiple Python versions, define a matrix in your "
+"`pyproject.toml`:"
+msgstr ""
+
+#: ../../tests/run-tests.md:249
+msgid "Then run all versions with a single command:"
+msgstr ""
+
+#: ../../tests/run-tests.md:255
+msgid ""
+"Hatch will automatically run your tests on Python 3.10, 3.11, and 3.12. "
+"If you only want to test a specific Python version:"
+msgstr ""
+
+#: ../../tests/run-tests.md:262
+msgid "Using Hatch in GitHub Actions"
+msgstr ""
+
+#: ../../tests/run-tests.md:264
+msgid "Hatch integrates well with CI/CD. Here's a minimal GitHub Actions setup:"
+msgstr ""
+
+#: ../../tests/run-tests.md:288
+msgid ""
+"Since all of your test dependencies are declared in the `dependency-"
+"group` table of your `pyproject.toml`, your CI environment is "
+"reproducible and consistent with the environments that you are using for "
+"local testing."
+msgstr ""
+
+#: ../../tests/run-tests.md:292
+msgid "Nox vs Hatch: choosing the right tool"
+msgstr ""
+
+#: ../../tests/run-tests.md:294
+msgid ""
+"Both Hatch and Nox are excellent automation tools / task runners for "
+"running tests across Python versions. Here's how they compare to help you"
+" decide which fits your workflow:"
+msgstr ""
+
+#: ../../tests/run-tests.md:298
+msgid "Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:300
+msgid ""
+"**Configuration:** Hatch uses a `declarative` configuration approach. You"
+" tell it what goes into an environment and that empowers Hatch to create "
+"the environment for you. All configuration settings live in your "
+"`pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:302
+msgid ""
+"**Integration:** Hatch is package management tool that also has an "
+"integrated automation / task runner. Using Hatch means you are using the "
+"same tool for all of your packaging and automation needs."
+msgstr ""
+
+#: ../../tests/run-tests.md:303
+msgid ""
+"**Learning curve:** Easier if you prefer declarative configuration over a"
+" code based workflow"
+msgstr ""
+
+#: ../../tests/run-tests.md:304
+msgid ""
+"**packaging scope** Hatch is better for simpler workflows that focus on "
+"testing and packaging. If you have more complex builds or are creating a "
+"non pure python package you might prefer Nox. The scientific Python "
+"development guide has more details on this."
+msgstr ""
+
+#: ../../tests/run-tests.md:305
+msgid ""
+"**Best for:** Teams using Hatch for packaging, or those who want "
+"standardized configuration in one place"
+msgstr ""
+
+#: ../../tests/run-tests.md:308
+msgid "Nox"
+msgstr ""
+
+#: ../../tests/run-tests.md:310
+msgid "**Configuration:** Python-driven via `noxfile.py` for maximum flexibility"
+msgstr ""
+
+#: ../../tests/run-tests.md:311
+msgid "**Customization:** Great for complex workflows that need custom logic"
+msgstr ""
+
+#: ../../tests/run-tests.md:312
+msgid ""
+"**Learning curve:** Easier if you already know Python and want flexible "
+"session control"
+msgstr ""
+
+#: ../../tests/run-tests.md:314
+msgid ""
+"**Best for:** Complex automation needs, building docs alongside tests, or"
+" workflows that don't fit the standard model"
+msgstr ""
+
+#: ../../tests/run-tests.md:317
+msgid "What we recommend"
+msgstr ""
+
+#: ../../tests/run-tests.md:319
+msgid ""
+"**If you're using Hatch for packaging:** Use Hatch for testing too. You "
+"get everything in one place and one consistent tool."
+msgstr ""
+
+#: ../../tests/run-tests.md:322
+msgid ""
+"**If you need maximum flexibility:** Choose Nox. Its Python-driven "
+"approach lets you implement almost any workflow."
+msgstr ""
+
+#: ../../tests/run-tests.md:325
+msgid ""
+"**If you're just starting out:** Start with Hatch. It's simpler to set up"
+" and understand, and you can always switch to Nox later if you need to."
+msgstr ""
+
+#: ../../tests/run-tests.md:328
+msgid ""
+"**Both tools are good choices.** For a more comprehensive guide to using"
+" Nox, see [Run tests with Nox](run-tests-nox.md) and the [Scientific "
+"Python testing guide](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests.md:334
+msgid ""
+"Now that you understand how to run tests locally across Python versions, "
+"you can learn about [running tests automatically in GitHub Actions with "
+"continuous integration](tests-ci). You can also review [test types](test-"
+"types) and [write tests](write-tests) for your package."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:9
+msgid ""
+"**Nox** is a Python-based automation tool for running tests across "
+"multiple Python versions and managing isolated test environments. If you "
+"prefer Python-driven configuration over TOML, or need complex automation "
+"workflows, Nox is an excellent choice."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:14
+msgid ""
+"For more information about Nox, see the [official Nox "
+"documentation](https://nox.thea.codes/) or the [Scientific Python guide "
+"to testing](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:18
+msgid "Why Nox?"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:20
+msgid "**Nox** is a great automation tool because it:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:22
+msgid "Is Python-based, making it accessible if you already know Python"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:23
+msgid "Will create isolated environments to run workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:24
+msgid "Supports complex, custom automation beyond standard testing"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:25
+msgid "Is flexible and powerful for intricate build and test scenarios"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:27
+msgid ""
+"`nox` simplifies creating and managing testing environments. With `nox`, "
+"you can set up virtual environments and run tests across Python versions "
+"using the environment manager of your choice with a single command."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:31
+msgid "Set up Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:33
+msgid ""
+"To get started with Nox, you create a `noxfile.py` file at the root of "
+"your project directory. You then define commands using Python functions."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:37
+msgid "Nox installations"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:39
+msgid ""
+"When you install and use Nox to run tests across different Python "
+"versions, Nox will create and manage individual `venv` environments for "
+"each Python version that you specify in the Nox function. Nox will manage"
+" each environment on its own."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:45
+msgid ""
+"Nox can also be used for other development tasks such as building "
+"documentation, creating your package distribution, and testing "
+"installations across both PyPI-related environments (e.g., venv, "
+"virtualenv) and `conda` (e.g., `conda-forge`)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:50
+msgid "Test environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:52
+msgid ""
+"By default, `nox` uses Python's built-in `venv` environment manager. A "
+"virtual environment (`venv`) is a self-contained Python environment that "
+"allows you to isolate and manage dependencies for different Python "
+"projects. It helps ensure that project-specific libraries and packages do"
+" not interfere with each other, promoting a clean and organized "
+"development environment."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:58
+msgid "Nox with venv environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:60
+msgid ""
+"Below is an example of setting up Nox to run tests using `venv`, which is"
+" the built-in environment manager that comes with base Python."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:63
+msgid ""
+"Note that the example below assumes that you have setup your "
+"`pyproject.toml` to declare test dependencies using `project.optional-"
+"dependencies`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:83
+msgid ""
+"With this setup, you can use `session.install(\".[tests]\")` to install "
+"your test dependencies. Notice that below one single Nox session allows "
+"you to run your tests on 4 different Python environments (Python 3.9, "
+"3.10, 3.11, and 3.12)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:89
+msgid ""
+"For this to run you will need to have python3.9, python3.10, python3.11, "
+"and python3.12 installed on your computer. Otherwise nox will skip "
+"running tests for whatever versions are missing."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:107
+msgid ""
+"Above you create a Nox session in the form of a function with a "
+"`@nox.session` decorator. Notice that within the decorator you declare "
+"the versions of Python that you wish to run."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:111
+msgid ""
+"To run the above, you'd execute the following command, specifying which "
+"session with `--session` (sometimes shortened to `-s`). Your function "
+"above is called `test`, therefore the session name is `test`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:119
+msgid "Nox with conda / mamba"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:121
+msgid ""
+"Below is an example for setting up Nox to use mamba (or conda) for your "
+"environment manager. Unlike venv, conda can automatically install the "
+"various versions of Python that you need. You won't need to install all "
+"four Python versions if you use conda/mamba, like you do with `venv`."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:127
+msgid ""
+"For `conda` to work with `nox`, you will need to ensure that either "
+"`conda` or `mamba` is installed on your computer."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:150
+msgid "To run the above session you'd use:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:156
+msgid "Hatch vs Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:158
+msgid ""
+"If you're trying to decide between Hatch and Nox, see the [comparison and"
+" recommendations on the main testing page](run-tests.md)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:161
+msgid "In summary"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:163
+msgid ""
+"**Choose Hatch** if you're already using Hatch for packaging and want "
+"everything in one place"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:165
+msgid ""
+"**Choose Nox** if you need maximum flexibility, prefer Python-driven "
+"configuration, or need complex automation workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:170
+msgid ""
+"Now that you understand how to run tests locally with Nox, you can learn "
+"about [running tests automatically with continuous integration](tests-ci)"
+" or [running tests with Hatch](run-tests.md)."
+msgstr ""
+
+#: ../../tests/test-types.md:1
+msgid "Test Types for Python packages"
+msgstr ""
+
+#: ../../tests/test-types.md:3
+msgid "Three types of tests: unit, integration, and functional tests"
+msgstr ""
+
+#: ../../tests/test-types.md:5
+msgid ""
+"There are different types of tests that you want to consider when "
+"creating your test suite:"
+msgstr ""
+
+#: ../../tests/test-types.md:8 ../../tests/test-types.md:15
+msgid "Unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:9 ../../tests/test-types.md:93
+msgid "Integration tests"
+msgstr ""
+
+#: ../../tests/test-types.md:10
+msgid "End-to-end (also known as functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:12
+msgid ""
+"Each type of test has a different purpose. Here, you will learn about all"
+" three types of tests by working through simple examples."
+msgstr ""
+
+#: ../../tests/test-types.md:17
+msgid ""
+"A unit test involves testing individual components or units of code in "
+"isolation to ensure that they work correctly. The goal of unit testing is"
+" to verify that each part of the software, typically at the function or "
+"method level, performs its intended task correctly."
+msgstr ""
+
+#: ../../tests/test-types.md:22
+msgid ""
+"Unit tests can be compared to examining each piece of your puzzle to "
+"ensure parts or subsections of it are not broken. If all of the pieces of"
+" that section of your puzzle don't fit together, you will never complete "
+"it. Similarly, when working with code, tests ensure that each function, "
+"attribute, class, and method works properly when isolated."
+msgstr ""
+
+#: ../../tests/test-types.md:28
+msgid ""
+"**Unit test example:** Suppose you have a function that adds two numbers "
+"together. A unit test for that function ensures that when provided with "
+"two numbers, it returns the correct sum. This is a unit test because it "
+"checks a single unit (function) in isolation."
+msgstr ""
+
+#: ../../tests/test-types.md:54
+msgid ""
+"Example unit test for the above function. You'd run this test using the "
+"`pytest` command in your **tests/** directory."
+msgstr ""
+
+#: ../../tests/test-types.md:76
+msgid ""
+"Notice that the tests above don't just test one case where numbers are "
+"added together. Instead, they test multiple scenarios: adding positive "
+"numbers, adding a negative number, and adding zero. This helps ensure "
+"that the `add_numbers` function behaves correctly in different situations"
+" and is the beginning of thinking about programming defensively."
+msgstr ""
+
+#: ../../tests/test-types.md:83
+msgid ""
+"You can run this test from your terminal using `pytest "
+"tests/test_math_utils.py`."
+msgstr ""
+
+#: ../../tests/test-types.md:86 ../../tests/test-types.md:215
+msgid ""
+"image of puzzle pieces that all fit together nicely. The puzzle pieces "
+"are colorful - purple, green and teal."
+msgstr ""
+
+#: ../../tests/test-types.md:90
+msgid ""
+"Your unit tests should ensure each part of your code works as expected on"
+" its own."
+msgstr ""
+
+#: ../../tests/test-types.md:95
+msgid ""
+"Integration tests involve testing how parts of your package work together"
+" or integrate. Integration tests can be compared to connecting a bunch of"
+" puzzle pieces together to form a whole picture. Integration tests focus "
+"on how different pieces of your code fit and work together."
+msgstr ""
+
+#: ../../tests/test-types.md:100
+msgid ""
+"For example, suppose you have functions that convert temperatures and "
+"calculate statistics. An integration test would ensure that these "
+"functions work together correctly in a workflow where you convert "
+"temperatures and then analyze them."
+msgstr ""
+
+#: ../../tests/test-types.md:178
+msgid ""
+"Here's an integration test that checks how the conversion and statistics "
+"functions work together:"
+msgstr ""
+
+#: ../../tests/test-types.md:204
+msgid ""
+"This integration test verifies that the conversion and averaging "
+"functions work together as expected in a real workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:207
+msgid ""
+"image of two puzzle pieces with some missing parts. The puzzle pieces are"
+" purple teal yellow and blue. The shapes of each piece don’t fit "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:212
+msgid ""
+"If puzzle pieces have missing ends, they can’t work together with other "
+"elements in the puzzle. The same is true with individual functions, "
+"methods and classes in your software. The code needs to work both "
+"individually and together to perform certain sets of tasks."
+msgstr ""
+
+#: ../../tests/test-types.md:220
+msgid ""
+"Your integration tests should ensure that parts of your code that are "
+"expected to work together, do so as expected."
+msgstr ""
+
+#: ../../tests/test-types.md:224
+msgid "End-to-end (functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:226
+msgid ""
+"End-to-end tests (also referred to as functional tests) in Python are "
+"like comprehensive checklists for your software. They simulate real user "
+"workflows to make sure the code base supports real-life applications and "
+"use-cases from start to finish. These tests help catch issues that might "
+"not show up in smaller tests and ensure your entire application behaves "
+"correctly. Think of them as a way to give your software a final check "
+"before it's put into action, making sure it's ready to deliver a smooth "
+"user experience."
+msgstr ""
+
+#: ../../tests/test-types.md:235
+msgid "Image of a completed puzzle showing a daisy"
+msgstr ""
+
+#: ../../tests/test-types.md:240
+msgid ""
+"End-to-end or functional tests represent an entire workflow that your "
+"package supports."
+msgstr ""
+
+#: ../../tests/test-types.md:244
+msgid ""
+"**End-to-end test example:** Let's say your package opens and "
+"processes/converts temperature data from Celsius to Fahrenheit and then "
+"calculates the average temperature. An end-to-end test would simulate "
+"this entire workflow, ensuring that the package correctly handles the "
+"input temperature data and returns a summary average value. An end-to-end"
+" test would provide sample data, run the entire workflow, and verify that"
+" the final output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:274
+msgid ""
+"This end-to-end test exercises the entire user workflow: providing sample"
+" data, converting and averaging it, and verifying the output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:278
+msgid ""
+"End-to-end tests also verify how a program runs from start to finish. A "
+"tutorial that you add to your documentation and run in CI is another "
+"example of an end-to-end test. For example, a Jupyter (`.ipynb`) notebook"
+" or `.md` file with embedded code that demonstrates a complete user "
+"workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:285
+msgid ""
+"For scientific packages, creating short tutorials that highlight core "
+"workflows that your package supports, that are run when your "
+"documentation is built, could also serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:290
+msgid "When to use which test type"
+msgstr ""
+
+#: ../../tests/test-types.md:292
+msgid ""
+"If you’re new to testing, start with unit tests. They are the simplest to"
+" write, fastest to run, and easiest to debug. As your package grows, you "
+"can then add integration and end-to-end tests where they add the most "
+"value."
+msgstr ""
+
+#: ../../tests/test-types.md:294
+msgid "Start by writing unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:296
+msgid "Are you testing a single function, method, or class in isolation?"
+msgstr ""
+
+#: ../../tests/test-types.md:298
+msgid "→ Yes: Write a [unit test](test-types.md#unit-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:300
+msgid "Example: Check that add_numbers(2, 3) returns 5"
+msgstr ""
+
+#: ../../tests/test-types.md:301
+msgid "Unit tests don’t rely on other parts of your code"
+msgstr ""
+
+#: ../../tests/test-types.md:302
+msgid "These tests form the foundation of your test suite"
+msgstr ""
+
+#: ../../tests/test-types.md:303
+msgid "If something breaks, unit tests make it easy to find where"
+msgstr ""
+
+#: ../../tests/test-types.md:305
+msgid "Add integration tests next"
+msgstr ""
+
+#: ../../tests/test-types.md:307
+msgid "Are you testing how multiple components work together?"
+msgstr ""
+
+#: ../../tests/test-types.md:309
+msgid "→ **Yes:** Write [integration tests](test-types.md#integration-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:311
+msgid "Example: Converting temperatures and then computing their average"
+msgstr ""
+
+#: ../../tests/test-types.md:312
+msgid "Integration tests assume individual pieces already work"
+msgstr ""
+
+#: ../../tests/test-types.md:313
+msgid "These tests verify that components interact correctly"
+msgstr ""
+
+#: ../../tests/test-types.md:315
+msgid "Use end-to-end tests for core workflows"
+msgstr ""
+
+#: ../../tests/test-types.md:317
+msgid "Are you testing a complete, realistic user workflow from start to finish?"
+msgstr ""
+
+#: ../../tests/test-types.md:319
+msgid ""
+"→ **Yes:** Use an [end-to-end test](test-types.md#end-to-end-functional-"
+"tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:321
+msgid "Example: Run a full data-processing workflow a user would follow"
+msgstr ""
+
+#: ../../tests/test-types.md:322
+msgid "These tests often mirror examples in your documentation"
+msgstr ""
+
+#: ../../tests/test-types.md:323
+msgid "Use them sparingly for the most important workflows."
+msgstr ""
+
+#: ../../tests/test-types.md:324
+msgid "Tutorials run during documentation builds can serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:326
+msgid "Comparing unit, integration, and end-to-end tests"
+msgstr ""
+
+#: ../../tests/test-types.md:328
+msgid ""
+"Unit tests, integration tests, and end-to-end tests have complementary "
+"advantages and disadvantages. The fine-grained nature of unit tests makes"
+" them well-suited for isolating where errors are occurring. However, unit"
+" tests are not useful for verifying that different sections of code work "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:334
+msgid ""
+"Integration and end-to-end tests verify that different portions of the "
+"program work together, but are less valuable for immediately isolating "
+"exactly where errors are occurring."
+msgstr ""
+
+#: ../../tests/test-types.md:338
+msgid "Tests don't have to be perfect"
+msgstr ""
+
+#: ../../tests/test-types.md:339
+msgid ""
+"It is important to note that you don't need to spend energy worrying "
+"about the specifics of test types. When you begin to work on your test "
+"suite, consider what your package does and how you may need to test parts"
+" of it. Being familiar with different test types provides a framework to "
+"help you think about writing tests and how they can complement each "
+"other."
+msgstr ""
+
+#: ../../tests/test-types.md:348
+msgid ""
+"Now that you understand test types, learn how to [write effective tests"
+"](write-tests) for your package. Then explore how to [run tests locally"
+"](run-tests) and in [continuous integration](tests-ci). You can also "
+"learn about tracking test coverage using tools like [CodeCov](code-cov)."
+msgstr ""
+
+#: ../../tests/tests-ci.md:1
+msgid "Run tests with Continuous Integration"
+msgstr ""
+
+#: ../../tests/tests-ci.md:3
+msgid ""
+"Running your [test suite locally](run-tests) is useful as you develop "
+"code and also test new features or changes to the code base. However, you"
+" also will want to setup Continuous Integration (CI) to run your tests "
+"online. CI allows you to run all of your tests in the cloud. While you "
+"may only be able to run tests locally on a specific operating system, "
+"using CI you can specify tests to run both on various versions of Python "
+"and across different operating systems."
+msgstr ""
+
+#: ../../tests/tests-ci.md:5
+msgid ""
+"CI can also be triggered for pull requests and pushes to your repository."
+" This means that every pull request that you, your maintainer team or a "
+"contributor submit, can be tested. In the end CI testing ensures your "
+"code continues to run as expected even as changes are made to the code "
+"base."
+msgstr ""
+
+#: ../../tests/tests-ci.md:9
+msgid ""
+"Learn more about Continuous Integration and how it can be used, here. "
+"(add link)"
+msgstr ""
+
+#: ../../tests/tests-ci.md:13
+msgid "CI & pull requests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:15
+msgid ""
+"CI is invaluable if you have outside people contributing to your "
+"software. You can setup CI to run on all pull requests submitted to your "
+"repository. CI can make your repository more friendly to new potential "
+"contributors. It allows users to contribute code, documentation fixes and"
+" more without having to create development environments, run tests and "
+"build documentation locally."
+msgstr ""
+
+#: ../../tests/tests-ci.md:22
+msgid "Example GitHub Actions that runs tests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:24
+msgid ""
+"Below is an example GitHub Actions that runs tests using nox across both "
+"Windows, Mac and Linux and on Python versions 3.9-3.11."
+msgstr ""
+
+#: ../../tests/tests-ci.md:28
+msgid ""
+"To work properly, this file should be located in a root directory of your"
+" GitHub repository:"
+msgstr ""
+
+#: ../../tests/write-tests.md:1
+msgid "Write tests for your Python package"
+msgstr ""
+
+#: ../../tests/write-tests.md:3
+msgid ""
+"**Writing code** that tests your package code, also known as test suites,"
+" is important for you as a maintainer, your users, and package "
+"contributors. Test suites consist of sets of functions, methods, and "
+"classes that are written with the intention of making sure a specific "
+"part of your code works as you expected it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:9
+msgid "Why write tests for your package?"
+msgstr ""
+
+#: ../../tests/write-tests.md:11
+msgid ""
+"Tests act as a safety net for code changes. They help you identify and "
+"fix bugs before they affect users. Tests also instill confidence that "
+"code changes from contributors won't break existing functionality."
+msgstr ""
+
+#: ../../tests/write-tests.md:15
+msgid "Writing tests for your Python package is important because:"
+msgstr ""
+
+#: ../../tests/write-tests.md:17
+msgid ""
+"**Catch mistakes:** Tests are a safety net. When you make changes or add "
+"new features to your package, tests can quickly tell you if you "
+"accidentally broke something that was working fine before."
+msgstr ""
+
+#: ../../tests/write-tests.md:20
+msgid ""
+"**Save time:** Imagine you have a magic button that can automatically "
+"check if your package is still working properly. Tests are like that "
+"magic button! They can run all those checks for you, saving you time."
+msgstr ""
+
+#: ../../tests/write-tests.md:23
+msgid ""
+"**Easier collaboration:** If you're working with others or have outside "
+"contributors, tests help everyone stay on the same page. Your tests "
+"explain how your package is supposed to work, making it easier for others"
+" to understand and contribute to your project."
+msgstr ""
+
+#: ../../tests/write-tests.md:27
+msgid ""
+"**Fearless refactoring:** Refactoring means making improvements to your "
+"code structure without changing its behavior. Tests empower you to make "
+"these changes; if you break something, test failures will let you know."
+msgstr ""
+
+#: ../../tests/write-tests.md:30
+msgid ""
+"**Documentation:** Tests serve as technical examples of how to use your "
+"package. This can be helpful for new technical contributors who want to "
+"contribute code to your package. They can look at your tests to "
+"understand how parts of your code functionality fits together."
+msgstr ""
+
+#: ../../tests/write-tests.md:34
+msgid ""
+"**Long-term ease of maintenance:** As your package evolves, tests ensure "
+"that your code continues to behave as expected, even as you make changes "
+"over time. Thus you are helping your future self when writing tests."
+msgstr ""
+
+#: ../../tests/write-tests.md:38
+msgid ""
+"**Easier pull request reviews:** By running your tests in a CI framework "
+"such as GitHub Actions, each time you or a contributor makes a change to "
+"your code-base, you can catch issues and things that may have changed in "
+"your code base. This ensures that your software behaves the way you "
+"expect it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:44
+msgid "Tests for user edge cases"
+msgstr ""
+
+#: ../../tests/write-tests.md:46
+msgid ""
+"Edge cases refer to unexpected or \"outlier\" ways that some users may "
+"use your package. Tests enable you to address various edge cases that "
+"could impair your package's functionality. For example, what occurs if a "
+"function expects a pandas `dataframe` but a user supplies a numpy "
+"`array`? Does your code gracefully handle this situation, providing clear"
+" feedback, or does it leave users frustrated by an unexplained failure?"
+msgstr ""
+
+#: ../../tests/write-tests.md:55
+msgid ""
+"For a good introduction to testing, see [this Software Carpentry "
+"lesson](https://swcarpentry.github.io/python-novice-"
+"inflammation/10-defensive.html)"
+msgstr ""
+
+#: ../../tests/write-tests.md:59
+msgid "Test examples"
+msgstr ""
+
+#: ../../tests/write-tests.md:62
+msgid "Let's say you have a Python function that adds two numbers together."
+msgstr ""
+
+#: ../../tests/write-tests.md:84
+msgid ""
+"A test to ensure that function runs as you might expect when provided "
+"with different numbers might look like this:"
+msgstr ""
+
+#: ../../tests/write-tests.md:103
+msgid "🧩🐍 How do you know what type of tests to write?"
+msgstr ""
+
+#: ../../tests/write-tests.md:105
+msgid "As you begin to write tests for your package, you should consider:"
+msgstr ""
+
+#: ../../tests/write-tests.md:107
+msgid ""
+"there are [three types of tests Test Types for Python Packages](test-"
+"types.md) that can help guide your development."
+msgstr ""
+
+#: ../../tests/write-tests.md:108
+msgid ""
+"your tests should consider how a user might use (and misuse!) your "
+"package."
+msgstr ""
+
+#: ../../tests/write-tests.md:111
+msgid ""
+"This section has been adapted from [a presentation by Nick "
+"Murphy](https://zenodo.org/records/8185113)."
+msgstr ""
+
+#: ../../tests/write-tests.md:115
+msgid "But, what should you be testing in your package? Below are a few examples:"
+msgstr ""
+
+#: ../../tests/write-tests.md:118
+msgid ""
+"**Test some typical cases:** Test that the package functions as you "
+"expect it to when users use it. For instance, if your package is supposed"
+" to add two numbers, test that the outcome value of adding those two "
+"numbers is correct."
+msgstr ""
+
+#: ../../tests/write-tests.md:123
+msgid ""
+"**Test special cases:** Sometimes there are special or outlier cases. For"
+" instance, if a function performs a specific calculation that may become "
+"problematic closer to the value of 0, test it with the input of both 0 "
+"and nearby values."
+msgstr ""
+
+#: ../../tests/write-tests.md:128
+msgid ""
+"**Test at and near expected boundaries:** If a function requires a value "
+"that is greater than or equal to 1, make sure that the function still "
+"works with the values 1 and 0.999, as well as 1.001 (values close to the "
+"constraint). Make sure that the function fails gracefully when given "
+"unexpected values and that the user can easily understand why it failed "
+"by providing a useful error message."
+msgstr ""
+
+#: ../../tests/write-tests.md:138
+msgid ""
+"Now that you understand what and why to test, explore the [three types of"
+" tests](test-types.md) (unit, integration, and end-to-end) to determine "
+"which style of tests best fits your package. Then, learn how to [run your"
+" tests locally](run-tests.md) and [in continuous integration](tests-"
+"ci.md). Finally, track your progress with [code coverage](code-cov.md) "
+"metrics."
+msgstr ""
diff --git a/locales/de/LC_MESSAGES/tutorials.po b/locales/de/LC_MESSAGES/tutorials.po
new file mode 100644
index 000000000..1d8112fe0
--- /dev/null
+++ b/locales/de/LC_MESSAGES/tutorials.po
@@ -0,0 +1,6885 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: de\n"
+"Language-Team: de \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tutorials/add-license-coc.md:6
+msgid "Add a `LICENSE` & `CODE_OF_CONDUCT` to your Python package"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:8
+msgid "In the [previous lesson](add-readme) you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:10
+msgid ""
+" "
+"Created a basic `README.md` file for your scientific Python package"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:12
+msgid ""
+" "
+"Learned about the core components that are useful to have in a `README` "
+"file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:14 ../../tutorials/add-readme.md:15
+msgid "Learning objectives"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:17 ../../tutorials/add-readme.md:17
+#: ../../tutorials/pyproject-toml.md:30
+msgid "In this lesson you will learn:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:19
+msgid ""
+"How to select a license and add a `LICENSE` file to your package "
+"repository, with a focus on the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:20
+msgid "How to add a `CODE_OF_CONDUCT` file to your package repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:21
+msgid ""
+"How you can use the Contributors Covenant website to add generic language"
+" as a starting place for your `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:24
+msgid "What is a license?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:26
+msgid ""
+"A license contains legal language about how users can use and reuse your "
+"software. To set the `LICENSE` for your project, you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:28
+msgid ""
+"Create a `LICENSE` file in your project directory that specifies the "
+"license that you choose for your package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:29
+msgid ""
+"Describe your choice of license in your `pyproject.toml` data where "
+"metadata are set."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:31
+msgid ""
+"By adding this metadata to your [pyproject.toml](pyproject-toml) file, "
+"the choice of license will be included in your package's metadata which "
+"is used to populate your package's PyPI landing page. The `LICENSE` file "
+"is also used in your GitHub repository's landing page interface, and "
+"makes its way into your distributions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:36
+msgid "What license should you use?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:38
+msgid ""
+"We suggest that you use a permissive license that accommodates the other "
+"most commonly used licenses in the scientific Python ecosystem (MIT[^mit]"
+" and BSD-3-Clause[^bsd3]). If you are unsure, use MIT given it's the "
+"generally recommended license on "
+"[choosealicense.com](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:41
+msgid "Licenses for the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:42
+msgid ""
+"[We discuss licenses for the scientific Python ecosystem in more detail "
+"here in our guidebook.](../documentation/repository-files/license-files)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:45
+msgid "Where should the `LICENSE` file live"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:47
+msgid ""
+"Your `LICENSE` file should be placed at the root of your package's "
+"repository. When you add the `LICENSE` at the root, GitHub will "
+"automagically discover it and provide users with a direct link to your "
+"`LICENSE` file within your GitHub repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:53
+msgid ""
+"Image showing the GitHub repository for SunPy an accepted pyOpenSci "
+"package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:55
+msgid ""
+"Notice at the top of the README portion of the GitHub landing page, there"
+" are three tabs directly linking to the `README` file which is visible, "
+"the `CODE_OF_CONDUCT` file and one that specifies the license that SunPy "
+"uses. These files are discovered by GitHub because they are placed in the"
+" root of the project directory using standard naming conventions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:62
+msgid "How to add a `LICENSE` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:64
+msgid "There are several ways to add a `LICENSE` file:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:66
+msgid ""
+"When you create a new repository on GitHub, it will ask you if you wish "
+"to add a `LICENSE` file at that time. If you select yes, it will create "
+"the file for you."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:67
+msgid ""
+"You can add a `LICENSE` through the GitHub gui following the [ instructions "
+"here](https://docs.github.com/en/communities/setting-up-your-project-for-"
+"healthy-contributions/adding-a-license-to-a-repository)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:68
+msgid "You can add the file manually as we are doing in this lesson."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:71
+msgid "If you completed the past lessons including"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:73
+msgid "[Making your code installable](create-python-package.md) and"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:74
+msgid "[publishing your package to PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:76
+msgid ""
+"then you already have a `LICENSE` file containing text for the MIT "
+"license in your Python package. Thus you can skip to the next section of "
+"this tutorial which walks you through adding a `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:78
+msgid ""
+"If you don't yet have a `LICENSE` file in your directory, then continue "
+"reading."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:81
+msgid "How to add a `LICENSE` to your package - the manual way"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:83
+msgid ""
+"If you don't already have a `LICENSE` file, and you are not yet using a "
+"platform such as GitHub or GitLab, then you can create a `LICENSE` file "
+"by"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:85
+msgid "Create a new file called `LICENSE`. If you are using shell you can type:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:92
+msgid "Go to [choosealicense.com](https://choosealicense.com/)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:93
+msgid "Select permissive license"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:94
+msgid ""
+"It will suggest that you use the [MIT "
+"license](https://choosealicense.com/licenses/mit/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:95
+msgid ""
+"Copy the license text that it provides into your `LICENSE` file that you "
+"created above."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:96
+msgid "Save your file. You're all done!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:98
+msgid "An overview of licenses in the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:101
+msgid ""
+"In the pyOpenSci [packaging guidebook](../documentation/repository-files"
+"/license-files), we provide an overview of licenses in the scientific "
+"Python ecosystem. We review why license files are important, which ones "
+"are most commonly used for scientific software and how to select the "
+"correct license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:103
+msgid ""
+"If you want a broad overview of why licenses are important for protecting"
+" open source software, [check out this blog post that overviews the legal"
+" side of things.](https://opensource.guide/legal/#just-give-me-the-tldr-"
+"on-what-i-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Instructions for adding a `LICENSE` file within the GitHub interface"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add license: new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:114
+msgid ""
+"When you create a new GitHub repository you can add a `LICENSE` file "
+"through the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:119
+msgid ""
+"Screenshot of the create new repository interface that GitHub provides. "
+"The elements of this are the owner and repository name for the new repo. "
+"Below that you can add a description of the repository. Below that you "
+"can set it to be public or private. At the bottom of the interface there "
+"is an Add a README checkbox where it will add a blank readme file for "
+"you. At the very bottom there is a line to add a .gitignore file and "
+"another to choose a license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:121
+msgid ""
+"Image showing the GitHub interface that allows you to add a `LICENSE` and"
+" `README` file when you create a new repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add `LICENSE`: Existing GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:127
+msgid ""
+"If you already have a GitHub repository for your package, then you can "
+"add a `LICENSE` using the GitHub interface by adding a new file to the "
+"repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:129
+msgid ""
+"Follow the instructions to select and add a license to your repository on"
+" the [GitHub LICENSE page](https://docs.github.com/en/communities"
+"/setting-up-your-project-for-healthy-contributions/adding-a-license-"
+"to-a-repository) ."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:130
+msgid ""
+"Once you have added your `LICENSE` file, be sure to sync your git local "
+"repository with the repository on GitHub.com. This means running `git "
+"pull` to update your local branch."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:133
+msgid ""
+"Image showing what the LICENSE file looks like in the GItHub interface. "
+"At the top you can see the actual license which in this image is BSD "
+"3-clause New or revised license. Then there is some text describing both "
+"what the license is and the associated permissions for that specific "
+"license. At the bottom of the image, the actual text for the license is "
+"shown in the LICENSE file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:135
+msgid ""
+"You can view a summary of the `LICENSE` chosen on your project's GitHub "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:142
+msgid ""
+"Now you know how to add a `LICENSE` to your project. Next, you'll learn "
+"about the `CODE_OF_CONDUCT.md` file and how to add it to your package "
+"directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:147
+msgid "What is a code of conduct file?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:149
+#, python-brace-format
+msgid ""
+"A `CODE_OF_CONDUCT` file is a {term}`Code of conduct` used to establish "
+"guidelines for how people in your community interact."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:152
+msgid ""
+"This file is critical to supporting your community as it grows. The "
+"`CODE_OF_CONDUCT`:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:155
+msgid ""
+"Establishes guidelines for how users and contributors interact with each "
+"other and you in your software repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:156
+msgid "Identifies negative behaviors that you don't want in your interactions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:158
+msgid ""
+"You can use your code of conduct as a tool that can be referenced when "
+"moderating challenging conversations."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:160
+msgid "What to put in your `CODE_OF_CONDUCT` file"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:162
+msgid ""
+"If you are unsure of what language to add to your `CODE_OF_CONDUCT` file,"
+" we suggest that you adopt the [contributor covenant "
+"language](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/) as a starting place."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid "Contributor Covenant"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:167
+msgid ""
+"The `CODE_OF_CONDUCT.md` should be placed at the root of your project "
+"directory, similar to the `LICENSE` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:169
+msgid "How to add a `CODE_OF_CONDUCT` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:171
+msgid ""
+"Add a `CODE_OF_CONDUCT.md` file to the root of your repository if it "
+"doesn't already exist."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:177
+msgid ""
+"Visit the [contributor covenant website](https://www.contributor-"
+"covenant.org/) and add [the markdown version of their code of "
+"conduct](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/code_of_conduct.md) to your "
+"`CODE_OF_CONDUCT.md` file. Be sure to fill in any placeholder "
+"information. Read the text closely to ensure you both understand it and "
+"also agree with its contents!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:179
+msgid "That's it - you've now added a code of conduct to your package directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:181
+msgid "Additional Code of Conduct resources"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:184
+msgid ""
+"[ Guide: `CODE_OF_CONDUCT.md` "
+"files](https://docs.github.com/en/communities/setting-up-your-project-"
+"for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:185
+msgid ""
+"[pyOpenSci package guide `CODE_OF_CONDUCT.md` "
+"overview](https://www.pyopensci.org/python-package-guide/documentation"
+"/repository-files/code-of-conduct-file.html)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:188 ../../tutorials/add-readme.md:240
+#: ../../tutorials/publish-conda-forge.md:475
+#: ../../tutorials/pyproject-toml.md:699
+msgid " Wrap up"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:190
+msgid "In this lesson and the [last lesson](add-readme), you have added a:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:192
+msgid "`README` file;"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:193
+msgid "`LICENSE` file and a"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:194
+msgid "`CODE_OF_CONDUCT` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:196
+msgid ""
+"These are fundamental files needed for every scientific Python package "
+"repository. These files help users understand how to use your package and"
+" interact with package maintainers."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:200
+#: ../../tutorials/create-python-package.md:455
+msgid "In the upcoming lessons, you will:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:202
+msgid ""
+"[Add more metadata to your `pyproject.toml` file](pyproject-toml) to "
+"support building and publishing your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:203
+msgid ""
+"Publish a new version of your Python package to the test PyPI to preview "
+"the updated metadata landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:208
+#: ../../tutorials/create-python-package.md:550
+#: ../../tutorials/publish-conda-forge.md:487
+#: ../../tutorials/publish-pypi.md:419
+#: ../../tutorials/trusted-publishing.md:347
+msgid "Footnotes"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:210
+msgid "https://opensource.org/license/mit/"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:211
+msgid "https://opensource.org/license/bsd-3-clause/"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:6
+#, python-brace-format
+msgid "Add a {term}`README` file to your {term}`Python package`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:8
+msgid "In the previous lessons you learned:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:10
+msgid "[What a Python package is](intro.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:11
+msgid "[How to make your code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:12
+msgid "[How to publish your package to (test) PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:13
+msgid "[How to publish your package to conda-forge](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:19
+msgid "How to add a **README.md** file to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:20
+msgid "What the core elements of a **README.md** file are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:23
+msgid "What is a README file?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:25
+#, python-brace-format
+msgid ""
+"The `README.md` file is the project's {term}`README` and is located at "
+"the root of your project directory. It helps a user understand:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:29
+msgid "You package's name"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:30
+msgid ""
+"What the package does. Your README file should clearly state the "
+"problem(s) that your software is designed to solve and its target "
+"audience."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:31
+msgid "The current development \"state\" of the package (through badges)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:32
+msgid "How to get started with using your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:33
+msgid "How to contribute to your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:34
+msgid "How to cite your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:36
+msgid ""
+"Your **README.md** file is important as it is often the first thing that "
+"someone sees before they install your package. The README file is also "
+"used to populate your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:38
+msgid ""
+"Note that there is no specific content structure for README files. "
+"However, this tutorial outlines the sections that we suggest that you "
+"include in your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:42
+msgid "Create a README.md file for your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:44
+msgid "It's time to add a `README.md` file to your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:46
+msgid "Step 0: Create a README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:47
+msgid ""
+"To get started, if you don't already have a README.md file in your "
+"project directory, create one."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:50
+msgid "If you created your project directory from"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:52
+msgid "a GitHub repository online"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:53
+msgid "using `hatch init`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:55
+msgid "Then you may already have a README.MD file in your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:61
+msgid "Step 1: Add the name of your package as the README title"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:63
+msgid "At the top of the `README.md` file, add the name of your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:65
+msgid ""
+"If you are using markdown it should be a header 1 (H1) tag which is "
+"denoted with a single `#` sign."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:67
+msgid "`# Package-title-here`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:69
+msgid "Step 2: add badges to the top of your README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:71
+msgid ""
+"It's common for maintainers to add badges to the top of their README "
+"files. Badges allow you and your package users to track things like:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:73
+msgid "Broken documentation and test builds."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:74
+msgid "Versions of your package that are on PyPI and conda."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:75
+msgid ""
+"Whether your package has been reviewed and vetted by an organization such"
+" as pyOpenSci and/or JOSS."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:77
+msgid ""
+"If you have already published your package to pypi.org you can use "
+"[shields.io to create a package version badge](https://shields.io/badges"
+"/py-pi-version). This badge will dynamically update as you release new "
+"versions of your package to PyPI."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:79
+msgid ""
+"If not, you can leave the top empty for now and add badges to your README"
+" at a later point as they make sense."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:81
+msgid "Step 3: Add a description of what your package does"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:83
+msgid ""
+"Below the badges (if you have them), add a section of text that provides "
+"an easy-to-understand overview of what your package does."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:87
+msgid "Keep this section short."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:88
+msgid "Try to avoid jargon."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:89
+msgid ""
+"Define technical terms that you use to make the description accessible to"
+" more people."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:91
+msgid ""
+"Remember that the more people understand what your package does, the more"
+" people will use it."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:93
+msgid "Step 4: Add package installation instructions"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:95
+msgid "Next, add instructions that tell users how to install your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:97
+#, python-brace-format
+msgid ""
+"For example, can they use {term}`pip` to install your package? `python -m"
+" pip install packagename`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:100
+msgid "or conda?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:102
+msgid "`conda install -c conda-forge packagename`."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:104
+msgid ""
+"If you haven't yet published your package to pypi.org then you can skip "
+"this section and come back and add these instructions later."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:108
+msgid "Step 5: Any additional setup"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:110
+msgid ""
+"In some cases, your package users may need to manually install other "
+"tools in order to use your package. If that is the case, be sure to add a"
+" section on additional setup to your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:115
+msgid ""
+"Here, briefly document (or link to documentation for) any additional "
+"setup that is required to use your package. This might include:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:119
+msgid "authentication information, if it is applicable to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:120
+msgid "additional tool installations, such as GDAL."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:123
+msgid ""
+"Many packages won't need an additional setup section in their README. In "
+"that case you can always skip this section."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:128
+msgid "Step 6: Add a get started section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:130
+msgid ""
+"Next add a get-started section. Within this section, add a small code "
+"example that demonstrates importing and using some of the functionality "
+"in your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:133
+msgid "Provide a fully functional code snippet if possible"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:136
+msgid ""
+"It is important to try to make the code examples that you provide your "
+"users as useful as possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:138
+msgid ""
+"Be sure to provide a copy/paste code example that will work as-is when "
+"pasted into a Jupyter Notebook or .py file if that is possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:140
+msgid ""
+"If there are tokens and other steps needed to run your package, be sure "
+"to be clear about what those steps are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:143
+msgid "For the pyosPackage, a short get started demo might look like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:151
+msgid ""
+"Or it could simply be a link to a getting started tutorial that you have "
+"created. If you don't have this yet, you can leave it empty for the time "
+"being."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:154
+msgid ""
+"This would also be a great place to add links to tutorials that help "
+"users understand how to use your package for common workflows."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:159
+msgid "Step 7: Community section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:161
+msgid ""
+"The community section of your README file is a place to include "
+"information for users who may want to engage with your project. This "
+"engagement will likely happen on a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:163
+msgid ""
+"In the community section, you will add links to your contributing guide "
+"and `CODE_OF_CONDUCT.md`. You will create a code of conduct file in the "
+"[next lesson](add-license-coc)."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:167
+msgid ""
+"As your package grows you may also have a link to a development guide "
+"that contributors and your maintainer team will follow. The development "
+"guide outlines how to perform maintenance tasks such as:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:170
+msgid "running tests"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:171
+msgid "making package releases"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:172
+msgid "building documentation"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:173
+msgid "and more."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:177
+msgid "Step 8: Citation information"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:179
+msgid ""
+"Finally it is important to let users know how to cite your package. You "
+"can communicate citation information in a few different ways."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:182
+msgid ""
+"You can use a tool such as zenodo to create a DOI and associated citation"
+" information for your package if it is hosted on a platform such as "
+"GitHub. [Check out this short tutorial that covers setting that "
+"up.](https://coderefinery.github.io/github-without-command-line/doi/)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:186
+msgid ""
+"Alternatively if you send your package through a peer review process such"
+" as the [one lead by pyOpenSci](https://www.pyopensci.org/about-peer-"
+"review/index.html). After being accepted by pyOpenSci, if your package is"
+" in scope, you can be accepted by the Journal of Open Source Software and"
+" get a cross-ref DOI through [our partnership with the Journal of Open "
+"Source Software.](https://www.pyopensci.org/about-peer-review/index.html)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:190
+msgid "The finished README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:192
+msgid "Your finished `README.md` file should look something like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:242
+msgid ""
+"It's important to consider the information that a new user or contributor"
+" might need when creating your `README.md` file. While there is no "
+"perfect template, above is a set of recommendations as you are just "
+"getting started. You may find the need for other elements to be added to "
+"this file as you further develop your package and as a community begins "
+"to use your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:248
+msgid ""
+"In the [next lesson](add-license-coc.md), you will add a LICENSE file to "
+"your Python package. A license file is critical as it tells users how "
+"they legally can (and can't) use your package. It also:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:252
+msgid "Builds trust with your users"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:253
+msgid "Discourages misuse of your package and associated code"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:63
+msgid "Command Line Reference Guide"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:9
+msgid ""
+"**What these tables are:** These tables summarize the command line inputs"
+" (e.g., `pipx install hatch`, `hatch build` or `python -m build`) "
+"necessary to complete all steps in the package creation process, from "
+"installing [Hatch](get-to-know-hatch) to publishing the package on [PyPI"
+"](publish-pypi) and conda-forge."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:14
+#, python-brace-format
+msgid ""
+"**What these tables are not:** These tables do not cover the manual or "
+"non-automated steps (e.g., create a PyPI account, create a {term}`API "
+"token`) you have to complete throughout the package creation process."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:18
+msgid ""
+"**Operating system note:** The current iteration of this guide has been "
+"tested on the Windows OS only. Many commands are Windows-specific. OS-"
+"specific commands are indicated with parentheses after the description of"
+" the command, e.g., [COMMAND_DESCRIPTION] (Windows). Corresponding "
+"commands for macOS and Linux will be added in the future."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:21
+msgid "Environment Setup"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:43
+msgid "Package Development"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:62
+msgid "Package Publishing"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:81
+msgid "Versions and Environments"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:7
+msgid "Create a pure Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:9
+#: ../../tutorials/develop-python-package-hatch.md:9
+msgid "About this lesson"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:13
+#, python-brace-format
+msgid ""
+"This lesson uses the pyOpenSci Python package copier template to create a"
+" {term}`Python package` quickly. Your package will be installable both "
+"locally and remotely from a website such as GitHub (or GitLab) into a "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:18
+#: ../../tutorials/setup-py-to-pyproject-toml.md:23
+msgid "In this lesson, you will learn:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:20
+msgid ""
+"How to make your code installable into any Python environment, both "
+"locally and from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:21
+msgid ""
+"How to update a [pyproject.toml file](pyproject-toml), which contains the"
+" metadata needed to build, install, and publish your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:23
+#, python-brace-format
+msgid ""
+"How to declare a {term}`Build backend` which will be used to [build"
+"](build-package) and install your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:25
+msgid "How to install your package in editable mode for interactive development"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:28
+msgid "**What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:30
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have "
+"[Copier](https://copier.readthedocs.io/en/stable/) and [Hatch installed"
+"](get-to-know-hatch) to complete the lesson successfully."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:35
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the Carpentries shell lesson[^shell-lesson]. Windows users will"
+" likely need to configure a tool such as "
+"[gitbash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:41
+msgid ""
+"This diagram has two smaller boxes with arrows pointing to the right to a"
+" Python environment. The small boxes read your-package and pip install "
+"package. The environment box on the right reads - your Python "
+"environment. It them lists your-package along with a few other core "
+"packages such as Matplotlib, NumPy, Pandas, Xarray and GeoPandas."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:43
+msgid ""
+"In a [previous lesson, you learned what a Python package is](intro). "
+"Creating a Python package allows you to install your code into any Python"
+" environment on your computer. You can then import it into workflows in "
+"the same way that you might import a package such as Pandas or GeoPandas."
+" If you push your code to GitHub or GitLab, you can also install it "
+"directly from there. [Scroll to the bottom of the page to learn more "
+"about the basic elements of a Python package.](package-overview)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:49
+msgid "Create your Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:51
+msgid ""
+"Below, you will create a pure Python package using the [pyOpenSci copier "
+"template](https://github.com/pyOpenSci/pyos-package-template). Our "
+"template uses Hatch as the default packaging tool. At the bottom of this "
+"lesson, you'll learn more about the basics of the Python package "
+"directory structure, and associated key files (`__init__.py` and "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:53
+msgid "Step 1: Set Up the Package Directory Structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:55
+msgid "Open your shell or preferred terminal."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:56
+msgid ""
+"Use the shell `cd` command to navigate in your shell to the location "
+"where you'd like your package to live. Our template will create the "
+"package directory structure for you"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:57
+msgid "Choose a name for your package. The name should:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:58
+msgid "Have no spaces (*Required*)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:59
+msgid ""
+"Use all lowercase characters (*Recommended*). For this tutorial, we will "
+"use `pyospackage`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:60
+msgid ""
+"Only use letters and the characters _ or - in the name. This means that "
+"the name `pyos*package` is not an acceptable name. However, the names "
+"`pyos_package` or `pyos-package` are both OK."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:62
+msgid ""
+"In your terminal, **run the command below**. This will begin a series of "
+"prompts that will ask you questions and help you to customize your Python"
+" package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:68
+msgid ""
+"After running the command above, the template will walk you through a "
+"series of questions."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:70
+msgid ""
+"Note that when you reach the prompt \"Do you want to answer one more "
+"question, and skip the rest, using the default values?\" you can choose "
+"Yes, but with a minimal setup to create the most basic version"
+" of your package that contains documentation, tests and a example module "
+"for you to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:72
+msgid ""
+"After this question, the template will ask you for your preferred GitHub "
+"username and will then create a package with basic tests, documentation, "
+"and GitHub configuration setup for you."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:93
+msgid ""
+"The template will then begin to copy files into the directory that used "
+"above. (`.` means current working directory.)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:101
+msgid "The final package structure will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md
+msgid "A full package with tests, docs, and GitHub infrastructure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:119
+msgid ""
+"If you use the \"bells and whistles\" default option when working through"
+" the template prompts, our template will create a complete package setup "
+"with GitHub CI actions, typing, tests, environments, and more using "
+"Hatch. If you customize the entire package, then you can select what "
+"platform you wish to host it on (GitHub vs GitLab), whether you want "
+"typing, what documentation engine you want to use, and more."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:123
+msgid "The resulting package directory looks like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:146
+msgid "The default tools that your package uses are:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:148
+msgid ""
+"[Sphinx](https://www.pyopensci.org/python-package-guide/documentation"
+"/hosting-tools/sphinx-python-package-documentation-tools.html) with the "
+"PyData Sphinx Theme for documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:149
+msgid "pytest for testing"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:150
+msgid "Hatch for environment setup"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:152
+msgid ""
+"**Full customization** If you want to customize any elements of your "
+"package setup, choose `No, I want to fully customize the template.`. "
+"This will allow you to select:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:155
+msgid "Sphinx vs [MkDocs](https://www.mkdocs.org/) vs no documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:156
+msgid "GitHub vs GitLab"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:157
+msgid "VCS versioning"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:158
+msgid "and more"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:161
+msgid "Step 2: Explore the existing module in your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:163
+#, python-brace-format
+msgid ""
+"A {term}`Module` refers to a `.py` file containing the code that you want"
+" your package to access and run. Within the `pyospackage` subdirectory, "
+"you have an `example.py` module that you can use to test out your package"
+" quickly."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:167
+msgid "Notice that the code in the example.py module, has a few features:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:169
+msgid "It has a [numpy-style docstring](numpy-docstring)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:170
+msgid "It uses [typing](type-hints)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:171
+msgid ""
+"At the top of the module, there is a docstring explaining what the module"
+" does."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:173
+msgid ""
+"Python supports different docstring formats. The most popular formats for"
+" documenting Python objects are NumPy Style Docstring[^numpydoc], Google "
+"Style Docstring[^googledoc], and the Epytext Style "
+"Docstrings[^epytextdoc]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:175
+msgid "**pyOpenSci recommends using the NumPy Docstring convention.**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:177
+msgid ""
+"[Learn more about docstrings here](api-docstrings) for an overview of "
+"both topics."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:206
+msgid "Python modules and the `__init__.py` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:210
+msgid "The word module refers to a `.py` file containing Python code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:212
+msgid ""
+"The `__init__.py` allows Python to recognize that a directory contains "
+"at least one module that may be imported and used in your code. A package"
+" can have multiple modules[^python-modules]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:217
+msgid "Step 3: Optional -- Add code to your module"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:219
+msgid ""
+"If you want, add a second function to the `example.py` module. It can be "
+"a simple function. For example, write a second function that multiplies "
+"numbers."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:222
+msgid "Step 4: Check out the metadata in your `pyproject.toml` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:224
+msgid ""
+"A [pyproject.toml](pyproject-toml) file stores metadata that provides "
+"instructions to various tools interacting with it, including [Hatch](get-"
+"to-know-hatch), which will build your package. You can also specify "
+"metadata for your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:229
+msgid ""
+"You will learn more about the `pyproject.toml` format in the [next lesson"
+" when you add additional metadata/information to this file.](pyproject-"
+"toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:232
+msgid ""
+"The metadata in your generated `pyproject.toml` is already setup for you "
+"using the information you provided the copier template above."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:234
+msgid "Brief overview of the TOML file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:237
+msgid ""
+"[The TOML format](https://toml.io/en/) consists of tables and variables. "
+"Tables are sections of information denoted by square brackets:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:239
+msgid "`[this-is-a-table]`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:241
+msgid ""
+"Tables can contain variables within them defined by a variable name and "
+"an `=` sign. For instance, a `build-system` table most often holds two "
+"(2) variables:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:244
+msgid ""
+"`requires = `, which tells a build tool what tools it needs to install "
+"prior to building your package. In this case "
+"[hatchling](https://pypi.org/project/hatchling/)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:246
+msgid ""
+"`build-backend = `, which is used to define the specific build-backend "
+"name, (in this example we are using `hatchling.build`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:255
+msgid ""
+"TOML organizes data structures, defining relationships within a "
+"configuration file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:258
+msgid "[Learn more about the pyproject.toml format here.](pyprojecttoml-metadata)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:261
+msgid ""
+"Open up the `pyproject.toml` file that Hatch created in your favorite "
+"text editor. It should look something like the example below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:262
+msgid ""
+"Make sure the package version, package name, and author name look "
+"correct. The email is optional."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:300
+msgid ""
+"At the bottom of the template-generated `pyproject.toml` file, you will "
+"see a section that defines Hatch environments. We will cover Hatch "
+"environments in a later lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:302
+msgid "The bare minimum needed in a pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:305
+msgid ""
+"The core information that you need in a `pyproject.toml` file to publish "
+"on PyPI is your **package's name** and the **version**. However, we "
+"suggest that you flesh out your metadata early on in the `pyproject.toml`"
+" file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:307
+msgid ""
+"Once you have your project metadata in the `pyproject.toml` file, you "
+"will rarely update it."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:311
+msgid "Step 5: Install your package locally"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:313
+msgid "At this point, you should have:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:315
+msgid "A project directory structure with a `pyproject.toml` file at the root"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:316
+msgid "A package directory containing an empty `__init__.py` file and"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:317
+msgid "At least one Python module (e.g. `example.py`)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:319
+msgid "You are now ready to install (and build) your Python package!"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:321
+msgid ""
+"While you can do this using Hatch, we will use pip for this lesson, so "
+"you can see how to install your tool into your preferred environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:323
+msgid ""
+"First, open your preferred shell (Windows users may use something like "
+"GitBash) and `cd` into your project directory if you are not already "
+"there."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:324
+msgid "Activate the Python environment that you wish to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:325
+msgid "Run `python -m pip install -e .`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:327
+#: ../../tutorials/create-python-package.md:560
+#: ../../tutorials/create-python-package.md:567
+#: ../../tutorials/get-to-know-hatch.md:199 ../../tutorials/intro.md:246
+#: ../../tutorials/publish-pypi.md:9 ../../tutorials/publish-pypi.md:185
+#: ../../tutorials/publish-pypi.md:358 ../../tutorials/pyproject-toml.md:744
+msgid "Todo"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:328
+msgid "Add this back in when the lesson is published"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:329
+msgid ""
+"Activate the Python environment that you wish to use. If you need help "
+"with working with virtual environments check out this lesson (add link)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:355
+msgid "What does `python -m pip install -e .` do?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:358
+msgid ""
+"`python -m pip install -e .` installs your package into the current "
+"active Python environment in **editable mode** (`-e`). Installing your "
+"package in editable mode, allows you to work on your code and then test "
+"the updates interactively in your favorite Python interface. One "
+"important caveat of editable mode is that every time you update your "
+"code, you need to restart Python."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:363
+msgid ""
+"If you wish to install the package regularly (not in editable mode) you "
+"can use:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:366
+msgid "`python -m pip install . `"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:368
+msgid "**Using `python -m` when calling `pip`**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:370
+msgid ""
+"Above, you use`python -m` to call the version of pip installed into your "
+"current active environment. `python -m` is important to ensure that you "
+"are calling the version of pip installed in your current environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:374
+msgid ""
+"IMPORTANT: pip can also be used to install packages from PyPI. However, "
+"in this case, you are telling pip to install your package from a local "
+"folder by using the `.`. You could also specify a path to the project "
+"directory on your computer instead of the `.` which tells pip to use the "
+"current working directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:377
+msgid "Look for pyospackage in your environment"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:379
+msgid ""
+"Once you have installed your package, you can view it in your current "
+"environment. If you are using `venv` or `conda`, `pip` list will return a"
+" list of packages in the current active environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:383
+msgid ""
+"Note that because `pyospackage` is installed in editable mode (`-e`), pip"
+" will show you the directory path to your project's code"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:411
+msgid "Step 6: Test out your new package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:413
+msgid ""
+"After installing your package, type “python” at the command prompt in "
+"your chosen terminal to start a Python session in your active Python "
+"environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:416
+msgid "You can now import your package and access the `add_numbers` function."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:428
+msgid "Installing packages from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:430
+msgid ""
+"If you wish to share your code without publishing to PyPI you can always "
+"install packages directly from GitHub using the syntax:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:437
+msgid "To make your package GitHub installable, you can:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:439
+msgid "Create a new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:440
+msgid ""
+"Push the contents of the project directory that you created above, to "
+"GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:441
+msgid ""
+"Finally install the package from GitHub using the command above. When you"
+" use the command above, don't forget to substitute the user, repo, and "
+"branch_or_tag with your specific values."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:443
+msgid ""
+"For instance below you install the pyospackage from the main branch of "
+"the pyOpenSci repository."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:446
+msgid "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:450
+msgid "Congratulations! You created your first Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:452
+msgid ""
+"You have now created a Python package that you can install into any "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:457
+msgid ""
+"Add a [README file](add-readme.md) and [LICENSE](add-license-coc.md) to "
+"your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:458
+msgid ""
+"[Add more metadata to your `pyproject.toml`](pyproject-toml.md) file to "
+"support PyPI publication."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:459
+msgid ""
+"[Learn how to build your package distribution](publish-pypi) files "
+"(**sdist** and **wheel**) and publish to **test PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:460
+msgid ""
+"Finally you will learn how to [publish to **conda-forge**](publish-conda-"
+"forge) from **PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:464
+msgid "About the Python package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:466
+msgid ""
+"To make your Python code installable you need to create a specific "
+"directory structure with the following elements:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:468
+msgid "A `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:469
+msgid "A specific directory structure."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:470
+msgid "Some code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:471
+msgid "An `__init__.py` file in your code directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:473
+msgid "The directory structure you'll create in this lesson will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:488
+msgid ""
+"Diagram showing the basic steps to creating an installable package. There"
+" are 4 boxes with arrows pointing towards the right. The boxes read, your"
+" code, create package structure, add metadata to pyproject.toml and pip "
+"install package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:490
+msgid ""
+"Once you have the basic items of a Python package (code, metadata and a "
+"file structure), you can `pip install` your package into any Python "
+"environment on your computer."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:493
+msgid "About the basic package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:495
+msgid "Notice a few things about the above layout:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:497
+msgid ""
+"Your package code lives within a `src/packagename` directory. We suggest "
+"that you use `src` (short for **source code**) directory as it [ensures "
+"that you are running tests on the installed version of your "
+"code](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/python-package-structure.html#the-src-layout-and-testing)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:498
+msgid ""
+"Within the `src` directory you have a package directory called "
+"`pyospackage`. Use the name of your package for that directory name. This"
+" will be the name for importing your package in Python code once "
+"installed."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:499
+msgid ""
+"In your package directory, you have an `__init__.py` file and all of your"
+" Python modules. You will learn more about the `__init__.py` file below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:500
+msgid "The `pyproject.toml` file lives at the root directory of your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:501
+msgid ""
+"The name of the root directory for the package is **pyospackage** which "
+"is the name of the package. This is not a requirement but you will often "
+"see that the GitHub / GitLab repository and the root directory name are "
+"the same as the package name."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:503
+msgid "What is an `__init__.py` file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:505
+msgid ""
+"The `__init__.py` file tells Python that a directory should be treated as"
+" a Python package. As such, a directory with an `__init__.py` file can be"
+" imported directly into Python. The `__init__.py` file does not need to "
+"contain any code in order for Python to recognize it; it can be empty."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:509
+msgid ""
+"For example, following the file structure example above which has an "
+"`__init__.py` file within it, you can run:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:515
+#: ../../tutorials/pyproject-toml.md:56
+msgid "What is a pyproject.toml file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:517
+msgid "The **pyproject.toml** file is:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:519
+msgid ""
+"Where you define your project's metadata (including its name, authors, "
+"license, etc)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:520
+msgid "Where you define dependencies (the packages that it depends on)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:521
+msgid ""
+"Used to specify and configure what build backend you want to use to "
+"[build your package](../package-structure-code/python-package-"
+"distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:523
+msgid ""
+"After the `__init__.py` and `pyproject.toml` files have been added, your "
+"package can be built and distributed as an installable Python package "
+"using tools such as pip. Note that the `pyproject.toml` file needs to "
+"have a few basic items defined for the package to be installable "
+"including:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:529
+msgid "The `build-backend` that you want to use,"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:530
+msgid "The project `name` and `version`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:532
+msgid "Why the pyproject.toml file is important"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:535
+msgid ""
+"The `pyproject.toml` file replaces some of the functionality of both the "
+"`setup.py` file and `setup.cfg` files. If you try to pip install a "
+"package with no `pyproject.toml`, you will get the following error:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:545
+msgid ""
+"If your project already has a `setup.py` file, Hatch can be used to "
+"automatically create a `pyproject.toml`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:546
+msgid ""
+"See [Using Hatch to Migrate setup.py to a pyproject.toml](setup-py-to-"
+"pyproject-toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:561
+msgid ""
+"Is it clear where to add commands? Bash vs. Python console Bash vs. Zsh "
+"is different"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:563
+msgid ""
+"ADD: note about what makes something \"package worthy\", with a common "
+"misconception being that a package should be production-ready code that's"
+" valuable to a broad audience. This may not be a pervasive misconception "
+"in Python, but a quick break-out with an explanation of what a package "
+"can consist of would be helpful."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:564
+msgid "They can use a codespace to complete this lesson too."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:568
+msgid ""
+"When this lesson exists, uncomment this admonition You will learn how to "
+"automate defining a package version using git tags in the version and "
+"release your package lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:552
+msgid "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:556
+msgid "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:555
+msgid "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:557
+msgid "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:554
+msgid ""
+"[Python module "
+"docs](https://docs.python.org/3/tutorial/modules.html#packages)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:7
+msgid "Use Hatch environments with your pure Python package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:13
+msgid ""
+"[In a previous lesson](create-pure-python-package), you learned how to "
+"create a Python package using the pyOpenSci copier template. In this "
+"lesson, you'll learn how to manage and use the Hatch environments set up "
+"by de **What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:16
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have created a package using "
+"our pyOpenSci copier template. You should also have [Hatch installed"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:20
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the [Carpentries shell lesson](https://swcarpentry.github.io"
+"/shell-novice/). Windows users will likely need to configure a tool such "
+"as [GitBash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:23
+msgid ""
+"Welcome to your shiny new package! This page will help you get started "
+"with using [Hatch](get-to-know-hatch) to run tests, build and check your "
+"package, and build your documentation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:27
+#, python-brace-format
+msgid ""
+"To begin, have a look at the [pyproject.toml](pyproject-toml) file in "
+"your package directory. This file contains the configuration for your "
+"package and is written using {term}`TOML` format. Here's the TL&DR:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:31
+msgid "Each `[]` section in the toml file is called a table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:32
+msgid "You can nest tables with double brackets like this`[[]]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:33
+msgid ""
+"Tables contain information about a certain thing that you want to "
+"configure."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:36
+msgid ""
+"You can configure Hatch to use UV by default for environment management. "
+"UV is a package manager built in Rust. It is fast and will significantly "
+"speed up environment creation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:38
+msgid ""
+"To use UV with Hatch, configure Hatch in the \"tools\" section of your "
+"`pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:46
+msgid ""
+"Using Hatch for developing, building, and maintaining your pure Python "
+"package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:48
+#, python-brace-format
+msgid ""
+"In the pyOpenSci Python package template, we have set up {term}`Hatch "
+"environment` definitions. You will notice at the bottom of the file, a "
+"[hatch environment](https://hatch.pypa.io/1.13/environment/) section, "
+"that looks like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:59
+msgid ""
+"Hatch allows you to configure and run environments and scripts similar to"
+" a workflow tool like tox or nox."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:62
+msgid ""
+"Hatch defaults to using `venv` to manage environments. However, you can "
+"configure it to use other environment tools, such as conda or mamba."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:64
+msgid ""
+"[Read the hatch documentation to learn more about environments. "
+"](https://hatch.pypa.io/1.13/tutorials/environment/basic-usage/)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:68
+msgid ""
+"Below is the Hatch environment used to build and test your package. "
+"Anytime you see: `tool.hatch.envs.test`, it tells Hatch:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:71
+msgid ""
+"\"Hey, Hatch, this is the definition for an environment.`test` is the "
+"name of the environment that I want you to create.\""
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:73
+msgid "So `tool.hatch.envs.build` will create an environment called `build`."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:75
+msgid ""
+"Below the environment \"declaration,\" you can see the definition of what"
+" should be in that environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:77
+msgid "A Hatch environment to build your package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:79
+#, python-brace-format
+msgid ""
+"Below is a Hatch environment definition that you will find in your new "
+"project's [pyproject.toml](pyproject-toml) file. It is set up to build "
+"your package's {term}`Distribution files` ({term}`Source distribution "
+"(sdist)` and {term}`Wheel (.whl)`)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:84
+#, python-brace-format
+msgid ""
+"Notice that the environment definition declares two {term}`Dependencies`:"
+" `pip` and `twine`, which the environment needs to run successfully. This"
+" declaration is similar to declaring dependencies for your package at the"
+" top of your [pyproject.toml](pyproject-toml)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:99
+msgid "Hatch will install your package in editable mode by default"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:100
+msgid ""
+"Notice the `detached = True` flag at the bottom of the environment. By "
+"default, hatch will install your package in editable mode into any "
+"environment it creates. `detached=True` tells it not to install your "
+"package into the environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:104
+msgid "Hatch scripts"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:106
+#, python-brace-format
+msgid ""
+"Hatch supports defining {term}`Script (Hatch)` commands that run in "
+"specific Hatch environments."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:109
+msgid ""
+"Above, you have defined a new environment called 'build' that Hatch will "
+"create as a virtual environment (venv). Because `detached = True` in that"
+" environment, Hatch won't install your package into it."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:111
+msgid ""
+"You can then use that environment to run \"scripts\". The definition "
+"below tells Hatch to run the following scripts in the build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:113
+msgid "`[tool.hatch.envs.build.scripts]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:115
+msgid "You define this `scripts` to run using the following syntax, where:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:117
+msgid "`tool.hatch`: Alerts Hatch that this table is for Hatch to use"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:118
+msgid "`envs.build`: Use the defined build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:119
+msgid ""
+"`scripts`: Define what scripts to run. In this case, Hatch will run shell"
+" scripts."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:122
+msgid ""
+"Below is the `build.scripts` table that defines 3 shell commands to be "
+"run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:124
+msgid "`pip check` # verifies your dependencies"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:125
+msgid "`hatch build --clean` # build your packages distribution files."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:126
+msgid ""
+"`twine check dist/*` # use twine to check that your package's sdist "
+"(source distribution) is ok."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:140
+msgid ""
+"Hatch, by default, will install your package in editable mode into any "
+"virtual environment (venv) that it creates. If `detached=True` is set, "
+"then it will skip that step."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:143
+msgid "Running the build script"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:145
+msgid "You can run the build script and build your package like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:147
+msgid "`hatch run build:check`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:149
+msgid ""
+"This step updates the build environment and then builds and checks the "
+"output distributions of your package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:151
+msgid "You can enter the build environment in your shell to check it out:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:157
+msgid "If you run `pip list` in the environment, twine will be there:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:163
+#: ../../tutorials/develop-python-package-hatch.md:221
+msgid "To leave the environment use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:169
+msgid "Hatch, testing, and matrix environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:171
+msgid ""
+"It's always helpful to run your tests on the Python versions that you "
+"expect your users to be using. In this section, you'll explore the test "
+"environment setup in the pyOpenSci template package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:173
+msgid "Below, you see the Hatch environment test table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:175
+msgid ""
+"Similar to the above build environment, the environment below defines the"
+" dependencies that Hatch needs to install into the test environment "
+"(required to run your tests)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:189
+msgid "Your test environment has a matrix associated with it"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:191
+msgid ""
+"If the environment has a matrix associated with it, that tells Hatch to "
+"run the tests across different Python versions. Below, you are running "
+"tests on versions 3.10 through 3.13."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:194
+msgid ""
+"Hatch by default will install Python [using "
+"UV](https://docs.astral.sh/uv/guides/install-python/) both when you "
+"install Hatch and also when you declare a matrix environment like the one"
+" below"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:202
+msgid ""
+"In your project, if you run `hatch shell test`, you will see the output "
+"below. This means that because there is a matrix of Python versions to "
+"choose from, you need to select the environment with the Python version "
+"you want to use."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:215
+msgid ""
+"Pick the Python test environment that you want to use and enter it, like "
+"this (this will open Python 3.13):"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:227
+msgid "Hatch scripts for tests"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:229
+msgid ""
+"In that same tests section, you will see a `tool.hatch.envs.test.scripts`"
+" section. Similar to what you saw above with the build steps, this is "
+"where the \"script\" to run your tests is defined."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:232
+msgid ""
+"Notice that below, the script has a script called `run`. And that script "
+"runs pytest with a set of arguments, including generating code coverage."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:239
+msgid "To run this script in your terminal, use the syntax:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:241
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:243
+msgid "Reminder"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:246
+msgid ""
+"`hatch run`: this calls hatch and tells it that it will be running a "
+"command"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:247
+msgid ""
+"`test:run` defines the environment you want it to run (`test`) in this "
+"case, and the script is defined as `run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:250
+msgid ""
+"If you have a matrix setup for tests, then it will both install the "
+"needed Python version using UV and run your tests in each version of the "
+"Python environment. In this case, since there are four Python versions in"
+" the environment, your tests will be run four times, once in each Python "
+"version listed in the matrix table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:280
+msgid "Build your documentation with Hatch environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:282
+msgid ""
+"Finally, you can build and serve your documentation using hatch. To build"
+" a static HTML version of the docs run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:285
+msgid "`hatch run docs:build`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:287
+msgid ""
+"To run a local server with your docs updated as you update your markdown "
+"files, run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:289
+msgid "`hatch run docs:serve`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:291
+msgid "To stop serving the docs use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:293
+msgid "mac: ctrl + c windows:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:6
+msgid "Get to Know Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:8
+msgid ""
+"Our Python packaging tutorials use Hatch. While there are [many great "
+"packaging tools](/package-structure-code/python-package-build-tools) out "
+"there, we have selected Hatch because:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:13
+msgid ""
+"It is an end-to-end tool that supports most of the steps required to "
+"create a quality Python package. Beginners will have fewer tools to learn"
+" if they use Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:16
+#, python-brace-format
+msgid ""
+"It supports different {term}`Build backend` options if you ever need to "
+"compile code in other languages."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:18
+msgid ""
+"As a community, pyOpenSci has decided that Hatch is a user-friendly tool "
+"that supports many different scientific Python use cases."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:21
+msgid ""
+"In this tutorial, you will install and get to know Hatch a bit more "
+"before starting to use it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:24
+msgid "You need two things to successfully complete this tutorial:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:26
+msgid "You need Python installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:27
+msgid "You need Hatch installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:30
+msgid ""
+"If you don't already have Python installed on your computer, Hatch will "
+"do it for you when you install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:34
+msgid "Install Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:36
+msgid ""
+"To begin, follow the operating-system-specific instructions below to "
+"install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "MAC"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:43
+msgid ""
+"Follow the instructions "
+"[here](https://hatch.pypa.io/latest/install/#installers)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:45
+msgid ""
+"Download the latest GUI installer for MAC [hatch-"
+"universal.pkg](https://github.com/pypa/hatch/releases/latest/download"
+"/hatch-universal.pkg)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:46
+msgid "Run the installer and follow the setup instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:47
+msgid "If your terminal is open, then restart it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Windows"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:53
+msgid ""
+"In your browser, download the correct `.msi` file for your system: "
+"[hatch-x64.msi](https://github.com/pypa/hatch/releases/latest/download/hatch-x64.msi)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:55
+msgid "Run your downloaded installer file and follow the on-screen instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Linux"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:61
+msgid ""
+"We suggest that you install Hatch using pipx on Linux. however, if you "
+"prefer another method, check out the [Hatch installation "
+"documentation](https://hatch.pypa.io/latest/install/) for other methods."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:75
+#, python-brace-format
+msgid ""
+"Hatch can also be installed directly using {term}`pip` or "
+"[conda](https://hatch.pypa.io/latest/install/#conda). We encourage you to"
+" follow the instructions above because we have found that the Hatch "
+"installers for Windows and Mac are the easiest and most efficient."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:80
+msgid ""
+"Our Linux users have found success installing Hatch with pipx if they "
+"already use apt install."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:83
+msgid ""
+"Both approaches (using a graphical installer on Windows/Mac and pipx) "
+"ensure that you have Hatch installed globally. A global install means "
+"that Hatch is available across all of your Python environments on your "
+"computer."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:88
+msgid "Check that hatch installed correctly"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:90
+msgid ""
+"Once you have completed the installation instructions above, you can open"
+" your terminal, and make sure that Hatch installed correctly using the "
+"command below:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:98
+msgid ""
+"*Note the version number output of `hatch --version` will likely be "
+"different from the output above in this tutorial.*"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:101
+msgid "Configure Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:103
+msgid ""
+"Once you have installed Hatch, you can customize its configuration. This "
+"includes setting the default name and setup for every package you create."
+" While this step is not required, we suggest that you do it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:107
+msgid ""
+"Hatch stores your configuration in a [`config.toml` "
+"file](https://hatch.pypa.io/latest/config/project-templates/)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:109
+msgid ""
+"While you can update the `config.toml` file through the command line, it "
+"might be easier to look at and update it in a text editor if you are "
+"using it for the first time."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:113
+msgid "Step 1: Open and Edit Your `config.toml` File"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:115
+msgid ""
+"To open the config file in your file browser, run the following command "
+"in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:118
+msgid "`hatch config explore`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:120
+msgid ""
+"This will open up a directory window that allows you to double-click on "
+"the file and open it in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:123
+msgid ""
+"You can also retrieve the location of the Hatch config file by running "
+"the following command in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:131
+msgid "Step 2 - update your email and name"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:133
+msgid ""
+"Once the file is open, update the [template] table of the `config.toml` "
+"file with your name and email. This information will be used in any "
+"[pyproject.toml](pyproject-toml) metadata files that you create using "
+"Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:144
+msgid "Step 3"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:146
+msgid "Next, set tests to false in the `[template.plugins.default]` table."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:148
+msgid ""
+"While tests are important, setting the tests configuration in Hatch to "
+"`true` will create a more complex `pyproject.toml` file. You won't need "
+"to use this feature in this beginner friendly tutorial series but we will"
+" introduce it in later tutorials."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:153
+msgid "Your `config.toml` file should look something like the one below."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:191
+msgid ""
+"Also notice that the default license option is MIT. While we will discuss"
+" license in more detail in a later lesson, the MIT license is the "
+"recommended permissive license from "
+"[choosealicense.com](https://choosealicense.com/) and as such we will use"
+" it for this tutorial series."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:197
+msgid "You are of course welcome to select another license."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:200
+msgid ""
+"I think we'd need the SPDX license options here if they want to chose "
+"bsd-3 for instance"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:203
+msgid "Step 4: Close the config file and run `hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:205
+msgid ""
+"Once you have completed the steps above run the following command in your"
+" shell."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:207
+msgid "`hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:209
+msgid ""
+"`hatch config show` will print out the contents of your `config.toml` "
+"file in your shell. Look at the values and ensure that your name, email "
+"is set. Also make sure that `tests=false`."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:213
+msgid "Hatch features"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:215
+msgid ""
+"Hatch offers a suite of features that will make creating, publishing and "
+"maintaining your Python package easier."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:218
+msgid "Comparison to other tools"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:220
+msgid ""
+"[We compared Hatch to several of the other popular packaging tools in the"
+" ecosystem including flit, pdm and poetry. Learn more here](package-"
+"features)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:223
+msgid "[More on Hatch here](hatch)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:225
+msgid "A few features that Hatch offers"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:227
+msgid ""
+"It will convert metadata stored in a `setup.py` or `setup.cfg` file to a "
+"pyproject.toml file for you (see [Migrating setup.py to pyproject.toml "
+"using Hatch](setup-py-to-pyproject-toml.md ))"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:229
+msgid ""
+"It will help you by storing configuration information for publishing to "
+"PyPI after you've entered it once."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:231
+msgid "Use `hatch -h` to see all of the available commands."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:233
+msgid "What's next"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:235
+msgid ""
+"In the next lesson you'll learn how to package and make your code "
+"installable using Hatch."
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/setup-py-to-pyproject-toml.md:36
+msgid "Get to know Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/run-python-scripts-hatch.md:8
+msgid "Run standalone Python scripts with Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34
+msgid "Python Packaging Tutorial Setup"
+msgstr ""
+
+#: ../../tutorials/intro.md:42 ../../tutorials/intro.md:89
+msgid "What is a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish using GitHub Actions and Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create and publish a Python Package"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Develop package (Hatch environments)"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add README file"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add a license & code of conduct"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Update metadata in pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Project information files & metadata"
+msgstr ""
+
+#: ../../tutorials/intro.md:63
+msgid "Reference Guides"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Migrate setup.py to a pyproject.toml using Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Hatch for Existing Packages"
+msgstr ""
+
+#: ../../tutorials/intro.md:7
+msgid "Python packaging 101"
+msgstr ""
+
+#: ../../tutorials/intro.md:9
+msgid "_A start to finish beginner-friendly tutorial_"
+msgstr ""
+
+#: ../../tutorials/intro.md:11
+#, python-brace-format
+msgid ""
+"Welcome to the pyOpenSci Python packaging tutorial series. The lessons on"
+" the upcoming pages walk you through the core steps needed to create a "
+"{term}`Python package`."
+msgstr ""
+
+#: ../../tutorials/intro.md:17
+msgid ""
+"Diagram showing the lessons in our packaging tutorial. There are 6 total "
+"- what is a Python package, make code pip installable, publish your "
+"package to PyPI, add a README and LICENSE file, add metadata for PyPI and"
+" finally publish to conda forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:19 ../../tutorials/trusted-publishing.md:258
+msgid ""
+"This lesson is the first in a series of lessons to help you get started "
+"with Python packaging."
+msgstr ""
+
+#: ../../tutorials/intro.md:22
+msgid "Who are these tutorials for?"
+msgstr ""
+
+#: ../../tutorials/intro.md:24
+msgid ""
+"The content in this tutorial series is beginner friendly and assumes that"
+" you have not created a Python package before. However, the content will "
+"still be valuable if you are interested in better understanding the steps"
+" involved in creating a Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:29
+msgid ""
+"In this series you will learn about the core elements that you need to "
+"publish your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/intro.md:32
+msgid ""
+"In the second series, you will learn about infrastructure and "
+"documentation needed to support package maintenance."
+msgstr ""
+
+#: ../../tutorials/intro.md:77 ../../tutorials/publish-conda-forge.md:22
+#: ../../tutorials/publish-pypi.md:20 ../../tutorials/pyproject-toml.md:27
+#: ../../tutorials/setup-py-to-pyproject-toml.md:20
+#: ../../tutorials/trusted-publishing.md:13
+msgid "Learning Objectives"
+msgstr ""
+
+#: ../../tutorials/intro.md:79
+msgid ""
+"This lesson introduces you to the basic components of a Python package. "
+"After reading this lesson you will:"
+msgstr ""
+
+#: ../../tutorials/intro.md:82
+msgid "Understand what a Python package is"
+msgstr ""
+
+#: ../../tutorials/intro.md:83
+msgid "Be able to list the 5 core components of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:84
+msgid ""
+"Be able to explain the difference between generalizable code and code "
+"that supports a specific scientific application"
+msgstr ""
+
+#: ../../tutorials/intro.md:91
+msgid ""
+"At a high level, you can think about a Python package as a toolbox that "
+"you can use to perform various tasks."
+msgstr ""
+
+#: ../../tutorials/intro.md:94
+#, python-brace-format
+msgid ""
+"A Python package is basically a directory with a specific file structure."
+" Within the package directory structure, there are {term}`Module` objects"
+" which are files that end in `.py` (the same extension you'd see in a "
+"Python script). These modules allow you to group and structure your "
+"Python code. Each module contains functions and classes, that you can "
+"think about as the tools in your toolbox."
+msgstr ""
+
+#: ../../tutorials/intro.md:103
+msgid ""
+"Diagram showing a sketch of a toolbox filled with different tools "
+"including a hammer and a saw."
+msgstr ""
+
+#: ../../tutorials/intro.md:105
+msgid ""
+"You can think about a package as a toolbox filled with coding tools. A "
+"tool may be a function or a class. Each tool does a specific thing well."
+msgstr ""
+
+#: ../../tutorials/intro.md:110
+msgid "Python packages are installable"
+msgstr ""
+
+#: ../../tutorials/intro.md:112
+msgid ""
+"A package is installable, which means that you can add the functionality "
+"within the package's code to any Python environment and import that "
+"functionality like you would import core scientific Python packages such "
+"as NumPy or Matplotlib."
+msgstr ""
+
+#: ../../tutorials/intro.md:121
+msgid ""
+"Installing a package into an environment makes it easier to manage and "
+"reuse your code across different projects. Structuring your code as a "
+"package is the first step you need to take so you can share the tools in "
+"the toolbox you've created and let others build with it."
+msgstr ""
+
+#: ../../tutorials/intro.md:126
+msgid "Why create a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:128
+msgid "You might create a Python package because you want to:"
+msgstr ""
+
+#: ../../tutorials/intro.md:130
+msgid ""
+"**Use your code across different projects:** At its most basic level, "
+"creating a package allows you to install your code into a Python "
+"environment. This allows you to then import functions and classes into "
+"any workflows both locally and in the cloud."
+msgstr ""
+
+#: ../../tutorials/intro.md:131
+#, python-brace-format
+msgid ""
+"**Share your code:** If you publish a package on a public repository such"
+" as PyPI or conda-forge, your package can be installed on any machine "
+"using {term}`pip` or conda with a single command."
+msgstr ""
+
+#: ../../tutorials/intro.md:134
+msgid ""
+"**Build community around your code:** Packages make it easier for "
+"multiple people to work on the same project (particularly when published "
+"on GitHub). A version control system such as git (the system used by "
+"GitHub), further makes it easier to track changes to the codebase over "
+"time. Tools such as issues and pull requests make it easier for outside "
+"users to contribute bug fixes and to establish review processes for "
+"accepting changes to the code base."
+msgstr ""
+
+#: ../../tutorials/intro.md:135
+msgid ""
+"**Organize your code:** Packages can be used to organize large code "
+"projects, dividing them into smaller, more manageable components. This "
+"structure can help with both maintaining the codebase and with making it "
+"easier to understand."
+msgstr ""
+
+#: ../../tutorials/intro.md:137
+msgid "What to consider before you create a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:139
+msgid ""
+"Creating a Python package that others use takes considerable time and "
+"effort. Before you begin, think about your goals including:"
+msgstr ""
+
+#: ../../tutorials/intro.md:142
+msgid "Who you think will use your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:143
+msgid "How people might use your package and on what data (if data are relevant)"
+msgstr ""
+
+#: ../../tutorials/intro.md:144
+msgid "Whether you have time to add things such as documentation and tests"
+msgstr ""
+
+#: ../../tutorials/intro.md:145
+msgid ""
+"How long you might be able to maintain it: remember that once people "
+"begin using your package they will depend on your maintainer team to "
+"update it, fix bugs and answer questions."
+msgstr ""
+
+#: ../../tutorials/intro.md:147
+msgid ""
+"Before creating a user-facing package, it's important to consider all of "
+"the above."
+msgstr ""
+
+#: ../../tutorials/intro.md:149
+msgid "The elements of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:153 ../../tutorials/intro.md:231
+msgid "Diagram showing .. more here if this stays."
+msgstr ""
+
+#: ../../tutorials/intro.md:155
+msgid ""
+"The elements of a Python package include code, documentation, tests, an "
+"OSI-approved license and infrastructure. Maintainers are at the core "
+"making sure everything works and is up to date while fixing bugs and "
+"addressing user concerns."
+msgstr ""
+
+#: ../../tutorials/intro.md:161
+msgid "The core elements of Python package include:"
+msgstr ""
+
+#: ../../tutorials/intro.md:163
+msgid ""
+"**Code:** Functions and classes that provide functionality for a user of "
+"your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:164
+msgid ""
+"**Documentation:** Installation instructions, tutorials, and examples "
+"that both help users get started using your package and contributors and "
+"maintainers fix bugs and maintain the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:165
+msgid ""
+"Contributor Documentation in the form of a **CONTRIBUTING.md** file is "
+"useful to help people to contribute to your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:166
+msgid ""
+"Development Documentation helps both maintainers and contributors "
+"understand how to maintain a package's infrastructure."
+msgstr ""
+
+#: ../../tutorials/intro.md:167
+msgid ""
+"**Tests:** that make sure your code works as it should and makes it "
+"easier for you and others to contribute to, modify and update the code in"
+" the future"
+msgstr ""
+
+#: ../../tutorials/intro.md:168
+msgid ""
+"**License:** An open source license, or license that is [OSI "
+"approved](https://opensource.org/license/), refers to an license that "
+"allows others to use your package. It also provides legal direction "
+"regarding how elements of the package can and can't be reused."
+msgstr ""
+
+#: ../../tutorials/intro.md:169
+msgid ""
+"**Infrastructure** that automates updates, publication workflows and runs"
+" test suites. Infrastructure includes a suite of things such as platforms"
+" like GitHub and GitLab, tools to run tests and tools locally such as nox"
+" and tox and continuous integration that automates package maintenance "
+"steps."
+msgstr ""
+
+#: ../../tutorials/intro.md:171
+msgid "What pyOpenSci looks for in a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:174
+msgid ""
+"pyOpenSci performs an [initial set of editor "
+"checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-"
+"chief-guide.html#editor-checklist-template) for any package submitted to "
+"us for peer review. You may find these checks useful as you create your "
+"package as a baseline for things that you package should have."
+msgstr ""
+
+#: ../../tutorials/intro.md:180
+msgid "Packages are more than just code - Infrastructure"
+msgstr ""
+
+#: ../../tutorials/intro.md:182
+msgid ""
+"A package in any language is more than just code. If you expect other "
+"people to use your package, besides yourself, you should consider not "
+"only writing high quality code, but also the various elements of a "
+"package that make it a useful community resource."
+msgstr ""
+
+#: ../../tutorials/intro.md:187
+msgid "Version control and storing your package on GitHub or GitLab"
+msgstr ""
+
+#: ../../tutorials/intro.md:189
+msgid ""
+"Most Python packages live in an online version control platform such as "
+"GitHub or GitLab. GitHub and GitLab both run [git](https://git-scm.com/) "
+"for version control. Having your software under version control is "
+"important because it allows you to both track changes over time while "
+"also going back in history and undoing changes in the case that a change "
+"to the code base unexpectedly breaks something."
+msgstr ""
+
+#: ../../tutorials/intro.md:194
+msgid ""
+"By publishing your package on GitHub or GitLab, you are making your code "
+"public facing. This means that others can both see your code and also "
+"make contributions using a pull request (GitHub) / merge request (GitLab)"
+" / code review workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:196
+msgid "GitHub & GitLab vs. Git"
+msgstr ""
+
+#: ../../tutorials/intro.md:199
+msgid ""
+"GitHub and GitLab are online (cloud) platforms that run `git` (version "
+"control software) on the backend. Running git locally on your computer "
+"allows you to upload (`git push`) and download (`git pull`) files to "
+"GitHub and GitLab."
+msgstr ""
+
+#: ../../tutorials/intro.md:204
+msgid "Issues or Ticket Trackers"
+msgstr ""
+
+#: ../../tutorials/intro.md:206
+msgid ""
+"GitHub and GitLab also both offer community features such as issues that "
+"allow:"
+msgstr ""
+
+#: ../../tutorials/intro.md:208
+msgid "you to communicate with your maintainers and contributor community"
+msgstr ""
+
+#: ../../tutorials/intro.md:209
+msgid "users to report bugs, ask questions and request new features"
+msgstr ""
+
+#: ../../tutorials/intro.md:210
+msgid ""
+"you to publicly keep track of enhancements and features you want to work "
+"on for your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:212
+msgid "Continuous integration and continuous deployment"
+msgstr ""
+
+#: ../../tutorials/intro.md:214
+msgid ""
+"GitHub and GitLab also provide continuous integration and continuous "
+"deployment (CI/CD). Continuous integration (CI) refers to a platform that"
+" automatically runs a specific job when a certain event occurs, whereas "
+"continuous deployment (CD) is an extension of CI that refers to not only "
+"running or building but also to publishing the final outputs somewhere."
+msgstr ""
+
+#: ../../tutorials/intro.md:216
+msgid "**An example of Continuous integration:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:218
+msgid ""
+"When someone submits a change to your code, your tests will run across "
+"different operating systems and the code will be checked for format "
+"issues."
+msgstr ""
+
+#: ../../tutorials/intro.md:220
+msgid "**An example of Continuous deployment:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:222
+msgid ""
+"When you are ready to release your package to PyPI, a continuous "
+"deployment operation might be triggered on release to publish your "
+"package to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:224
+msgid ""
+"Integrated CI/CD will help you maintain your software, ensuring that "
+"changes to the code don't break things unexpectedly. They can also help "
+"you maintain code style and format consistency for every new change to "
+"your code."
+msgstr ""
+
+#: ../../tutorials/intro.md:233
+msgid "The lifecycle of a scientific Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:236
+msgid "When should you turn your code into a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:238
+msgid ""
+"You may be wondering, what types of code should become a Python package "
+"that is both on GitHub and published to PyPI and/or conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:240
+msgid "There are a few use cases to consider:"
+msgstr ""
+
+#: ../../tutorials/intro.md:242
+msgid ""
+"**Creating a basic package for yourself:** Sometimes you want create a "
+"package for your own personal use. This might mean making your code "
+"locally pip installable and you may also want to publish it to GitHub. In"
+" that case you don't expect others to use your code, and as such you may "
+"only have documentation for you and your future self if you need to "
+"update the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:244
+msgid ""
+"An example of this type of package might be a set of functions that you "
+"write that are useful across several of your projects. It could be useful"
+" to have those functions available to all of your projects."
+msgstr ""
+
+#: ../../tutorials/intro.md:247
+msgid "LINK to pip installable lesson when it's published - it's in review now"
+msgstr ""
+
+#: ../../tutorials/intro.md:250
+msgid ""
+"**Creating a package for the community:** In other cases, you may create "
+"some code that you soon realize might also be useful to not just you, but"
+" to other people as well. In that case, you might consider both creating "
+"the package, publishing it on GitHub, and because other users may be "
+"using it, you may make use of GitHub's infrastructure including CI/CD "
+"pipelines and issue trackers. Because you want other people to use your "
+"package, you will want to also include LICENSE information, documentation"
+" for users and contributors and tests. This type of package is most often"
+" published to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:253
+msgid ""
+"For example, all of the [pyOpenSci packages](https://www.pyopensci.org"
+"/python-packages.html) are public facing with an intended audience beyond"
+" just the maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:255
+msgid "Packages that you expect others to use should be well-scoped"
+msgstr ""
+
+#: ../../tutorials/intro.md:257
+msgid ""
+"Ideally the code in your Python package is focused on a specific theme or"
+" use case. This theme is important as it's a way to scope the content of "
+"your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:259
+msgid ""
+"It can be tricky to decide when your code becomes something that might be"
+" more broadly useful to others. But one question you can ask yourself is "
+"- is your code written specifically for a single research project? Or "
+"could it have a broader application across multiple projects in your "
+"domain?"
+msgstr ""
+
+#: ../../tutorials/intro.md:261
+msgid "How does this relate to code for a research project?"
+msgstr ""
+
+#: ../../tutorials/intro.md:264
+msgid ""
+"A [Research Compendium](https://book.the-turing-way.org/reproducible-"
+"research/compendia.html) is an organized set of code, data and "
+"documentation that supports a specific research project. It aims to "
+"enhance the reproducibility and transparency of research by providing a "
+"comprehensive record of the methods, data, and analyses used in a study."
+msgstr ""
+
+#: ../../tutorials/intro.md:269
+msgid ""
+"A Python package is a collection of modules that can be used to perform a"
+" specific set of tasks. These tasks should be applicable to numerous "
+"workflows. As such a Python package is more generalizable than a Research"
+" Compendium which supports a specific project."
+msgstr ""
+
+#: ../../tutorials/intro.md:274
+msgid ""
+"[Read about `Good enough practices in scientific "
+"computing`](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510)"
+msgstr ""
+
+#: ../../tutorials/intro.md:275
+msgid ""
+"[Learn more about research compendia (also called repo-packs) in this "
+"blog post.](https://lorenabarba.com/blog/how-repro-packs-can-save-your-"
+"future-self/)"
+msgstr ""
+
+#: ../../tutorials/intro.md:278
+msgid "Below are a few examples well scoped pyOpenSci packages:"
+msgstr ""
+
+#: ../../tutorials/intro.md:280
+msgid ""
+"[Crowsetta](https://crowsetta.readthedocs.io/en/latest/): is a package "
+"designed to work with annotating animal vocalizations and bioacoustics "
+"data. This package helps scientists process different types of "
+"bioacoustic data rather than focusing on a specific individual research "
+"application associated with a user-specific research workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:281
+msgid ""
+"[Pandera](https://www.union.ai/pandera) is another more broadly used "
+"Python package. Pandera supports data testing and thus also has a broader"
+" research application."
+msgstr ""
+
+#: ../../tutorials/intro.md:283
+msgid "Matplotlib as an example"
+msgstr ""
+
+#: ../../tutorials/intro.md:285
+msgid ""
+"At the larger end of the user spectrum, Matplotlib is a great example. "
+"Matplotlib does one thing really well:"
+msgstr ""
+
+#: ../../tutorials/intro.md:288
+msgid "_It creates visual plots of data._"
+msgstr ""
+
+#: ../../tutorials/intro.md:290
+msgid ""
+"Thousands of people use Matplotlib for different plotting applications "
+"using different types of data. While few scientific packages will have "
+"the same broad application and large user base that Matplotlib has, the "
+"idea of scoping out what your package does is still important."
+msgstr ""
+
+#: ../../tutorials/intro.md:296
+msgid "Code should also be clean & readable & documented"
+msgstr ""
+
+#: ../../tutorials/intro.md:298
+msgid ""
+"The code in your package should also be clean, readable, and well "
+"documented."
+msgstr ""
+
+#: ../../tutorials/intro.md:300
+msgid ""
+"**Clean code:** Clean code refers to code that uses expressive variable "
+"names, is concise and doesn't repeat itself. You can learn about best "
+"practices for clean code in future pyOpenSci tutorials."
+msgstr ""
+
+#: ../../tutorials/intro.md:304
+msgid ""
+"**Readable code:** readable code is code written with a consistent style."
+" You can use linters and code formatters such as black and flake8 to "
+"ensure this consistency throughout your entire package. [Learn more about"
+" code formatters here.](../package-structure-code/code-style-linting-"
+"format)"
+msgstr ""
+
+#: ../../tutorials/intro.md:308
+msgid ""
+"**Documented code:** documented code is written using docstrings that "
+"help a user understand both what the functions and methods in your code "
+"do and also what the input and output elements of each function are. [You"
+" can learn more about docstrings in our guide, here.](../documentation"
+"/write-user-documentation/document-your-code-api-docstrings)"
+msgstr ""
+
+#: ../../tutorials/intro.md:312
+msgid "Making your package installable - publishing to PyPI & conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:314
+msgid "Python packages and environments"
+msgstr ""
+
+#: ../../tutorials/intro.md:316
+msgid ""
+"You can install a Python package into a Python environment in the same "
+"way you might install NumPy or Pandas. Installing your package into an "
+"environment allows you to access it from any code run with that specific "
+"Python environment activated."
+msgstr ""
+
+#: ../../tutorials/intro.md:322
+msgid ""
+"Diagram showing the steps associated with creating a package and then "
+"installing it. The first arrow says your package and the second says pip "
+"install package. The second arrow leads to a box that represents a Python"
+" environment that already has some packages installed such as Pandas and "
+"NumPy. Your package will also get installed into that same environment "
+"when you pip install it."
+msgstr ""
+
+#: ../../tutorials/intro.md:324
+msgid ""
+"You don't have to publish to PyPI to make your code installable. With the"
+" correct file structure and project metadata you can make your code "
+"installable locally on your computer and use it for projects that you are"
+" working on without having to ever publish to PyPI. Publishing to PyPI is"
+" useful when you want to make your code public-facing and share it with "
+"others."
+msgstr ""
+
+#: ../../tutorials/intro.md:331
+msgid "Publishing a package to PyPI / Conda-Forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:333
+msgid ""
+"If you want to make your package directly installable without having to "
+"download the code to your computer locally then you need to publish it in"
+" a repository such as **PyPI** or **conda-forge**."
+msgstr ""
+
+#: ../../tutorials/intro.md:337
+msgid ""
+"Learn [how to publish your package to PyPI in this tutorial.](publish-"
+"pypi.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:339
+msgid ""
+"Then you can create a conda-forge recipe using the "
+"[Grayskull](https://github.com/conda/grayskull) tool. You can then submit"
+" this recipe to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:341
+msgid ""
+"[You will learn more about the conda-forge publication process here"
+".](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:344
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:346
+msgid ""
+"In the image above, you can see the steps associated with publishing your"
+" package on PyPI and conda-forge. PyPI supports [sdist](#python-source-"
+"distribution) and [wheel](#python-wheel) files. Once you are ready to "
+"make your code publicly installable, you can publish it on PyPI. Once "
+"your code is on PyPI it is straight forward to then publish to conda-"
+"forge. You create a recipe using the Grayskull package and then you open "
+"a pr in the conda-forge recipe repository. You will learn more about this"
+" process in the [conda-forge lesson](/tutorials/publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/intro.md:350
+msgid "Yay, your package has users! Now what?"
+msgstr ""
+
+#: ../../tutorials/intro.md:352
+msgid ""
+"As the community using your package grows, you may also find yourself "
+"managing users, contributors, and others who want to interact with your "
+"package. It’s important to consider all this before you dive into "
+"development. Once you have a user base in the community, people will "
+"depend upon your code to work and will need direction regarding how to "
+"use it."
+msgstr ""
+
+#: ../../tutorials/intro.md:354
+msgid "To support your community, you'll want to add things like:"
+msgstr ""
+
+#: ../../tutorials/intro.md:356
+msgid ""
+"[a development guide that documents your maintainer workflow process "
+"](/documentation/repository-files/development-guide.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:357
+msgid ""
+"[a code of conduct to defines community interaction standards and "
+"expectations](/documentation/repository-files/code-of-conduct-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:358
+msgid ""
+"[a contributing guide that helps users understand expectations associated"
+" with making contributions to your project](/documentation/repository-"
+"files/contributing-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:360
+msgid "Support for contributors and maintainers"
+msgstr ""
+
+#: ../../tutorials/intro.md:362
+msgid ""
+"If you intend for others to use and contribute to your code, consider who"
+" will maintain it over time. You will want a **contributing and "
+"development** guide to help new potential contributors get started with "
+"contributing to your package, as well as a **code of conduct** to ensure "
+"community interactions remain healthy both for you and your contributors "
+"and maintainer team."
+msgstr ""
+
+#: ../../tutorials/intro.md:364
+msgid ""
+"The elements above are also important for future maintenance of your "
+"package. In the case that you are no long able to maintain it or simply "
+"want extra help, development, and contributing documentation will help "
+"you onboard new maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:369
+msgid "What's next?"
+msgstr ""
+
+#: ../../tutorials/intro.md:371
+msgid ""
+"In future lessons you will learn more about the infrastructure around a "
+"published Python package that makes it both easier to maintain, easier "
+"for others to contribute to and easier for other scientists to use. "
+"However, first we want to get you to your initial goal of publishing a "
+"Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:373
+msgid ""
+"In this next lesson you will learn how to create a basic installable "
+"Python package. Make your code pip installable "
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:6
+msgid "Publish your Python package that is on PyPI to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:8
+msgid "In the previous lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:10
+msgid ""
+"How to [create the most basic version of a Python package](create-python-"
+"package.md). This entailed making your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:11
+msgid "[How to publish your Python package to PyPI](publish-pypi)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:12
+msgid "How to add a `README` and `LICENSE` file to your package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:13
+msgid ""
+"How to setup your [pyproject.toml](pyproject-toml) file with all of the "
+"metadata that PyPI requires and also metadata that will be helpful for "
+"users to find your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:17
+msgid ""
+"If you have gone through all of the above lessons, you are now ready to "
+"publish your package on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:20
+msgid ""
+"**IMPORTANT:** Please do not practice publishing your package to conda-"
+"forge. You should only publish to conda-forge when you have a package on "
+"pypi.org that you plan to maintain."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:26 ../../tutorials/publish-pypi.md:24
+msgid "In this lesson you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:28
+msgid "Create a conda-forge yaml recipe for your package using Grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:29
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:30
+msgid ""
+"Maintain your conda-forge package by creating new releases for your "
+"package on PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:33
+#, python-brace-format
+msgid ""
+"Once your package is on PyPI you can then easily publish it to conda-"
+"forge using the [grayskull](https://conda.github.io/grayskull/) tool. You"
+" do not need to build the package specifically for conda, conda-forge "
+"will build from your PyPI {term}`Source distribution (sdist)` file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:41
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:43
+#, python-brace-format
+msgid ""
+"Once you have published both package distributions (the {term}`Source "
+"distribution (sdist)` and the {term}`Wheel (.whl)`) to PyPI, you can then"
+" publish to conda-forge. Conda-forge requires a source distribution on "
+"PyPI in order to build your package on conda-forge. You do not need to "
+"rebuild your package to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:50
+msgid "What is conda-forge?"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:52
+msgid ""
+"conda is an open source package and environment management tool that can "
+"be used to install tools from the different channels on Anaconda.org."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:55
+msgid ""
+"You can think about a channel as a specific location where a group of "
+"packages are stored and can be installed from using a command such as "
+"`conda install packagename`. In the case of conda channels, some of these"
+" channels such as the `defaults` channel, is managed by Anaconda (the "
+"company). Only Anaconda can decide what packages are available in the "
+"`defaults` channel. However, the conda-forge (and bioconda) channel are "
+"community-managed channels. Anyone can submit a package to these channels"
+" however they must pass a technical review in the [staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes) to be "
+"published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:58
+msgid "[Learn more about conda channels here.](#about-conda)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:62
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the Anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI and test PyPI (a "
+"testbed server for you to practice)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:64
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:67
+msgid "Why publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:69
+msgid ""
+"There are many users, especially in the scientific Python ecosystem that "
+"use conda as their primary package manager / environment tool. Thus, "
+"having packages available to these users on the conda-forge channel is "
+"useful. In some cases packages on conda-forge can minimize dependency "
+"conflicts that can occur when mixing installations using pip and conda. "
+"This is particularly important for the spatial ecosystem."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:71
+msgid "How publishing to conda-forge works"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:73
+msgid ""
+"Once you have built and published your package to PyPI, you have "
+"everything that you need to publish to conda-forge. There is no "
+"additional build step needed to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:75
+msgid ""
+"Conda-forge will build your package from the source distribution which "
+"you [published to PyPI in the previous lesson](publish-pypi) using the "
+"recipe that you will create below."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:77
+msgid "Conda-forge publication steps"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:80
+msgid ""
+"Image showing the steps associated with publishing to conda-forge. Check "
+"out the caption below for a detailed description."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:82
+msgid ""
+"The steps for publishing to conda-forge begin with publishing your Python"
+" package to PyPI. Once you have published to PyPI you can then create a "
+"yaml file recipe that can be submitted to the conda-forge staged recipes "
+"repository for review. Once that recipe is accepted, your package will "
+"get it's on repository (known as a feedstock) on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:85
+msgid "The steps to publish to conda-forge are:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:87
+msgid "Publish your Python package distribution files (sdist & wheel) to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:88
+msgid ""
+"Create a conda-forge recipe, which is a yaml file with instructions on "
+"how to build your package on conda-forge, using the grayskull[^grayskull]"
+" package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:89
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request for review. [Click here for an example "
+"submission from pyOpenSci.](https://github.com/conda-forge/staged-"
+"recipes/pull/25173)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:91
+msgid ""
+"Once someone from the conda-forge team reviews your pull request, you may"
+" need to make some changes. Eventually the pull request will be approved "
+"and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:93
+msgid ""
+"Once your recipe is accepted and merged on conda-forge, users can install"
+" your package using:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:95
+msgid "`conda install -c conda-forge your-package`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:97
+msgid ""
+"You only create the recipe once. Once the recipe is accepted and merged, "
+"you only need to maintain the repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:99
+msgid "Maintaining a conda-forge package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:101
+msgid ""
+"Once your package is on conda-forge, the repository will track release "
+"activity on the package's PyPI repository. Any time you make a new PyPI "
+"release with a new source distribution, conda-forge will build and update"
+" your conda-forge repository (also known as a feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:103
+msgid ""
+"When the update is processed, the friendly conda-forge bot will create a "
+"new pull request with an updated distribution recipe in your feedstock."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:105
+msgid ""
+"You can review that pull request and then merge it once all of the "
+"continuous integration tests pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:107
+msgid ""
+" How to Publish your package"
+" on conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:109
+msgid ""
+"It's time to add your package to the conda-forge channel. Remember that "
+"your package needs to be on PyPI before the steps below will work. And "
+"also remember that the team managing conda-forge are all volunteers."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:112
+msgid ""
+"Be sure that your package is on PyPI.org (not test.pypi.org) before you "
+"attempt to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:115
+msgid ""
+"Only submit your package to conda-forge if you intend to maintain it over"
+" time."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:118
+msgid ""
+"Note - this is a tutorial aimed to help you get your package onto conda-"
+"forge. The official conda documentation for this processed [is "
+"here](https://conda-forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:120
+msgid "Step 1: Install grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:122
+msgid ""
+"First, [install "
+"grayskull](https://conda.github.io/grayskull/user_guide.html). You can "
+"install it using either pip:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:128
+msgid "or conda"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:134
+msgid ""
+"To run this command, use the same shell / terminal that you have been "
+"using to run hatch commands in the previous tutorials."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:139
+msgid ""
+"You can also install grayskull using pipx[^pipx]. pipx is a tool that "
+"allows you to install commonly used tools that you might want to have "
+"available across multiple Python environments rather than installing the "
+"package into every Python environment that you create."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:142
+msgid "Step 2: Fork and clone the conda-forge staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:144
+msgid ""
+"Next, open your shell and `cd` to a location where you want to clone the "
+"**conda-forge/staged-recipes** repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:145
+msgid ""
+"fork and clone the [conda-forge/staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:146
+msgid ""
+"Create a new branch in your fork rather than submitting from the main "
+"branch of your fork. We suggest naming the branch your package's name."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:148
+msgid "`git checkout -b your-package-name `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:150
+msgid "In bash, `cd` into the `staged-recipes/recipes` folder"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:158
+msgid ""
+"Next, create a new branch in your `conda-forge/staged-recipes` cloned "
+"repository. You might want to make that branch the same name as your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:169
+msgid "Step 3: Create your conda-forge recipe"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:171
+msgid "Next, navigate to the recipes directory"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:173
+msgid ""
+"If you run `ls` here, you will notice there is an example directory with "
+"an example recipe for you to look at."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:185
+msgid "Next, run `grayskull pypi your-package-name` to generate a recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:229
+msgid ""
+"Grayskull will pull metadata about your package from PyPI. It does not "
+"use your local installation of the package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:230
+msgid ""
+"An internet connection is needed to run the `grayskull pypi your-package-"
+"name` step."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:233
+msgid ""
+"When you run grayskull, it will grab the latest distribution of your "
+"package from PyPI and will use that to create a new recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:235
+msgid ""
+"The recipe will be saved in a directory named after your package's name, "
+"wherever you run the command."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:237
+msgid "`recipes/packagename/meta.yaml`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:239
+msgid ""
+"At the very bottom of the grayskull output, it will also tell you where "
+"it saved the recipe file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:242
+msgid ""
+"Open the meta.yaml file. The finished `meta.yaml` file that grayskull "
+"creates should look like the example below:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:289
+msgid "Step 3b: Bug fix - add a home url to the about: section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:291
+msgid ""
+"There is currently a small bug in Grayskull where it doesn't populate the"
+" home: element of the recipe. If you don't include this, [you will "
+"receive an error message](https://github.com/conda-forge/staged-"
+"recipes/pull/25173#issuecomment-1917916528) from the friendly conda-forge"
+" linter bot."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:305
+msgid "to fix this, open your meta.yaml file in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:306
+msgid "and add a home: element to the about section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:308
+msgid "The about section will look like this after you create your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:318
+msgid ""
+"Below you add a home: element. If you have a project home page / website "
+"you can use that url. Otherwise, you can also use your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:329
+msgid "Step 4: tests for conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:331
+msgid ""
+"Next, have a look at the tests section in your **meta.yaml** file. At a "
+"minimum you should import your package or the main modules associated "
+"with your package and run `pip check`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:333
+msgid ""
+"`pip check` will ensure that your package installs properly with all of "
+"the proper dependencies."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:345
+msgid ""
+"If you have more advanced tests that you wish to run, you can add them "
+"here. However, you can also simply leave the tests section as it is."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:347
+msgid "Step 4: Submit a pull request to the staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:349
+msgid ""
+"Once you have completed all of the above, you are ready to open up a pull"
+" request in the `conda-forge/staged-recipes repository`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:351
+msgid ""
+"Submit a pull request from your fork/branch of the staged-recipes "
+"repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:352
+msgid ""
+"Remember that the conda-forge maintainers are volunteers. Be patient for "
+"someone to respond and supportive in your communication with them."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md
+msgid "Conda-forge checklist help"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:358
+msgid "Conda-forge Staged-recipes Pull Request Checklist"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:360
+msgid ""
+"When you submit your package to conda-forge, the pull request template "
+"includes a list of checks that you want to ensure you have covered."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:362
+msgid "Below we break down each element of that list."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:364
+msgid "Pull request template checklist tips"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:367
+msgid ""
+"-[x] Title of this PR is meaningful: e.g. \"Adding my_nifty_package\", "
+"not \"updated meta.yaml\"."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:369
+msgid ""
+"**Translation:** Make sure that your pull request title is specific. We "
+"suggest something like: `Add recipe for `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:372
+msgid ""
+"-[x] License file is packaged (see [here](https://github.com/conda-forge"
+"/staged-"
+"recipes/blob/5eddbd7fc9d1502169089da06c3688d9759be978/recipes/example/meta.yaml#L64-L73)"
+" for an example)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:374
+msgid ""
+"**Translation:** You should have a LICENSE file included in your "
+"package's source distribution. If you have followed the pyOpenSci "
+"tutorials then you already have a LICENSE file and are likely using the "
+"MIT license. When you run `hatch build`, it will bundle that file into "
+"the output [source distribution file (which is the tar.gz file)](python-"
+"source-distribution) that conda-forge will use to build your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:376
+msgid "[x] Source is from official source."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:378
+msgid ""
+"**Translation:** If your package is on PyPI as you learned in the "
+"[previous lesson on publishing your Python package](publish-pypi) then "
+"you are in good shape. conda-forge prefers that your distribution is "
+"published to a known repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:380
+msgid ""
+"-[x] Package does not vendor other packages. (If a package uses the "
+"source of another package, they should be separate packages or the "
+"licenses of all packages need to be packaged)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:382
+msgid ""
+"**Translation:** If the code base in your package is your own and it all "
+"shares the same LICENSE then you are in good shape. If you have code "
+"taken from other packages then you may need to declare that and include "
+"licenses for that code if it is different. If you followed these "
+"tutorials then you do not have any vendored code."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:384
+msgid ""
+"-[x] If static libraries are linked in, the license of the static library"
+" is packaged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:386
+msgid ""
+"-[x] Package does not ship static libraries. If static libraries are "
+"needed, [follow CFEP-18](https://github.com/conda-"
+"forge/cfep/blob/main/cfep-18.md)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:388
+msgid ""
+"**Translation:** A static library refers to a copy of a package built "
+"into your package. If your package is a pure Python package, then you can"
+" check that your package does not ship static libraries as this does not "
+"apply to you."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:390
+msgid ""
+"The pyOpenSci tutorials are all pure Python and as such do not use static"
+" libraries in a linked or shipped (included in the package distribution) "
+"format."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:392
+msgid ""
+"If your package has a more complex build that includes links to "
+"extensions written in other languages such as C++, then be sure to "
+"include the proper licenses for those extensions in your metadata."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:397
+msgid ""
+"If you want to learn more about static libraries, then [this "
+"overview](https://pypackaging-"
+"native.github.io/background/compilation_concepts/#shared-vs-static-"
+"libraries) might help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:400
+msgid "-[ ] Build number is 0."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:402
+msgid ""
+"**Translation:** The build number in your recipe is right below the "
+"source location of your package's source distribution. `number: 0` is "
+"what you should see in that section of your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:415
+msgid ""
+"[x] A tarball (`url`) rather than a repo (e.g. `git_url`) is used in your"
+" recipe (see [here](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html) for more details)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:417
+msgid ""
+"**Translation:** Here conda wants you to provide a link to the source "
+"distribution on PyPI rather than a link to your GitHub repository "
+"distribution. Notice above in the Source section of your recipe there is "
+"a `url:` section that provides a PyPI url that ends in tar.gz. That is a "
+"link to your source distribution that conda-forge will use."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:423
+msgid ""
+"[x] GitHub users listed in the maintainer section have posted a comment "
+"confirming they are willing to be listed there."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:425
+msgid ""
+"**Translation** Once you have submitted your recipe, be sure that all "
+"maintainers listed in your recipe respond acknowledging that they are ok "
+"with being listed as a maintainer for the conda-forge version of your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:427
+msgid ""
+"[x] When in trouble, please check our [knowledge base "
+"documentation](https://conda-"
+"forge.org/docs/maintainer/knowledge_base.html) before pinging a team."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:429
+msgid ""
+"**Translation** The conda team are volunteers who spend their time "
+"supporting our community. Please try to troubleshoot on your own first "
+"before tagging one of them for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:431
+msgid ""
+"This is also why we don't suggest you publish to conda-forge as a "
+"practice run."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:435
+msgid ""
+"Once you create your pull request, a suite of CI actions will run that "
+"build and test the build of your package. A conda-forge maintainer will "
+"work with you to get your recipe in good shape and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:439
+msgid ""
+"Image showing the 5 CI tasks that will run against your package in the "
+"GitHub interface after you'ce created a pull request."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:441
+msgid ""
+"Wait until all of the CI steps in your pull request have run. At that "
+"point your pull request is ready for review by a conda-forge maintainer."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:444
+msgid ""
+"In some cases getting all of the checks to run successfully in CI might "
+"take a bit of work. If you are struggling to get your recipe to build "
+"properly, you can ping the conda-forge maintainer team for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:446
+msgid "Please be patient and wait for them to respond."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:448
+msgid "conda-forge staged recipes and CI failures"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:451
+msgid ""
+"If your package is a pure Python package that can be installed on any "
+"type of computer (Windows, mac, linux) and has no architecture "
+"requirements (known as noarch: Python or no architecture requirements) "
+"then the conda-forge team only requires tests for Linux CI to pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:453
+msgid ""
+"So if tests for Windows and MAC OS fail, that is to be expected. In this "
+"case, don't worry about failing tests, the maintainer team can help you "
+"get your package published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:456
+msgid ""
+"Once you have submitted your recipe, you can wait for the CI build to "
+"pass. If it's not passing, and you aren't sure why, a conda-forge "
+"maintainer can likely help you figure things out."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:458
+msgid ""
+"Once your recipe is built and merged, the conda team will create a new "
+"package repository for you similar to [this one for the GemGIS "
+"package](https://github.com/conda-forge/gemgis-feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:460
+msgid ""
+" Congratulations - you "
+"have added your package to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:462
+msgid ""
+"The last part of this process is maintaining the repository. We cover "
+"that next."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:465
+msgid "Maintaining your conda-forge feedstock"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:467
+msgid ""
+"Every time you create a new release on PyPI, the conda-forge bots will "
+"recognize the release and will rebuild the newly released version of your"
+" package. This process may take a day or two to complete so be patient."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:469
+msgid ""
+"Once the conda-forge build is complete, all of the maintainers of your "
+"conda-forge feedstock will get a ping on GitHub that a new pull request "
+"has been opened."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:471
+msgid ""
+"Review the pull request. If all tests are passing, you can merge it. "
+"Shortly after merging your pull request, the conda-forge release will be "
+"available for users to install:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:473
+msgid "`conda install -c conda-forge yourpackage`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:477
+msgid "If you have walked through this entire tutorial series you will now:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:479
+msgid "Understand [what a Python package is ](intro.md)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:480
+msgid ""
+"Know how to [make your code installable](create-python-package.md) into "
+"Python environments"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:481
+msgid ""
+"Know how to create a `pyproject.toml` file, a `README` file, and a "
+"`LICENSE` and code of conduct."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:482
+msgid "Know how to [publish your package to PyPI](publish-pypi.md) and"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:483
+msgid "Know how to publish your package to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:485
+msgid ""
+"The above are the basic steps that you need to take to create and publish"
+" a Python package. In a future tutorial series we will cover that basics "
+"of maintaining your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:489
+msgid "[Grayskull blogpost](https://conda-forge.org/blog/2020/03/05/grayskull/)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:490
+msgid "[Pipx documentation](https://pipx.pypa.io/stable/)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:7
+msgid "Publish your Python package to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:11
+msgid "Make sure they add /dist to their .gitignore file. Where does that fit?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:15
+msgid "In the previous Python packaging lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:17
+msgid "What a Python package is"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:18
+msgid "How to make your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:26
+#, python-brace-format
+msgid ""
+"Build your package's {term}`Source distribution (sdist)` and {term}`Wheel"
+" (.whl)` {term}`Distribution files`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:28
+msgid "Setup an account on TestPyPI (the process is similar for PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:29
+msgid "Publish your package to TestPyPI and PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:31
+msgid ""
+"You will do all of your development work in this lesson using [Hatch"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:34
+msgid ""
+"Once your package is on PyPI you can publish it to conda-forge (which is "
+"a channel on conda) using "
+"[Grayskull](https://conda.github.io/grayskull/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:37
+msgid ""
+"You will learn how to publish to conda-forge in the [next lesson"
+"](publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:41
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. An arrow to the right takes you to a build distribution files "
+"box. Another arrow to the right takes you to a publish to PyPI box which "
+"has an arrow containing sdist and wheel that notes those files go to PyPI"
+" for hosting. From PyPI is an arrow containing sdist since you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:43
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:46
+msgid "TestPyPI vs PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:48
+msgid ""
+"There are two repositories associated with PyPI to which you can upload "
+"your Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:51
+msgid ""
+"**[TestPyPI](https://test.pypi.org):** TestPyPI is a package repository "
+"provided by PyPI that you can use for testing that your package can be "
+"uploaded, downloaded, and installed correctly. This is a great place to "
+"practice and learn how to publish a package without exposing your "
+"incomplete package on the real PyPI service."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:52
+msgid ""
+"**[PyPI](https://pypi.org):** This is the live, production PyPI "
+"repository where you can officially publish your Python package, and from"
+" which users will get your package. IMPORTANT: Only publish your package "
+"to PyPI when you are ready for it to be used by others and/or confident "
+"that it will become a package that you will maintain. PyPI is not a place"
+" to practice learning how to publish a Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:54
+msgid ""
+"The steps for publishing on TestPyPI vs. PyPI are similar with the "
+"exception of a different url. We will point out where they differ."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:57
+msgid "4 Steps for publishing a Python package on TestPyPI (or PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:59
+msgid ""
+"In this lesson you will learn how to publish your package to TestPyPI "
+"using [Hatch](https://hatch.pypa.io/latest/). There are 4 things that you"
+" need to do to publish your Python package: to TestPyPI. You need to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:64
+msgid "**Create a package development environment**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:65
+#, python-brace-format
+msgid ""
+"[**Build your package using `hatch build`**](../package-structure-code"
+"/python-package-distribution-files-sdist-wheel). Building a package is "
+"the process of turning your code into two types of distribution files: "
+"sdist and wheel. The wheel distribution file is particularly important "
+"for users who will use {term}`pip` to install your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:66
+#, python-brace-format
+msgid ""
+"**Create an account on TestPyPI (or PyPI)**: You will need to create a "
+"TestPyPI account and associated {term}`API token` which provides "
+"permissions for you to upload your package. When you later publish your "
+"package to PyPI, you will need a separate PyPI account and token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:67
+msgid "**Publish to TestPyPI using `hatch publish`**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:69
+msgid ""
+"In a [future lesson](trusted-publishing), you will learn how to create an"
+" automated GitHub Actions workflow that publishes an updated version of "
+"your package to PyPI every time you create a GitHub release."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:71
+msgid "Learn more about building Python packages in our guide"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:75
+msgid ""
+"[Learn more about what building a Python package is](../package-"
+"structure-code/python-package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:76
+msgid ""
+"[Learn more about the package distribution file that PyPI needs called "
+"the wheel](#python-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:77
+msgid ""
+"[Learn more about the package distribution file that conda-forge will "
+"need on PyPI called the sdist (source distribution)](#python-source-"
+"distribution)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:80
+msgid "Step 1: Create a Python package development environment"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:82
+msgid ""
+"The first step in building your package is to create a development "
+"environment. The Python environment will contain all of the dependencies "
+"needed to both install and work on your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:84
+msgid "Use Hatch to create your environment."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:92
+msgid "Then view all of the current environments that hatch has access to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:104
+msgid ""
+"Then activate the environment. Note that when you call a shell from a "
+"Hatch environment, it will automatically install your package into the "
+"environment in development or editable mode."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:114
+msgid "View what's in the environment using `pip list`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:130
+msgid "At any time you can exit the environment using `exit`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:144
+msgid "Hatch and environments"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:146
+msgid ""
+"Behind the scenes when hatch creates a new virtual environment, by "
+"default it uses venv[^venv] which is the default environment management "
+"tool that comes with Python installations."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:149
+msgid "Hatch will:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:151
+msgid "Create a new virtualenv (venv) that is located on your computer."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:152
+msgid ""
+"Install your package into the environment in editable mode (similar to "
+"`python -m pip install -e`). This means it installs both your project and"
+" your project's dependencies as declared in your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:154
+msgid "Step 2: Build your package's sdist and wheel distributions"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:156
+msgid ""
+"Once you have your development environment setup, you are ready to build "
+"your package using Hatch. Remember that building is the process of "
+"turning your Python package file structure into two distribution files:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:158
+msgid ""
+"The [wheel distribution](#python-wheel) is a pre-built version of your "
+"package. It useful for users as it can be directly installed using a tool"
+" such as `pip`. This file has the extension `.whl`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:159
+msgid ""
+"The [source distribution](#python-source-distribution) contains the files"
+" that make up your package in an unbuilt format. This file will have the "
+"extension `.tar.gz`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:161
+msgid ""
+"You will use Hatch as a **Front end** tool that builds your package's "
+"sdist and wheel using the [hatchling](https://hatch.pypa.io/latest/) "
+"build back-end. The hatchling build back-end is used because you declared"
+" it in your pyproject.toml file in the [previous lesson](create-python-"
+"package)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:165
+msgid "To build your package run `hatch build`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:176
+msgid "Learn more about building a Python package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:178
+msgid ""
+"You can learn more about building in the [build page of our packaging "
+"guide](../package-structure-code/python-package-distribution-files-sdist-"
+"wheel)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:182
+msgid ""
+"The sdist is important if you wish to [publish your package to conda-"
+"forge](publish-conda-forge). You will learn about this in a later lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:186
+msgid ""
+"➜ hatch build ────────────────────────────────────── sdist "
+"────────────────────────────────────── dist/pyospackage-0.1.tar.gz "
+"────────────────────────────────────── wheel "
+"────────────────────────────────────── dist/pyospackage-0.1-py3-none-"
+"any.whl"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:193
+msgid ""
+" Congratulations - "
+"you've created your Python package distribution files "
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:195
+msgid ""
+"You've now built your Python package and created your package "
+"distribution files. The next step is to setup your account on TestPyPI so"
+" you can publish your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:198
+msgid "Step 3. Setup your TestPyPI account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:200
+msgid ""
+"Next, you'll setup an account on TestPyPI. Remember that you are using "
+"TestPyPI here instead of the real PyPI as a way to safely learn how to "
+"publish a package without accidentally \"releasing\" your package before "
+"it's ready."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:204
+msgid "TestPyPI vs. PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:205
+msgid ""
+"If you have a package that you are confident belongs on PyPI, all of the "
+"steps below will also work for you. When you publish using Hatch, you "
+"will call `hatch publish` to publish directly to PyPI instead of `hatch "
+"publish -r test` which publishes to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:208
+msgid ""
+"[Open up a web browser and go to the TestPyPI "
+"website](https://test.pypi.org/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:209
+msgid ""
+"[Create an account](https://test.pypi.org/account/register/) if you don't"
+" already have one. Be sure to store your password in a safe place!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:210
+msgid "Once you have an account setup, login to it."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:211
+msgid ""
+"Search on [https://test.pypi.org/](https://test.pypi.org/) (and also on "
+"[https://pypi.org/](https://pypi.org/)) to ensure that the package name "
+"that you have selected doesn't already exist. If you are using our test "
+"pyosPackage, then we suggest that you add your name or GitHub username to"
+" the end of the package name to ensure it's unique."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:213
+msgid "Example: `pyosPackage_yourNameHere`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:215
+msgid ""
+"How to rename your Python package if the name is already taken in (test) "
+"PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:219
+msgid "Required"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:221
+msgid ""
+"Search your publishing location(s) to make sure your new name isn't taken"
+" ([TestPyPI](https://test.pypi.org/), [PyPI](https://pypi.org/), [conda-"
+"forge](https://conda-forge.org/packages/))"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:222
+msgid ""
+"Update the project name in your pyproject.toml file (e.g. `name = "
+"\"pyospackage_yourNameHere\"`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:223
+msgid ""
+"Update the module folder name to be the same (e.g. "
+"`src/pyospackage_yourNameHere`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:224
+msgid "Rebuild your project (`hatch build`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:225
+msgid "Publish your package to capture the name (continue this tutorial!)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:227
+msgid "Recommended"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:229
+msgid "Update the GitHub repository name to align with the new package name"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:230
+msgid ""
+"Update your local project folder to match the new package name (e.g. "
+"`pyospackage_yourNameHere/src`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:231
+msgid "Update mentions of your repository name in other files (e.g. `README.md`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:235
+msgid ""
+"This is a screenshot of the TestPyPI website. At the top in the search "
+"bar, you can see the search for pyosPackage. The search return says there"
+" were no results for pyosPackage Did you mean probpackage"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:237
+msgid ""
+"Before you try to upload to TestPyPI, check to see if the name of your "
+"package is already taken. You can do that using the search box at the top"
+" of the TestPyPI website."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:241
+msgid "Setup 2-factor (2FA) authentication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:243
+msgid ""
+"2-factor authentication is a secure login process that allows you to use "
+"a backup device that only you can access to validate that the person "
+"logging in is really you. It addresses the issue of password phishing "
+"where someone else gains access to a password and can login to your "
+"account."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:246
+msgid ""
+"This matters on PyPI because someone could login to your account and "
+"upload a version of your package that has security issues. These issues "
+"will then impact all of your users when they download and install that "
+"version of the package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:248
+msgid ""
+"2-factor authentication is required for PyPI authentication as of 1 "
+"January 2024."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:252
+msgid "Step 4. Create a package upload token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:254
+msgid ""
+"To upload your package to TestPyPI (or PyPI), you will need to create a "
+"token for your account first, and should then create a package-specific "
+"token. (If you completed this step previously, you can reuse the tokens "
+"when you upload your package again.)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:256
+msgid "Why create package-specific tokens?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:258
+msgid ""
+"It's ideal to create a package-specific token. When you create an "
+"account-wide token this allows anyone with access to the account to then "
+"access all of your TestPyPI (or PyPI) projects. By creating a package-"
+"specific token, you are limiting the scope of the token to only your "
+"specific package. This is just a safe way to set things up for you "
+"particularly if you are collaborating with others on package development."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:261
+msgid "Follow the steps below to create your token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:263
+msgid "Login to TestPyPI and go to your account settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:264
+msgid "Scroll down to the **API tokens** section"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:265
+msgid "Click on the **Add API Token** button"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:266
+msgid ""
+"If you are new to using TestPyPI and don't have any packages there yet, "
+"OR if you have other packages on TestPyPI but are uploading a new "
+"package, you will need to create an account-wide token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:267
+msgid ""
+"When you create your token, be sure to copy the token value and store it "
+"in a secure place before closing that browser."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:269
+msgid "Your token should look something like this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:271
+msgid "`pypi-abunchofrandomcharactershere...`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:273
+msgid "It should start with `pypi` followed by a dash and a bunch of characters."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:275
+msgid "Upload to TestPyPI using Hatch"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:277
+msgid "Once you have your token, you are ready to publish to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:280
+msgid "Run `hatch publish -r test`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:282
+msgid ""
+"`-r` stands for repository. In this case because you are publishing to "
+"TestPyPI you will use `-r test`. Hatch will then ask for a username and "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:284
+msgid ""
+"Add the word `__token__` for your username. This tells TestPyPI that you "
+"are using a token value rather than a username."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:285
+msgid "Paste your TestPyPI token value in at the `Enter your credentials` prompt:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:296
+msgid ""
+"If your credentials are valid, and you have already run `hatch build` and"
+" thus have your 2 distribution files in a `dist/` directory then Hatch "
+"will publish your package to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:300
+msgid ""
+"Hatch also has a caching system so once you enter your credentials it "
+"will remember them."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:303
+msgid "Install your package from TestPyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:305
+msgid ""
+"Once your package upload is complete, you can install it from TestPyPI. "
+"You can find the installation instructions on the TestPyPI landing page "
+"for your newly uploaded package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:310
+msgid ""
+"A screenshot of the TestPyPI page for pyosPackage. It says pyosPackage "
+"0.1.0 at the top with the pip install instructions below. The landing "
+"page of the package has information from the package's README file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:312
+msgid ""
+"This is an example landing page for the pyosPackage that was just "
+"uploaded. Notice at the top of the page there are instructions for how to"
+" install the package from TestPyPI. You can simply copy that code and use"
+" it to install your package from TestPyPI locally."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:315
+msgid ""
+"As an example, [check out our pyOpenSci pyosPackage landing page on "
+"TestPyPI](https://test.pypi.org/project/pyosPackage/). Notice that the "
+"page has information about the current package version and also "
+"installation instructions as follows:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:319
+msgid "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:322
+msgid ""
+"Publishing to TestPyPI vs PyPI While you can install from TestPyPI it's "
+"not recommended that you publish to TestPyPI as a permanent way to "
+"install your package. In fact, you cannot, because TestPyPI may delete "
+"accounts after a time. TestPyPI is a perfect place to learn how to "
+"publish your package and test the installation process. But your end goal"
+" should be to publish to PyPI once you have figured out your workflow and"
+" your package is ready to deploy."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:326
+msgid "Time to install your package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:328
+msgid ""
+"On your computer, activate the development environment that you wish to "
+"install your newly published package in."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:330
+msgid "Run the installation instructions for your package from TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "Conda"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "venv Mac / Linux"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:354
+msgid "The value of end-to-end tools like hatch, flit and poetry"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:355
+msgid ""
+"In this lesson you are using Hatch and hatchling to create, build and "
+"publish your Python package. [Click here to learn about other packaging "
+"tools in the ecosystem.](../package-structure-code/python-package-build-"
+"tools.md)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:359
+msgid ""
+"teach them to setup trusted publisher for actions... in the actions "
+"lesson https://pypi.org/help/#twofa"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:362
+msgid ""
+"from PyPI: https://pypi.org/help/#apitoken - You can create a token for "
+"an entire PyPI account, in which case, the token will work for all "
+"projects associated with that account. Alternatively, you can limit a "
+"token's scope to a specific project."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:365
+msgid "Package-specific token vs trusted publisher"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:367
+msgid ""
+"For long run maintenance of your package, you have two options related to"
+" PyPI publication."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:370
+msgid ""
+"You can create a package-specific token which you will use to publish "
+"your package (manually) to PyPI. This is a great option if you don't wish"
+" to automate your PyPI publication workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:371
+msgid ""
+"You can also create an automated publication workflow on GitHub using "
+"GitHub Actions. This is a great way to make the publication process "
+"easier and it also supports a growing maintainer team. In this case we "
+"suggest you don't worry about the token and instead setup a specific "
+"GitHub Actions that publishes your package when you make a release. You "
+"can then create a \"trusted publisher\" workflow on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:373
+msgid "Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:376
+msgid ""
+"While publishing from GitHub Action is possible using tokens, we "
+"recommend the _Trusted Publishing_ approach as it also confers "
+"significant security and usability benefits."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:378
+msgid ""
+"On the usability front, when Trusted Publishing is enabled, users no "
+"longer need to manually create API tokens on PyPI and store them in the "
+"GitHub release workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:380
+msgid ""
+"On the security front, Trusted Publishing reduces a risk related to the "
+"API token being long lived: with API tokens, as soon as an attacker gets "
+"access to it, they can publish many packages and versions in your name "
+"(depending on the scope of the token), until you discover the token "
+"compromise and rotate the credential. Trusted Publishing avoids this "
+"problem by minting very short lived tokens which expire automatically."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:382
+msgid ""
+"For these benefits, it is recommended that users use _only_ the GitHub "
+"Actions release workflow to publish packages."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:385
+msgid ""
+"You will learn how to create the automated trusted publisher workflow in "
+"a followup lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:387
+msgid "OPTIONAL: If you want to use a manual token-based publication workflow"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:389
+msgid ""
+"If you plan to use your token regularly to publish to PyPI, we strongly "
+"recommend going through the above steps again to create a token specific "
+"to your new package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:392
+msgid "To do this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:393
+msgid "Go to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:394
+msgid "Navigate to the \"Your Projects\" section of your account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:395
+msgid ""
+"Click on the manage button for the project that you wish to add a token "
+"for"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:396
+msgid "Go to settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:397
+msgid "Click on \"Create a token for your-package-name-here\""
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:398
+msgid ""
+"Create the token and follow the steps above publish your package using "
+"the repository specific token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:400
+msgid "And you're all done!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:402
+msgid "Trusted Publishing instead of token-based publication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:405
+msgid ""
+"Trusted Publishing will generate short lived tokens, scoped to the "
+"project, on demand, only when a specific release workflows gets "
+"triggered. This solves all the security and usability issues associated "
+"with storing credentials in files/GitHub secrets."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:411
+msgid "You have published your package to TestPyPI!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:413
+msgid ""
+"Congratulations. You have now successfully published your package to "
+"TestPyPI. If you have a package that is ready for real-world use on the "
+"real PyPI, then you can follow the same steps (with the differences noted"
+" above) to publish it on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:415
+msgid ""
+"Once you publish on PyPI, you can then easily add your package to the "
+"conda-forge ecosystem using the [grayskull](https://conda-"
+"forge.org/blog/posts/2020-03-05-grayskull/) tool."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:417
+msgid "You will learn how to do that in the next lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:421
+msgid "https://docs.python.org/3/library/venv.html"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:6
+msgid "Make your Python package PyPI ready - pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:8
+msgid ""
+"In [the installable code lesson](create-python-package), you learned how "
+"to add the bare minimum information to a `pyproject.toml` file to make it"
+" installable. You then learned how to publish a bare minimum version of "
+"your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:13
+msgid "Following that you learned how to add a:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:14
+msgid "[README.md](add-readme)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:15
+msgid "[LICENSE](add-license-coc) and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:16
+msgid "[CODE_OF_CONDUCT](add-coc)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:18
+msgid "to the root of your project directory."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:20
+msgid ""
+"To enhance the visibility of your package on PyPI and provide more "
+"information about its compatibility with Python versions, project "
+"development status, and project maintainers, you should add additional "
+"metadata to your `pyproject.toml` file. This lesson will guide you "
+"through the process."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:32
+msgid ""
+"More about the `pyproject.toml` file and how it's used to store different"
+" types of metadata about your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:33
+msgid ""
+"How to declare information (metadata) about your project to help users "
+"find and understand it on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:35
+msgid ""
+"If you wish to learn more about the `pyproject.toml` format, [check out "
+"this page. ](../package-structure-code/pyproject-toml-python-package-"
+"metadata.md)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Click for lesson takeaways"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:42
+msgid "When creating your pyproject.toml file, consider the following:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:44
+msgid ""
+"There are only two required metadata tables that you need to install and "
+"publish your Python package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:45
+msgid "**[build-system]**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:46
+msgid "**[project]**."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:47
+msgid ""
+"The **[project]** table stores your package's metadata. Within the "
+"**[project]** table, There are only two _required_ fields:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:48
+msgid "**name=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:49
+msgid "**version=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:50
+msgid ""
+"You should add more metadata to the `[project]` table as it will make it "
+"easier for users to find your project on PyPI. And it will also make it "
+"easier for installers to understand how to install your package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:51
+msgid ""
+"When you are adding classifiers to the **[project]** table, only use "
+"valid values from [PyPI's classifier "
+"page](https://PyPI.org/classifiers/). An invalid value here will raise an"
+" error when you build and publish your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:52
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However, fields need to be placed within the correct tables. For example "
+"`requires =` always need to be in the **[build-system]** table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:53
+msgid ""
+"We suggest that you include your **[build-system]** table at the top of "
+"your `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:58
+msgid ""
+"The `pyproject.toml` file is a human and machine-readable file that "
+"serves as the primary configuration file for your Python package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:63
+msgid ""
+"[Building your package](build-package) is the step that created the "
+"distribution files that are required for you to publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:67
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:69
+#, python-brace-format
+msgid ""
+"The **pyproject.toml** file is written in {term}`TOML` format. TOML is an"
+" easy-to-read structure that is based on key/value pairs. Each section in"
+" the **pyproject.toml** file contains a `[table identifier]`. The TOML "
+"format can be compared to other structured formats such as `.json`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:74
+msgid ""
+"Below you can see the `[build-system]` table. Within that table there are"
+" two required key/value pairs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:77
+msgid ""
+"`requires =` is the key and the value is `[\"hatchling\"]` within the "
+"`[build-system]` array specified by square brackets `[]`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:87
+msgid "What is the pyproject.toml used for?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:89
+msgid "The pyproject.toml file tells your build tool:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:91
+#, python-brace-format
+msgid ""
+"What {term}`Build backend` to use to build your package (we are using "
+"{term}`Hatchling` in this tutorial but there are [many others to choose "
+"from](/package-structure-code/python-package-build-tools))."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:94
+msgid "How and where to retrieve your package's version:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:95
+msgid "**statically** where you declare the version `version = \"0.1.0\"` or"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:96
+msgid ""
+"**dynamically** where the tool looks to the most recent tag in your "
+"history to determine the current version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:97
+#, python-brace-format
+msgid "What {term}`Dependencies` your package needs"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:98
+msgid "What versions of Python your package supports (important for your users)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:100
+msgid ""
+"The `pyproject.toml` file also makes it easy for anyone browsing your "
+"GitHub repository to quickly understand your package's structure such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:103
+msgid "How your package is built,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:104
+msgid "What Python versions and operating systems it supports"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:105
+msgid "What it does,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:106
+msgid "Who maintains it"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:108
+msgid ""
+"Finally, the pyproject.toml file is also often used to configure tools "
+"such as static type checkers (e.g. mypy) and code formatters/linters "
+"(e.g. black, ruff)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:111
+msgid ""
+"Check out the [PyPA "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend) if you are interested in "
+"setting build configurations for other tools."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:113
+msgid ""
+"Note that some build tools may deviate in how they store project "
+"metadata. As such you may want to refer to their documentation if you "
+"decide to use a tool other than Hatch and hatchling. We have selected "
+"hatchling and hatch as our tool of choice for this tutorial as it adheres"
+" to PyPA rules and guidelines."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:117
+msgid "How is pyproject.toml metadata used?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:119
+msgid ""
+"The pyproject.toml file is the file that your build tool uses to populate"
+" a `METADATA` that is included in your Python distribution files that get"
+" published to PyPI. This `METADATA` file is then used by PyPI to populate"
+" your package's PyPI landing page and help users filter through the tens "
+"of thousands of packages published there."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:122
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:127
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:133
+msgid "A more in-depth overview of pyproject.toml files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:135
+msgid ""
+"[Our guidebook page has a more in depth overview of this file"
+"](../package-structure-code/pyproject-toml-python-package-metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:138
+msgid "How to update your pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:140
+msgid ""
+"In the last lesson, you created a bare-bones pyproject.toml file that "
+"contained the core elements needed to build your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:144
+msgid ""
+"A `[build-system]` table where you defined your project's backend build "
+"tool (`hatchling`)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:145
+msgid "A `[project]` table where you defined your project's version and name."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:147
+msgid "The `pyproject.toml` file that you created, looked like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:159
+msgid ""
+"Your next step is to add additional recommended metadata fields that will"
+" both help users find your package on PyPI and also better describe the "
+"scope of your package. Once you add this metadata, you don't have to do "
+"it again. These metadata fields will only be updated periodically when "
+"you do something such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:162
+msgid "drop a package dependency"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:163
+msgid "modify what Python versions your package supports."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:165
+msgid "More on hatchling"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:168
+msgid ""
+"The documentation for the hatchling back-end is "
+"[here](https://hatch.pypa.io/latest/config/metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:171
+msgid "Step 1: Add Author, maintainer and project description"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:173
+msgid ""
+"After completing the [installable code tutorial](create-python-package), "
+"you should have a pyproject.toml file with a project name and a version "
+"in the `[project]` table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:181
+msgid "Add the following to your table:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:183
+msgid ""
+"A **description** of your package. This should be a single line and "
+"should briefly describe the goal of your package using non technical "
+"terms if as all possible!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:184
+msgid "package **authors**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:185
+msgid "package **maintainers**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:187
+msgid "The `description` is just a string like the other values you've set:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:198
+msgid ""
+"When you add authors and maintainers you need to use a format that will "
+"look like a Python list with a dictionary within it:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:212
+msgid "Author names & emails"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:216
+msgid ""
+"There is a quirk with PyPI for authors that have names but not emails in "
+"the pyproject.toml. If you are missing the email for one or more authors "
+"or maintainers, like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:225
+msgid ""
+"Then we suggest that you only provide names in your list of names to "
+"ensure that everything renders properly on your PyPI page - like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:234
+msgid "don't have emails for everyone, we suggest that you only add names."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:237
+msgid ""
+"Your `pyproject.toml` file now should look like the example below. It is "
+"OK if you only have 1 author and the same author is also maintainer of "
+"your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid ""
+"Learn More: What's the difference between author and maintainer in open "
+"source?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:265
+msgid ""
+"When adding maintainers and authors, you may want to think about the "
+"difference between the two."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:267
+msgid "Authors generally include people who:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:268
+msgid "originally created / designed developed the package and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:269
+msgid "people who add new functionality to the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:271
+msgid ""
+"Whereas maintainers are the people that are currently, actively working "
+"on the project. It is often the case that there is overlap in authors and"
+" maintainers. As such these lists may be similar or the same."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:273
+msgid ""
+"A good example of when the lists might diverge is sometimes you have a "
+"package where an initial author developed it and then stepped down as a "
+"maintainer to move on to other things. This person may continue to be "
+"considered an author but no longer actively maintains the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:275
+msgid ""
+"It is important to note that there are many ways to define author vs "
+"maintainer and we don't prescribe a single approach in this tutorial."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:277
+msgid ""
+"However, we encourage you to consider carefully, for PyPI publication, "
+"who you want to have listed as authors and maintainers on your PyPI "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:281
+msgid "Step 2: Add README and license"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:283
+msgid ""
+"In the previous lessons, you added both a [README.md](add-readme) file "
+"and a [LICENSE](add-license-coc) to your package repository. Once you "
+"have those files, you can refer to the README from your pyproject.toml "
+"file, and add a short code indicating your choice of LICENSE following "
+"the example below."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:312
+msgid ""
+"The license entry in your pyproject.toml file must use the [license "
+"expression syntax](https://packaging.python.org/en/latest/specifications"
+"/license-expression/). Often this is a short name (with no spaces) for "
+"the license, such as \"MIT\", \"BSD-3-Clause\" or \"Apache-2.0\". More "
+"precisely, it must be a valid SPDX license expression, as documented in "
+"the [SPDX specification](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-"
+"license-expressions/), either version 2.2 or a later compatible version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:314
+msgid ""
+"If you have multiple licenses, or a custom license, you can also express "
+"these using a license expression."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:316
+msgid ""
+"If you want to distribute license files, or other files containing legal "
+"information, with your package, you can include these using the "
+"[`license-files`](https://packaging.python.org/en/latest/guides/writing-"
+"pyproject-toml/#license-files) entry, but this is not required."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:318
+msgid "Step 3: Specify Python version with `requires-python`"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:320
+msgid ""
+"Add the `requires-python` field to your `pyproject.toml` `[project]` "
+"table. The `requires-python` field helps pip identify which Python "
+"versions that your package supports. It is set to a single value. The "
+"[packaging "
+"specification](https://packaging.python.org/en/latest/specifications"
+"/core-metadata/#core-metadata-requires-python) defines`requires-python` "
+"as a string that uses version specifiers. Most projects will specify the "
+"oldest Python version supported by the package. In some advanced cases, "
+"an upper bound is set to indicate which future Python versions, if any, "
+"will be supported."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:325
+msgid "But how do I figure out which Python versions I should support?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:327
+msgid ""
+"Good question. The Python developer guide provides a [status "
+"page](https://devguide.python.org/versions/) (and a handy visualization) "
+"that explains the status of each Python release. Python releases go "
+"through several different phases that are explained in [PEP "
+"602](https://peps.python.org/pep-0602/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:329
+msgid ""
+"We recommend that you use the latest Python release in the **bugfix** "
+"phase. If your Python release is in the **security** phase, we recommend "
+"migrating to a newer version of Python."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:331
+msgid ""
+"[SPEC 0](https://scientific-python.org/specs/spec-0000/) of the "
+"Scientific Python project suggests a common schedule for dependencies, "
+"including Python release versions, and is also worth considering for your"
+" project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:360
+msgid "Step 4: Specify Dependencies"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:362
+msgid ""
+"Next add your dependencies table to the project table. The `dependencies "
+"=` section contains a list (or array in the toml language) of the Python "
+"packages that your package requires to run properly in a Python "
+"environment. Similar to the requirements listed in the `[build-system]` "
+"table above:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:370
+msgid "dependencies are added in an array (similar to a Python list) structure."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:376
+msgid ""
+"A dependency can be limited to specific versions using a **version "
+"specifier.** If the dependency has no version specifier after the "
+"dependency name, your package can use any version of the dependent "
+"package. Code changes over time, bugs are fixed, APIs change, and so it's"
+" good to be clear about which version of the dependency you wrote your "
+"code to be compatible with - a package you wrote this year probably isn't"
+" compatible with numpy v0.0.1!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:380
+msgid ""
+"[Learn more about various ways to specify ranges of package versions "
+"here.](https://packaging.python.org/en/latest/specifications/version-"
+"specifiers/#id5)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:382
+msgid ""
+"The most common version specifier is a **lower bound,** allowing any "
+"version higher than the specified version. Ideally you should set this to"
+" the lowest version that is still compatible with your package, but in "
+"practice for new packages this is often set at the version that was "
+"current at the time the package was written[^lowerbound]."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:387
+msgid "Lower bounds look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:393
+msgid ""
+"Commas are used to separate individual dependencies, and each package in "
+"your `dependencies` section can use different types of version "
+"specifiers:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:404
+msgid "Your `pyproject.toml` file will now look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:434
+msgid "Pin dependencies with caution"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:435
+msgid ""
+"\"Pinning\" a dependency means setting it to a specific version, like "
+"this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:437
+msgid "`numpy == 1.0`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:439
+msgid ""
+"If you are building a library package that other developers will depend "
+"upon, you must be cautious before pinning to a precise dependency "
+"version. Applications, such as production websites, will often pin their "
+"dependencies since other packages will not depend on their project. This "
+"is because users will be installing your package into various "
+"environments. A dependency pinned to a single specific version can make "
+"resolving a Python environment more challenging. As such only pin "
+"dependencies to a specific version if you absolutely need to do so."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:447
+msgid ""
+"Similarly, you should be cautious when specifying an upper bound on a "
+"package. These two specifications are equivalent:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:455
+msgid ""
+"One build tool that you should be aware of that pins dependencies to an "
+"upper bound by default is Poetry. [Read more about how to safely add "
+"dependencies with Poetry, here.](challenges-with-poetry)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:458
+msgid "Step 5: Add PyPI classifiers"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:460
+msgid ""
+"Next you will add classifiers to your `pyproject.toml` file. The value "
+"for each classifier that you add to your `pyproject.toml` file must come "
+"from the list of [PyPI accepted classifier values found "
+"here](https://PyPI.org/classifiers/). Any deviations in spelling and "
+"format will cause issues when you publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:462
+msgid "What happens when you use incorrect classifiers?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:465
+msgid ""
+"If you do not [use standard classifier "
+"values](https://PyPI.org/classifiers/), when you try to publish your "
+"package on PyPI it will be rejected. 😔 Don't worry if PyPI rejects you on"
+" your first try! It has happened to all of us."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:468
+msgid "Review that list and add items below to your `pyproject.toml` file:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:470
+msgid "development status"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:471
+msgid "intended audiences"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:472
+msgid "topic"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:473
+msgid "programming language support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:475
+msgid ""
+"The classifier key should look something like the example below. A few "
+"notes:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:477
+msgid ""
+"Your classifier values might be different depending upon your intended "
+"audience, development status of your package and the Python versions that"
+" you support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:478
+msgid ""
+"You can add as many classifiers as you wish as long as you use the "
+"[designated PyPI classifier values](https://PyPI.org/classifiers/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:517
+msgid ""
+"Note that while classifiers are not required in your `pyproject.toml` "
+"file, they will help users find your package. As such we strongly "
+"recommend that you add them."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:519
+msgid "Step 6: Add the `[project.urls]` table"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:521
+msgid "Finally, add the project.urls table to your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:523
+msgid ""
+"`project.urls` contains links that are relevant for your project. You "
+"might want to include:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:525
+msgid ""
+"**Homepage:** A link to your published documentation for your project. If"
+" you are working through this tutorial, then you may not have this link "
+"yet. That's ok, you can skip it for the time being."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:526
+msgid ""
+"**Bug reports:** a link to your issues/discussions or wherever you want "
+"users to report bugs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:527
+msgid "**Source:** the GitHub / GitLab link for your project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:572
+msgid ""
+"There are many other urls that you can add here. Check out the [README "
+"file here for an overview](https://github.com/patrick91/links-demo)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:575
+msgid "Putting it all together - your completed pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:577
+msgid ""
+"Below is an example of a complete `pyproject.toml` file that is commented"
+" with all of the sections we discussed above."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Appendix - Click for a fully commented pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:626
+msgid ""
+"Below is a fully commented pyproject.toml file if you want to use it for "
+"reference."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:692
+msgid "Example `pyproject.toml` files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:694
+msgid ""
+"Below are some examples of `pyproject.toml` files from various packages "
+"in the scientific and pyOpenSci ecosystem."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:695
+msgid ""
+"[PyPA's fully documented example pyproject.toml "
+"file](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:696
+msgid ""
+"[taxpasta has a nicely organized pyproject.toml file and is a pyOpenSci "
+"approved "
+"package](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a53dd49ad77e4cf143573/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:702
+msgid "At this point you've created:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:704
+msgid "A [README.md](add-readme) file for your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:705
+msgid "A [CODE_OF_CONDUCT.md](add-coc) file to support your user community"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:706
+msgid ""
+"And a [LICENSE](add-license-coc) file which provides legal boundaries "
+"around how people can and can't use your software"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:708
+msgid ""
+"You also learned [how to publish your package to (test)PyPI](publish-"
+"pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:710
+msgid "Publish a new version of your package to PyPI"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:712
+msgid ""
+"You are now ready to publish a new version of your Python package to "
+"(test) PyPI. When you do this you will see that the landing page for your"
+" package now contains a lot more information."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:714
+msgid "Try to republish now."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:716
+msgid ""
+"First, update the version of your package in your pyproject toml file. "
+"Below version is updated from `0.1` to `0.1.1`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:729
+msgid "Now use hatch to publish the new version of your package to test.PyPI.org."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:736
+msgid "Next (optional) step - publishing to conda-forge"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:738
+msgid ""
+"You now have all of the skills that you need to publish your package to "
+"PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:741
+msgid ""
+"If you also want to publish your package on conda-forge (which is a "
+"channel within the conda ecosystem), you will learn how to do that in the"
+" next lesson."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:745
+msgid ""
+"Really good resources from jeremiah "
+"https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet "
+"useful (and the linked links-demo even more so)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:385
+msgid ""
+"Some packaging tools will do this for you when you add a dependency using"
+" their cli interface. For example [`poetry add`](https://python-"
+"poetry.org/docs/cli/#add) will add the most recent version with a `^` "
+"specifier, and [`pdm add`](https://pdm-"
+"project.org/latest/reference/cli/#add) will add the most recent version "
+"with `>=`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:10
+msgid ""
+"Python supports inline metadata for scripts (a feature added in 2024). "
+"This makes it possible to run standalone scripts with dependencies and "
+"Python versions managed automatically."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:14
+#, python-brace-format
+msgid ""
+"Many tools support this workflow, including PDM, [Hatch](get-to-know-"
+"hatch), and {term}`uv`. In this tutorial, we focus on Hatch and UV. The "
+"same metadata format can also be used with other tools."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:22
+msgid ""
+"[Hatch: How to run Python scripts](https://hatch.pypa.io/latest/how-"
+"to/run/python-scripts/)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:23
+msgid ""
+"[uv: Running "
+"scripts](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-"
+"script)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:26
+msgid "How to create a reproducible script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:28
+#, python-brace-format
+msgid ""
+"Sometimes you want to share or run a single script without creating a "
+"full {term}`Python package`. To do this, you can use inline script "
+"metadata. This format lets you specify dependencies and Python versions "
+"at the top of your script in a comment block."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:34
+msgid ""
+"When you add metadata at the top of a script, Hatch (or PDM or uv) will "
+"use that metadata to:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:37
+msgid "Create an isolated virtual Python environment for that script."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:38
+#, python-brace-format
+msgid ""
+"Install the {term}`Dependencies` listed in the script into that "
+"environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:39
+msgid "Use the required Python version that you specify in the metadata."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:41
+msgid ""
+"This approach is useful for workflows that you want to make reproducible,"
+" but that do not need to become full Python packages."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:44
+msgid "Why use Hatch for scripts?"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:46
+msgid ""
+"Inline metadata helps you make scripts reproducible. Anyone can run your "
+"script without manually creating a new environment or guessing which "
+"dependencies it needs. Hatch takes care of installing dependencies and "
+"using the correct Python version."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:51
+msgid "How to add inline metadata to your script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:53
+msgid ""
+"You will use Hatch in this example, but you can also use uv if that is "
+"your preferred tool."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:56
+#, python-brace-format
+msgid ""
+"First, create a new file named `script.py` with the block below at the "
+"top. The metadata block starts with `# /// script` and ends with `# ///`."
+" Everything in between must be {term}`TOML` metadata written as comments."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:60
+msgid ""
+"In the example below, the script requires Python 3.11 or newer, and NumPy"
+" is declared as a dependency."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:81
+msgid "Run the script with Hatch"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:83
+msgid ""
+"Open your terminal and change to the directory where `script.py` lives. "
+"Then run:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:90
+msgid ""
+"On first run, Hatch will create an environment and install dependencies. "
+"On later runs, Hatch will reuse that environment so startup is faster."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:94
+msgid ""
+"The environment name is based on the script path. If you move the script "
+"to a new location, Hatch will treat it as a new script environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:98
+msgid "Optional: configure script environment behavior"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:100
+msgid ""
+"You can control script-specific Hatch behavior in the same metadata "
+"block. For example, to use `pip` instead of `uv` as the installer:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:113
+msgid "Run the same script with uv"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:115
+msgid "If you prefer uv, you can run the same inline-metadata script with:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:121
+msgid ""
+"The same `# /// script` metadata block works with uv, including "
+"`requires-python` and `dependencies`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:124
+msgid ""
+"For more on using uv to run scripts, see the guide: [Running scripts with"
+" uv](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:128
+msgid "When to use scripts vs. packages"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:130
+msgid "You may be wondering when to use scripts versus creating a package."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:132
+msgid "This depends on your use case. Scripts are often useful when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:134
+msgid "You have one small task, or a specific workflow that is not generalizable."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:135
+msgid ""
+"Your workflow is still evolving, but you want to run it in a reproducible"
+" environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:137
+msgid "You want reproducible dependencies quickly."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:138
+msgid "You are sharing a single file with collaborators."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:140
+msgid "Create a full package when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:142
+msgid "You are building reusable modules for multiple projects."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:143
+msgid "You need tests, documentation, releases, and long-term maintenance."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:144
+msgid "Your codebase is growing beyond one or two scripts."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:148
+msgid "[Get to know Hatch](get-to-know-hatch.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:149
+msgid "[Create a Python package](create-python-package.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:150
+msgid "[Command line reference guide](command-line-reference.md)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:7
+msgid "Using Hatch to Migrate setup.py to a pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:9
+msgid ""
+"[Hatch](get-to-know-hatch) can be useful for generating your project's "
+"[pyproject.toml](pyproject-toml) file if your project already has a "
+"`setup.py` file."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:13
+msgid "Note"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:16
+msgid ""
+"This step is not necessary and is only helpful if your project already "
+"has a `setup.py` file defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:17
+msgid ""
+"If your project does not already define a `setup.py` see [Make your "
+"Python code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:25
+msgid ""
+"The process of using Hatch to transition to using `pyproject.toml` for "
+"projects that already have a `setup.py` defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:28
+msgid "What is Hatch?"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:30
+#, python-brace-format
+msgid ""
+"Hatch is a Python package manager designed to streamline the process of "
+"creating, managing, and distributing Python packages. It provides a "
+"convenient CLI (Command-Line Interface) for tasks such as creating new "
+"projects, managing {term}`Dependencies`, building distributions, and "
+"publishing packages to repositories like [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:40
+msgid "See [Get to know Hatch](get-to-know-hatch) for more information."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:43
+msgid "Prerequisites"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:45
+msgid ""
+"Before we begin, ensure that you have Hatch installed on your system. You"
+" can install it via pip:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:51
+msgid "Sample Directory Tree"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:53
+msgid ""
+"Let's take a look at a sample directory tree structure before and after "
+"using `hatch init`:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:55
+msgid "Before `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:71
+msgid "After `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:89
+msgid ""
+"As you can see, the main change after running `hatch init` is the "
+"addition of the `pyproject.toml` file in the project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:91
+msgid "Step-by-Step Guide"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:93
+msgid ""
+"Now, let's walk through the steps to use Hatch to create a "
+"`pyproject.toml` file for your project."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:95
+msgid ""
+"**Navigate to Your Project Directory**: Open your terminal or command "
+"prompt and navigate to the directory where your Python project is "
+"located."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:97
+msgid ""
+"**Initialize Hatch**: Run the following command to initialize Hatch in "
+"your project directory:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:103
+msgid ""
+"**Review and Customize**: After running the previous command, Hatch will "
+"automatically generate a `pyproject.toml` file based on your existing "
+"project configuration. Take some time to review the contents of the "
+"generated `pyproject.toml` file. You may want to customize certain "
+"settings or dependencies based on your project's requirements (see "
+"[pyproject.toml tutorial](pyproject-toml) for more information about the "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:105
+msgid ""
+"**Verify**: Verify that the `pyproject.toml` file accurately reflects "
+"your project configuration and dependencies. You can manually edit the "
+"file, but be cautious and ensure that the syntax is correct."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:107
+msgid ""
+"**Delete setup.py**: Since we're migrating to using `pyproject.toml` "
+"exclusively, the `setup.py` file becomes unnecessary. You can safely "
+"delete it from your project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:109
+msgid ""
+"**Test Build**: Before proceeding further, it's essential to ensure that "
+"your project builds successfully using only the `pyproject.toml` file. "
+"Run the following command to build your project:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:115
+msgid ""
+"This command will build your project based on the specifications in the "
+"`pyproject.toml` file. Make sure to check for any errors or warnings "
+"during the build process."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:117
+msgid ""
+"**Test Existing Functionality**: After successfully building your project"
+" with `pyproject.toml`, it's crucial to ensure that your project's "
+"existing functionality remains intact. Run any pre-existing tests to "
+"verify that everything still works as expected."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:6
+msgid ""
+"Setup Trusted Publishing for secure and automated publishing via GitHub "
+"Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:8
+msgid "In the previous Python packaging lessons, you learned:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:10
+msgid "[How to create a Python package](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:11
+msgid ""
+"How to publish the code to [PyPI](publish-pypi) and [Conda](publish-"
+"conda-forge)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:16
+msgid "In this lesson, you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:18
+msgid "Automate building and publishing the package on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:19
+#, python-brace-format
+msgid "Configure {term}`Trusted publishing` for the project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:20
+msgid ""
+"Secure your workflow using GitHub action hashes and versions in your "
+"workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:22
+msgid ""
+"This tutorial assumes that your project is hosted on GitHub and that you "
+"want to publish a package from your project to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:26
+msgid "Configure a release job on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:28
+msgid ""
+"GitHub Actions[^gha] is an infrastructure provided by GitHub to automate "
+"software workflows, straight from the GitHub repository of the project. "
+"You can configure automated testing for every pull request, automate "
+"publishing of documentation, automate creation of web pages for the "
+"project, and even automate the release process. For this lesson, we will "
+"focus on using actions to release and publish your Python package "
+"securely to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:36
+msgid "Why Trusted Publishing Matters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:38
+msgid ""
+"If you are wondering why trusted publishing is so important, [check out "
+"this blog post:](https://www.pyopensci.org/blog/python-packaging-"
+"security-publish-pypi.html) that dives deeper into what can happen when "
+"you don't lock down your publishing workflows."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:41
+msgid "Step 0: Create a release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:43
+msgid ""
+"To get started, create a file named `release.yaml` under the "
+"`.github/workflows` directory of your project. If the `.github/workflows`"
+" directory does not exist, you can create it. It is GitHub's convention "
+"that all GitHub Actions are configured via YAML files in the "
+"`.github/workflows` directory."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:48
+msgid "Naming your workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:51
+msgid ""
+"You can name the workflow file whatever you wish. We suggest using "
+"something simple and expressive like `release.yaml` so you, your future "
+"self, and contributors who work on your project know exactly what the "
+"workflow does."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:56
+msgid "Step 1: Name the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:58
+msgid "At the top of the `release.yaml` file, type the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:64
+msgid ""
+"This provides a name to the workflow that you can use to quickly find all"
+" runs of this GitHub Action on the \"Actions\" tab in the GitHub "
+"repository."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:68
+msgid ""
+"Graphic showing an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, \"Release,\" as configured in this step. "
+"Finally, in the center, in the red box labeled \"3\" you can see several "
+"runs of the workflow, for the \"1.0\" and \"1.0.1\" releases of the "
+"package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:70
+msgid ""
+"This image shows an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, as configured in this step. Finally, in the "
+"center, in the red box labeled \"3\" you can see several runs of the "
+"workflow, for the \"1.0\" and \"1.0.1\" releases of the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:73
+msgid "Step 2: Add triggers to the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:75
+msgid ""
+"Every GitHub Actions workflow runs when [certain "
+"conditions](https://docs.github.com/en/actions/reference/events-that-"
+"trigger-workflows) are met. In this case, we assume that a release "
+"workflow should only run when the repository owner creates a new "
+"[release](https://docs.github.com/en/repositories/releasing-projects-on-"
+"github/managing-releases-in-a-repository) for the package. Add the "
+"following to the `release.yaml` file to ensure it runs when you create "
+"and publish a release:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:87
+msgid "Step 3: Configure the jobs in the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:89
+msgid ""
+"A GitHub Actions *workflow* file can contain multiple *jobs* that run "
+"independently; each job can also have multiple *steps.* When triggered, "
+"the GitHub Action runs all the jobs in a workflow (excluding any steps "
+"that have conditional requirements)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:93
+msgid ""
+"Jobs and steps can also have [conditional "
+"logic](https://docs.github.com/en/actions/reference/workflow-syntax-for-"
+"github-actions#jobsjob_idif) that allows them only to run if specific "
+"criteria exist. For instance, you may want only to have a job step to "
+"publish to PyPI if a release was made for the package. But you might want"
+" to test building the package every time you merge a new pull request."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:96
+msgid ""
+"For a release job, you need to clone or check out the repository. You can"
+" use the `actions/checkout` action to check out the code. You then "
+"install and use [Hatch](get-to-know-hatch) to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:101
+msgid ""
+"You also need to make sure to set up Hatch on the machine GitHub is using"
+" to run the workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:104
+msgid "A minimal job definition would look like this:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:124
+msgid ""
+"Notice that above, you provide a version for each action step. "
+"`action/checkout@v5` tells GitHub to use version 5 of the checkout "
+"action. The checkout action checks out the code from your repository. In "
+"this case, the code will be used to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:126
+msgid ""
+"Next, you will learn about a better way to secure (or \"harden\") your "
+"workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:128
+msgid "Step 4: Secure the GitHub Actions workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:130
+msgid ""
+"There are several improvements you can make to the GitHub Actions "
+"workflow you just configured to improve security and readability."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:133
+msgid ""
+"First, we can give names to relevant steps in the process to increase the"
+" readability of the logs generated during the workflow run. This can be "
+"achieved using `name: ` lines."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:137
+msgid ""
+"More importantly, each time you use an existing action (via `uses`) you "
+"should pin that action to a commit hash. Pinning your action ensures that"
+" if a malicious user takes over the action, they won't be able to impact "
+"your repository (an example of a supply chain attack due to GitHub "
+"Actions is the recent `tj-actions/changed-files` attack[^changed-files-"
+"supply-chain-attack])."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:144
+msgid ""
+"Enabling Dependabot[^dependabot] in the repository will ensure that your "
+"actions stay up to date. The dependabot tool will open pull requests that"
+" update your action versions at whatever frequency you want."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:149
+msgid "Thus, the workflow that you should use should be similar to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:157
+msgid ""
+"Now, you can commit the `.github/workflows/release.yaml` file to the "
+"repository and push to GitHub."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:159
+msgid ""
+"At this point, if you create a new release for your project on GitHub, "
+"the configured workflow should run and build a wheel for you. "
+"Unfortunately, the wheel is only available on the runner and will be "
+"deleted at the end of the workflow run."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:163
+msgid "Step 5: Upload the built artifact to GitHub Artifacts"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:165
+msgid ""
+"You need to add one more step to the job definition to be able to access "
+"the wheel. You will upload it to the artifacts temporary area[^github-"
+"artifacts]. Add the following to the `release.yaml` file:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:175
+msgid "Upload artifacts parameters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:178
+msgid ""
+"Above, you have configured the artifact to be deleted after 1 day. The "
+"artifacts storage on GitHub actions is temporary; users should not "
+"download your package from the GitHub artifacts."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:181
+msgid ""
+"You have also configured the release job to error if the `dist/` "
+"directory does not exist. This means that `hatch build` (from the "
+"previous step) failed to build our package, so there is nothing to "
+"release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:186
+msgid ""
+"At this point, if you push the `release.yaml` to GitHub and create a new "
+"release, the GitHub Actions job will:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:189
+msgid "run,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:190
+msgid "clone your repository,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:191
+msgid "install and set up Hatch,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:192
+msgid "build your package and"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:193
+msgid "upload your package as an archive to the artifacts storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:196
+msgid ""
+"Graphic showing an example of a release workflow that has just finished "
+"running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:198
+msgid ""
+"This figure shows an example of a release workflow that has just finished"
+" running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:201
+msgid ""
+"At the bottom of the workflow run page on GitHub, you should see a "
+"section for the artifacts produced during runtime and uploaded to this "
+"storage area:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:205
+msgid ""
+"Graphic showing an example of an artifact produced by the release "
+"workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:207
+msgid ""
+"This figure shows the artifact produced by the above release workflow. It"
+" is now marked as expired since the workflow ran more than a day ago."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:210
+msgid ""
+"You can download the artifact (before it expires), unzip it, and install "
+"the wheel contained within. However, this should only be done if you want"
+" to test the built wheel. Next, you will configure uploading to PyPI "
+"using trusted publishing."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:215
+msgid "Configure automatic publishing to PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:217
+msgid ""
+"The job you configured above using GitHub Actions builds your package "
+"using your code. You still need to upload it to PyPI. You could upload "
+"the package from the same job, but it is better to create a separate one "
+"to maintain a separation of tasks. This is why, in the previous section, "
+"we uploaded the artifact to the temporary storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:223
+msgid ""
+"In the new job, you will download the package from there and upload it to"
+" PyPI. Since the `build` job does nothing else, there is no possibility "
+"that the package could get compromised before the release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:227
+msgid "Step 1: Add the upload job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:229
+msgid ""
+"In the `release.yaml` file, add the following new job, after the job "
+"defined in the previous section:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:238
+msgid "Make sure to change the URL"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:240
+msgid "Remember to change the `url:` value to the URL for your package on PyPI!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:243
+msgid "This job has two steps:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:245
+msgid ""
+"It uses `download-artifact` to download the artifacts built in the "
+"previous job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:247
+msgid "It uses `gh-action-pypi-publish` to publish the package to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:249
+msgid ""
+"You are almost there!! Now, you just need to enable trusted publishing "
+"for your project on PyPI. And then, your work is done!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:252
+msgid "Step 2: Enable trusted publishing on PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:256
+msgid ""
+"Diagram showing PyPI's trusted publisher workflow: Step 1 builds "
+"distribution files via GitHub, Step 2 uses a trusted environment (PyPI), "
+"Step 3 securely uploads to PyPI. Shows chain of trust with lock icon "
+"connecting GitHub Action to Python Package Index."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:261
+msgid ""
+"Before trusted publishing was created, in order to upload to PyPI from "
+"GitHub actions you would have needed to add the username and password as "
+"arguments to the `gh-action-pypi-publish` step. While documentation "
+"recommends using the GitHub's `secrets` environment for the "
+"password/token, in several cases, users were pasting the password "
+"directly into the workflow file. Furthermore, accidental leakage of the "
+"password or token could allow attackers to publish new packages using "
+"your account, until you discover the compromise and revoke the leaked "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:269
+msgid ""
+"To prevent these incidents and improve supply chain security, developers "
+"created [Trusted Publishing](https://docs.pypi.org/trusted-publishers/). "
+"Trusted publishing allows you to register a publishing workflow on PyPI "
+"and then map that workflow to an automation workflow (e.g., GitHub "
+"Actions) that is allowed to publish the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:274
+msgid ""
+"You do not need to enter a token or password value in a trusted publisher"
+" workflow. It's a secure connection between your"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:277
+msgid "Trusted Publishing outside of GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:280
+msgid ""
+"Trusted Publishing supports other automation platforms, beyond GitHub "
+"Actions. It is also possible to configure a trusted publisher for "
+"multiple workflows or multiple publishers for the same package. These are"
+" advanced uses, out of scope for this lesson."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:286
+msgid ""
+"For this lesson, we will focus on configuring a trusted publisher for a "
+"project that already exists on PyPI. If you completed the [lesson about "
+"PyPI publishing](create-python-package), you should have this project "
+"already created."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:288
+msgid ""
+"This setup step needs to be performed only once for the project. Future "
+"releases will only run the GitHub Actions workflow we are configuring in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:291
+msgid ""
+"On the [\"Your projects\" page on "
+"PyPI](https://pypi.org/manage/projects/), click \"Manage\" on any project"
+" you want to configure."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:295
+msgid ""
+"Graphic showing a screenshot of the \"Your projects\" page on PyPI. The "
+"\"Manage\" button for one of the projects is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:297
+msgid ""
+"This image shows several projects. The \"Manage\" button is highlighted "
+"for one of the projects, the one we want to configure trusted publishing "
+"for."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:300
+msgid "Then click \"Publishing\" in the project's sidebar."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:303
+msgid ""
+"Graphic showing the management page for one project. The \"Publishing\" "
+"link in the sidebar is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:305
+msgid ""
+"Once clicking on the \"Manage\" button we got to the project's page. In "
+"the sidebar, we have the \"publishing\" option, as highlighted here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:309
+msgid ""
+"This will take you to the publisher configuration page for the project. "
+"Trusted publishers can be configured via the forms here. Fill in the "
+"GitHub form with the following information:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:313
+msgid ""
+"Owner: the GitHub organization name for the organization that owns the "
+"project. If this is your personal project, then use your GitHub username "
+"here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:315
+msgid "Repository name: the name of the repository that contains the project."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:316
+msgid ""
+"Workflow name: Should be `release.yaml` if you followed this guide, it is"
+" the workflow we just configured."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:318
+msgid ""
+"Environment name: Should be `pypi`, as that is what we configured in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:321
+msgid ""
+"Once you fill in this form and click \"Add\" the publisher is configured "
+"and can be used to publish new releases of your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:324
+msgid "Fully hardened GitHub Actions release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:326
+msgid ""
+"For better security, it is also recommended to control the permissions of"
+" the GitHub token used within each job of the workflow. The permissions "
+"should be scoped at job level and be as minimal as possible. A workflow "
+"that configures trusted publishing and also does this is the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:336
+msgid ""
+"You can copy the above into your `release.yaml` file. You only need to "
+"update the `url:` field and configure trusted publishing on PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:340
+msgid ""
+"The workflow above should be up to date with the current versions of "
+"GitHub actions. However, it's good to turn on Dependabot to update the "
+"action versions in the future."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:343
+msgid "You have enabled trusted publishing for your project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:345
+msgid ""
+"Congratulations!! You have now configured your project to do secure "
+"releases when a new version is being tagged on GitHub. The workflow we "
+"have configured builds the package from the exact version of code that we"
+" are tagging. This provides a guarantee for your users that the package "
+"that you have released does precisely what the code states it does. There"
+" is little to no potential for supply chain related vulnerabilities "
+"arising from your package! If you have a package that is ready for real-"
+"world use on the real PyPI, then you can follow the same steps to publish"
+" it securely."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:349
+msgid ""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:350
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:351
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:352
+msgid ""
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/CONTRIBUTING.po b/locales/el/LC_MESSAGES/CONTRIBUTING.po
new file mode 100644
index 000000000..b6f3c7b63
--- /dev/null
+++ b/locales/el/LC_MESSAGES/CONTRIBUTING.po
@@ -0,0 +1,723 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../CONTRIBUTING.md:4
+msgid "Contributing to the Python Packaging Guide"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:6
+msgid "The guide is a community resource."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:8
+msgid "TL;DR"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:10
+msgid "We welcome contributions in the form of issues and pull requests:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:12
+msgid ""
+"If you have an idea for something that should be included in the guide, "
+"[please open an issue here](https://github.com/pyOpenSci/python-package-"
+"guide/issues)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:13
+msgid ""
+"If you find a typo, feel free to [submit a pull "
+"request](https://github.com/pyOpenSci/python-package-guide/pulls) to "
+"modify the text directly. Or, if you are less comfortable with pull "
+"requests, feel free to open an issue."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:14
+msgid ""
+"If you are interested in helping translate the guide into other "
+"languages, take a look at the [translation guide](./TRANSLATING.md)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:15
+msgid ""
+"If you want to see a larger change to the content of the guide book, "
+"please submit an issue first!"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:17
+msgid ""
+"If you are unsure about how to contribute or are not familiar with git "
+"and github, this guide will help you through the process."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:19
+msgid "How the Python Packaging Guide is structured"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:21
+msgid ""
+"The Python Packaging Guide is written in myST (a variant of MarkDown and "
+"rST) and we use **Sphinx**, a documentation engine built in `Python` to "
+"build the HTML version you see online."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:23
+msgid "We use a tool called Nox to manage the process of building the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:25
+msgid "Two approaches to contributing"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:27
+msgid "You can contribute to the guide using two approaches."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:29
+msgid ""
+"The first approach is using a local copy of the guide in your computer. "
+"This option requires a more involved setup, but allows you to build the "
+"guide locally to verify your contribution did not introduce any bugs "
+"before submitting a pull request. It is the recommended approach for "
+"larger contribution, like writing a whole new section."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:31
+msgid ""
+"The second approach is making your contribution directly in the GitHub "
+"website. This option does not require any setup on your computer and "
+"while your contribution will still be tested when you submit a PR "
+"(continuous integration), it will take longer for you to get any feedback"
+" in case of issue. It is the best way to make small contribution, like "
+"fixing typos, or if this is your first contribution to open source and "
+"the first approach feels too intimidating."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:33
+msgid "Forking the repository"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:35
+msgid ""
+"Independently of the approach you choose, the first step is to fork the "
+"Python Packaging Guide repository into your personal GitHub space. You "
+"can do this by clicking the \"Fork\" button in the top right corner of "
+"the repository page."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:38
+msgid ""
+"[Learn more: Fork and Clone GitHub "
+"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
+"clone/) is a good resource to learn more about forking."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:40
+msgid "To fork a repo,"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:42
+msgid "Make sure you are logged into GitHub."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:44
+msgid ""
+"Go to the repo you would like to fork, in this case the [Python Packaging"
+" Guide](https://github.com/pyopensci/python-package-guide) repo."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:46
+msgid ""
+"In the top right-hand corner of the page there is a 'Fork' button. Click "
+"that button. You will be brought to a new page where you will 'Create a "
+"new fork'. Feel free to keep all the default inputs and click 'Create "
+"fork'. This will create a copy of the repo at "
+"`https://github.com//python-package-guide`, where `` "
+"is your GitHub username."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:51
+msgid "Contributing via the GitHub website"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:53
+msgid "How to edit a MarkDown file"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:55
+msgid ""
+"The Python Packaging Guide is written in myST, a variant of MarkDown. You"
+" can edit the files directly in the GitHub website. To do so, navigate to"
+" the file you want to edit and click the pencil icon in the top right "
+"corner of the file."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:58
+msgid "Edit button in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:64
+msgid ""
+"An image showing how to edit a file in GitHub. The pencil icon is "
+"highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:66
+msgid "Edit file in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:72
+msgid ""
+"An image showing when a file is being edited in GitHub. The file content "
+"is displayed in a text editor."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:75
+msgid "To preview your changes, click the \"Preview changes\" tab."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:77
+msgid "Preview changes in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:83
+msgid ""
+"An image showing how to preview changes in GitHub. The file content is "
+"displayed in a text editor. The preview changes tab is highlighted with a"
+" red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:86
+msgid "How to commit your changes"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:88
+msgid ""
+"When you are done editing the file, scroll down to the bottom of the "
+"page. You will see a section called \"Commit changes\". Here you can "
+"write a title and a description for your changes. Make sure to write a "
+"clear and concise title that describes the changes you made."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:91
+msgid "Commit changes in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:97
+msgid ""
+"An image showing how to commit changes in GitHub. The commit message is "
+"displayed in a text editor. The commit changes section is highlighted "
+"with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:100
+msgid ""
+"After writing your commit message, click the \"Commit changes\" button to"
+" save your changes."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:102
+msgid "Contributing locally on your computer"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:104
+msgid "Clone your forked repository"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:106
+msgid ""
+"To clone your forked repository to your computer, you need to copy the "
+"URL of your forked repository and run the following command in your "
+"terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:111
+msgid ""
+"Replace `` with the URL of your forked repository. You can find the "
+"URL by clicking the green \"Code\" button on your forked repository page."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:113
+msgid "Clone repository in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:119
+msgid ""
+"An image showing how to clone a repository in GitHub. The URL of the "
+"repository is displayed in a text editor. The code button is highlighted "
+"with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:122
+msgid "Create a new branch"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:124
+msgid ""
+"Before making any changes, you should create a new branch to work on. "
+"This will help keep your changes separate from the main branch and make "
+"it easier to submit a pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:126
+msgid "To create a new branch, run the following command in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:132
+msgid "Create a virtual environment"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:134
+msgid ""
+"To build the guide locally, you need to create a virtual environment and "
+"install the dependencies. You can do this by running the following "
+"commands in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:136
+msgid "**On Windows**:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:142
+msgid "**On MacOS and Linux**:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:148
+msgid "Install the development dependencies"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:150
+msgid ""
+"To install the development dependencies, run the following command in "
+"your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:156
+msgid "Commit your changes"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:158
+msgid ""
+"After making your changes, you need to commit them to your local "
+"repository. To do this, run the following commands in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:160
+msgid "To see the changes you made:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:164
+msgid "To add the changes to the staging area:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:168
+msgid "To commit the changes:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:172
+msgid ""
+"Replace `\"Your commit message here\"` with a clear and concise message "
+"that describes the changes you made."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:174
+msgid "How to build the guide locally"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:176
+msgid ""
+"To build the guide locally, you can use the `nox` command. This will run "
+"the default `nox` session, which builds the guide and opens it in your "
+"browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:178
+msgid ""
+"To see the different sessions available, you can run the following "
+"command in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:183
+msgid ""
+"There are different sessions in nox related to building the docs: `docs`,"
+" `docs-test`, `docs-live`. You can run them by specifying the session "
+"name after the `nox` command."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:185
+msgid "`docs`: this session builds the guide and opens it in your browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:189
+msgid ""
+"To see the guide built locally, open the file `_build/html/index.html` in"
+" your browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:191
+msgid "`docs-linkcheck`: this session checks that links in documentation work"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:195
+msgid ""
+"If the tests fail, you will see logs in the terminal and in "
+"`_build/linkcheck_output/output.txt`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:197
+msgid "`docs-test`: this session runs the tests for the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:201
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:203
+msgid ""
+"`docs-live`: this session builds the guide and opens it in your browser "
+"with live reloading."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:207
+msgid ""
+"open the local version of the guide in your browser at ``localhost`` "
+"shown in the terminal."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:209
+msgid "Before you submit your pull request"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:211
+msgid ""
+"Before submitting your pull request, make sure to run the tests and check"
+" the formatting of your code."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:216
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request. Also make "
+"sure to check the formatting of your documentation by building the docs "
+"locally and checking that your changes look correct."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:220
+msgid "Submitting a pull request with your contribution"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:222
+msgid "How to make a pull request"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:224
+msgid ""
+"To open a pull request on GitHub, navigate to the main page of your "
+"forked repository and click on the \"Pull requests\" tab."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:226
+msgid "Pull requests tab in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:232
+msgid ""
+"An image showing how to navigate to the pull requests tab in GitHub. The "
+"pull requests tab is highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:235
+msgid "Click on the \"New pull request\" button."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:237
+msgid "New pull request button in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:243
+msgid ""
+"An image showing how to create a new pull request in GitHub. The new pull"
+" request button is highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:246
+msgid ""
+"Write a clear and concise title and description for your pull request. "
+"Make sure to describe the changes you made and why they are necessary."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:248
+msgid "What happens when you submit a pull request (CI/CD)"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:250
+msgid ""
+"Once you submit a pull request, a series of checks will be run to ensure "
+"that your changes do not introduce any bugs or errors. These checks "
+"include:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:252
+msgid ""
+"**Code formatting and styles**: checks that your code is formatted "
+"correctly, by `pre-commit.ci - pr check`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:253
+msgid ""
+"**docs build**: checks that the documentation builds correctly, using "
+"`circleci`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:255
+msgid "You will see the status of these checks in your pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:257
+msgid "Pull request checks in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:263
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks are highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:265
+msgid ""
+"If any of these checks fail, you will see an error message in your pull "
+"request. You need to fix the errors before your changes can be merged."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:267
+msgid "Pull request checks failed in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:273
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks that failed and the details link are highlighted with a"
+" red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:276
+msgid ""
+"To get more information about the errors, you can click on the "
+"\"Details\" link next to the failed check."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:278
+msgid "What to expect from the review process"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:280
+msgid ""
+"Once you submit a pull request, a maintainer of the repository will "
+"review your changes and provide feedback. The review process may involve:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:282
+msgid ""
+"**Comments**: the reviewer may leave comments on your pull request to ask"
+" questions or provide feedback."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:283
+msgid ""
+"**Suggestions**: the reviewer may suggest changes to your code or "
+"documentation."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:284
+msgid ""
+"**Approvals**: once the reviewer is satisfied with your changes, they "
+"will approve the pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:286
+msgid ""
+"You can make changes to your pull request by pushing new commits to the "
+"branch. The pull request will be updated automatically with your new "
+"changes."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:288
+msgid ""
+"Once your pull request is approved, it will be merged into the main "
+"branch and your changes will be included in the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:290
+msgid "Additional help"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:292
+msgid "How to get help"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:294
+msgid ""
+"*__TODO__: This section should describe the options for finding more help"
+" in case beginner contributors need more help (e.g., create an issue, "
+"post in a forum, etc).*"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:296
+msgid "Additional resources"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:298
+msgid ""
+"*__TODO__: It should also include links to beginner documentation, like "
+"the GitHub docs.*"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:300
+msgid "Annex"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:302
+msgid "Code examples"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:304
+msgid ""
+"This guide uses the [literalinclude Sphinx directive](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/directives.html#directive-"
+"literalinclude) whenever possible to keep code and prose separate. Code "
+"for use in the documentation is kept in the `examples/` folder."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:308
+msgid "Referencing code in documentation"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:310
+msgid ""
+"If an example is present elsewhere in the documentation that you want to "
+"use, you can copy the `literalinclude` directive verbatim and the "
+"examples will stay in sync."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:313
+msgid ""
+"If you already see code in the examples folder that you can use for new "
+"documentation, a new `literalinclude` can be made to extract it into the "
+"site. Only a relative path to the code is required for a working "
+"`literalinclude`, but you should in almost all cases also provide a "
+"`:language:` and `:lines:`. The former makes code examples prettier, and "
+"the later can protect your example from future modifications to the code."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:318
+msgid ""
+"**Pro tip**: As an alternative to `:lines:` there are also the `:start-"
+"after:`, `:start-at:`, `:end-before:`, and `:end-at:` options. And if the"
+" example code is Python, `:pyobject:` can be an even more future-proof "
+"way to keep the same documentation content even through code refactors."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:322
+msgid ""
+"If you need example code that doesn't yet exist in `examples/` see "
+"[creating code for documentation](#creating-code-for-documentation)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:325
+msgid "Creating code for documentation"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:327
+msgid ""
+"Whenever you come across a place that could benefit from a code block, "
+"instead of writing it in-line with a code fence (`` ``` `` blocked text) "
+"you can write it as a file in its own format. Your example may even "
+"already exist; [see referencing code in documentation ](#referencing-"
+"code-in-documentation)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:331
+msgid ""
+"If you want to add a new example that doesn't fit into any of the "
+"existing example files, you can create a new file and reference it in a "
+"`literalinclude` block. If it makes sense for that file to live within "
+"one of the existing example projects please add it there; otherwise "
+"create a new folder in the `examples` directory."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:335
+msgid ""
+"If an existing example is incomplete or a new example makes sense to be "
+"added to an existing file, go ahead and add it, but take care to not "
+"break the rest of the guide. Whenever possible, extend the example rather"
+" that rewrite it. So for instance, add new functions to the end of the "
+"file, new methods after all existing ones in a class."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:339
+msgid ""
+"Example code is checked for correctness, so adding a new example may "
+"require adding additional tests for coverage, and will require fixing any"
+" failing tests."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:342
+msgid ""
+"***⚠️ WARNING***: great care should be taken when modifying existing "
+"example code, especially any modification beyond appending to the end of "
+"the file. All code examples are (potentially) shared examples. This makes"
+" for more consistent examples in the guide but can mean action-"
+"at-a-distance when modifying the examples for one particular use case. If"
+" you find yourself modifying existing examples try running this command "
+"and then checking those pages in a new build."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:350
+msgid "Example:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:352
+msgid "Instead of writing example code in markdown like this"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:363
+msgid "The python can be extracted into a `.py` file"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:377
+msgid ""
+"As another example, if you only need to show part of a `pyproject.toml`, "
+"we already have complete project definitions, you need only to find the "
+"relevant part."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:380
+msgid "Instead of writing this"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:391
+msgid "an example could be extracted from an existing toml file"
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/TRANSLATING.po b/locales/el/LC_MESSAGES/TRANSLATING.po
new file mode 100644
index 000000000..d8eec7f92
--- /dev/null
+++ b/locales/el/LC_MESSAGES/TRANSLATING.po
@@ -0,0 +1,790 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../TRANSLATING.md:5
+msgid "Translation Guide for the Python Packaging Guide"
+msgstr ""
+
+#: ../../TRANSLATING.md:7
+msgid ""
+"This guide will help you get started contributing to the translation of "
+"the Python Packaging Guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:9
+msgid ""
+"The process of contributing to the translation of the guide is similar to"
+" the process of contributing to the guide itself, except that instead of "
+"working on the guide source files directly, you will be working on the "
+"translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:11
+msgid "Translation Status"
+msgstr ""
+
+#: ../../TRANSLATING.md:16
+msgid ""
+"The translation status graph updates every time the book is build with "
+"translations. You can see the status of the translations by going to "
+"[this link](https://www.pyopensci.org/python-package-guide/TRANSLATING)"
+msgstr ""
+
+#: ../../TRANSLATING.md:18
+msgid "Overview of the Translation Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:20
+msgid ""
+"The process of adapting software to different languages is called "
+"internationalization, or i18n for short. Internationalization makes sure "
+"that translation can happen without having to modify the source code, or "
+"in our case, the original English source files of the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:22
+msgid ""
+"Sphinx, the documentation engine we use to build the Python Package "
+"Guide, has built-in support for internationalization, so the workflow is "
+"very straightforward."
+msgstr ""
+
+#: ../../TRANSLATING.md:24
+msgid ""
+"The process of actually translating the guide into different languages is"
+" called localization, or l10n for short. This is the step you will be "
+"helping with your contribution."
+msgstr ""
+
+#: ../../TRANSLATING.md:26
+msgid "Here is a quick overview of how the translation process works:"
+msgstr ""
+
+#: ../../TRANSLATING.md:28
+msgid ""
+"The guide is originally written in English and stored in a set of "
+"MarkDown files."
+msgstr ""
+
+#: ../../TRANSLATING.md:29
+msgid ""
+"The source files are processed by Sphinx to generate a set of translation"
+" files stored in a folder for each target language."
+msgstr ""
+
+#: ../../TRANSLATING.md:30
+msgid ""
+"Contributors (like you!) translate these files into the different "
+"languages."
+msgstr ""
+
+#: ../../TRANSLATING.md:31
+msgid ""
+"When the guide is built, Sphinx creates a version of the guide in the "
+"original language (English) and the translated versions for the languages"
+" defined in the configuration."
+msgstr ""
+
+#: ../../TRANSLATING.md:34
+msgid ""
+"You don't need to understand the technical details to contribute, but if "
+"you are interested in learning how Sphinx handles internationalization "
+"and localization, you can find more information [here](https://www"
+".sphinx-doc.org/en/master/usage/advanced/intl.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:37
+msgid "Two Ways to Contribute a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:39
+msgid ""
+"There are two ways to contribute a translation, and the first one does "
+"not require you to install anything on your computer."
+msgstr ""
+
+#: ../../TRANSLATING.md:41
+msgid ""
+"**From the GitHub website.** Translation files are plain text, so you can"
+" edit them right in your browser. Fork the repository, edit a `.po` file "
+"in your fork, and open a pull request. This is the best place to start if"
+" this is your first open source contribution. The contributing guide "
+"walks through the browser workflow in [Contributing via the GitHub "
+"website](CONTRIBUTING.md#contributing-via-the-github-website). Once you "
+"have a fork, you can skip ahead to [Editing the Translation Files"
+"](#editing-the-translation-files)."
+msgstr ""
+
+#: ../../TRANSLATING.md:43
+msgid ""
+"**From a local copy on your computer.** This takes more setup, but it "
+"lets you check how much of a file is translated with `sphinx-intl stat` "
+"and preview the translated guide in your browser before you open a pull "
+"request. Choose this if you plan to translate a lot of strings or want to"
+" see your work in context."
+msgstr ""
+
+#: ../../TRANSLATING.md:45
+msgid "Setting up Your Local Environment"
+msgstr ""
+
+#: ../../TRANSLATING.md:47
+msgid "You only need this if you chose the second approach above."
+msgstr ""
+
+#: ../../TRANSLATING.md:49
+msgid ""
+"Setting up to translate is no different from setting up to contribute "
+"anything else to the guide, so rather than repeat the steps here, follow "
+"these sections of the contributing guide in order:"
+msgstr ""
+
+#: ../../TRANSLATING.md:51
+msgid "[Forking the repository](CONTRIBUTING.md#forking-the-repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:52
+msgid ""
+"[Clone your forked repository](CONTRIBUTING.md#clone-your-forked-"
+"repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:53
+msgid "[Create a new branch](CONTRIBUTING.md#create-a-new-branch)"
+msgstr ""
+
+#: ../../TRANSLATING.md:54
+msgid ""
+"[Create a virtual environment](CONTRIBUTING.md#create-a-virtual-"
+"environment), which gives the commands for both Windows and macOS/Linux"
+msgstr ""
+
+#: ../../TRANSLATING.md:55
+msgid ""
+"[Install the development dependencies](CONTRIBUTING.md#install-the-"
+"development-dependencies)"
+msgstr ""
+
+#: ../../TRANSLATING.md:58
+msgid ""
+"Installing the development dependencies is what makes `sphinx-intl` and "
+"`nox` available in your environment. Both are used later in this guide: "
+"`sphinx-intl` reports how much of each file has been translated, and "
+"`nox` builds the guide so you can preview your work."
+msgstr ""
+
+#: ../../TRANSLATING.md:61
+msgid "Starting a New Language Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:63
+msgid ""
+"If you plan to work on an existing translation, you can skip this step "
+"and go directly to the next section."
+msgstr ""
+
+#: ../../TRANSLATING.md:65 ../../TRANSLATING.md:231
+msgid "Important"
+msgstr ""
+
+#: ../../TRANSLATING.md:66
+msgid ""
+"If you would like to start the translation of the guide into a new "
+"language, start by [creating an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:69
+msgid ""
+"To generate the translation files for a new language, add the language to"
+" the `languages` list in the `conf.py` configuration file. "
+"[Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to "
+"manage the building of the guide and its translations, and it reads this "
+"list from `conf.py`."
+msgstr ""
+
+#: ../../TRANSLATING.md:71
+msgid ""
+"Inside `conf.py`, find the `languages` list and add the corresponding "
+"two-letter code. For example, if you want to start the translation of the"
+" guide into French, you would add `'fr'`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:80
+msgid ""
+"You can find a list of the two-letter Sphinx language option "
+"[here](https://www.sphinx-doc.org/en/master/usage/configuration.html"
+"#confval-language)."
+msgstr ""
+
+#: ../../TRANSLATING.md:83
+msgid "Preparing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:85
+msgid ""
+"The translation files contain the original English text and a space for "
+"you to enter the translated text. Before starting to translate, you need "
+"to make sure the translation files are up to date with the latest changes"
+" to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:87
+msgid ""
+"You can do this by running the following command, replacing LANG by the "
+"language code you plan to work on (e.g., `es` for Spanish):"
+msgstr ""
+
+#: ../../TRANSLATING.md:93
+msgid ""
+"This command will create the translation files if they don't exist yet, "
+"or update them with the latest changes if they already exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:95
+msgid ""
+"The translation files are text files with the `.po` extension stored in "
+"`./locales`, in folders corresponding to each language. For example, the "
+"translation files for Spanish are stored in the `locales/es/LC_MESSAGES` "
+"directory."
+msgstr ""
+
+#: ../../TRANSLATING.md:97
+msgid ""
+"Because the translation files map the original English text to translated"
+" text, they are sometimes referred to as \"catalog\" files or \"portable "
+"object\" files."
+msgstr ""
+
+#: ../../TRANSLATING.md:100
+msgid ""
+"You don't need to know all the details about the PO format in order to "
+"translate. If you are interested in learning more, you can find "
+"additional details in the [GNU gettext "
+"documentation](https://www.gnu.org/software/gettext/manual/html_node/PO-"
+"Files.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:103
+msgid "Working on a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:105
+msgid ""
+"In order to start translating, go to the folder inside `./locales` "
+"corresponding to the target language you want to translate to (for "
+"example, `./locales/es/LC_MESSAGES/` for the Spanish translation)."
+msgstr ""
+
+#: ../../TRANSLATING.md:107
+msgid ""
+"In this folder you will find a set of `.po` files, corresponding to the "
+"different sections of the guide:"
+msgstr ""
+
+#: ../../TRANSLATING.md:125
+msgid ""
+"You may also see some `.mo` files in the same folder. These are compiled "
+"versions of the `.po` files create by Sphinx during the build process, "
+"and used to generate the translated version of the guide. They are "
+"intermediary files and are not meant to be edited directly or stored in "
+"the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:128
+msgid ""
+"If you are working on a new translation, choose one of the `.po` files to"
+" start with. If you are working on an existing translation, you can start"
+" with the `.po` files that need the most work."
+msgstr ""
+
+#: ../../TRANSLATING.md:130
+msgid ""
+"To see how much of each file has been translated, use the `sphinx-intl "
+"stat`. You will be able to see the number of translated, fuzzy, and "
+"untranslated strings in each `.po` file."
+msgstr ""
+
+#: ../../TRANSLATING.md:132
+msgid ""
+"For example, to see the statistics for the Spanish translation, you would"
+" run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:146
+msgid "What do these categories mean:"
+msgstr ""
+
+#: ../../TRANSLATING.md:148
+msgid ""
+"Translated strings are strings that have been translated into the target "
+"language."
+msgstr ""
+
+#: ../../TRANSLATING.md:149
+msgid ""
+"Fuzzy strings are strings that have been translated but need to be "
+"reviewed because the original English string in the guide changed."
+msgstr ""
+
+#: ../../TRANSLATING.md:150
+msgid "Untranslated strings are strings that have not been translated yet."
+msgstr ""
+
+#: ../../TRANSLATING.md:153
+msgid ""
+"When Sphinx is building the guide in another language, it will look into "
+"the corresponding folder in `./locales/` for translated strings. If the "
+"translation is available, Sphinx will replace the English text with the "
+"equivalent text in the target language. If the translation is not "
+"available, Sphinx will use the original English strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:156
+msgid "Editing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:158
+msgid ""
+"You can use any text editor to edit the `.po` file. But if you prefer, "
+"there are also tools like [Poedit](https://poedit.net/) that provide a "
+"graphic use interface."
+msgstr ""
+
+#: ../../TRANSLATING.md:160
+msgid ""
+"Depending on your editor of choice, you may be able to install a plugin "
+"or extension that can provide syntax highlighting and other features for "
+"working with `.po` files. Like for example, the "
+"[gettext](https://marketplace.visualstudio.com/items?itemName=mrorz"
+".language-gettext) extension for Visual Studio Code."
+msgstr ""
+
+#: ../../TRANSLATING.md:162
+msgid ""
+"When you open a `.po` file, you will see a series of entries that look "
+"like this:"
+msgstr ""
+
+#: ../../TRANSLATING.md:172
+msgid ""
+"The first line of an entry starts with `#:` and is a reference to the "
+"original source file and line number from which the text was extracted. "
+"This information is useful for finding the context of the text in the "
+"guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:174
+msgid ""
+"The `msgid` field contains the original English text that needs to be "
+"translated. The `msgstr` field is where you will enter the translated "
+"text. This field might contain text if someone else already translated "
+"the entry."
+msgstr ""
+
+#: ../../TRANSLATING.md:184
+msgid ""
+"Sometimes the original English text may be too long for a single line, "
+"and it may be split into multiple lines. In this case, you can keep the "
+"same structure in the translated text. Notice that both the `msgid` and "
+"`msgstr` fields in the example below start with an empty string, "
+"indicating that the text continues in the next line."
+msgstr ""
+
+#: ../../TRANSLATING.md:200
+msgid ""
+"The English text will sometimes contain Markdown formatting, such as bold"
+" or italic text. You should keep the formatting in the translated text, "
+"making sure to translate the text inside the formatting tags."
+msgstr ""
+
+#: ../../TRANSLATING.md:202
+msgid ""
+"The English text may also contain links to other sections of the guide or"
+" external resources. You should keep the links in the translated text, "
+"making sure to update the link text when appropriate."
+msgstr ""
+
+#: ../../TRANSLATING.md:210
+msgid ""
+"An entry may be marked as `fuzzy`, which means that the original English "
+"text has changed since the translation was made, and the translation may "
+"need to be revised. When this is the case you will see an additional line"
+" in the entry, starting with `#,`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:227
+msgid ""
+"You can review the translation and make any necessary changes, removing "
+"the `fuzzy` tag once you are satisfied with the translation."
+msgstr ""
+
+#: ../../TRANSLATING.md:229
+msgid ""
+"You can also add comments to the translation file, by adding lines that "
+"start with a `#` character to the entry. This can be helpful to add "
+"context to the translation for other translators or reviewers to see, but"
+" this might be only necessary in special circumstances."
+msgstr ""
+
+#: ../../TRANSLATING.md:232
+msgid ""
+"When working on a translation, you **should not** modify the original "
+"English text in the `msgid` field. If you see a typo or an error in the "
+"original text, please consider fixing it in the original source file (use"
+" the first line of the entry to locate it) and submit a separate pull "
+"request."
+msgstr ""
+
+#: ../../TRANSLATING.md:235
+msgid "Building the Translated Documentation"
+msgstr ""
+
+#: ../../TRANSLATING.md:237
+msgid ""
+"Once you finished translating or when you want to check the translation "
+"in context, you can build the guide locally on your computer, using the "
+"following command, replacing LANG by the proper language code (e.g., `es`"
+" for Spanish)"
+msgstr ""
+
+#: ../../TRANSLATING.md:243
+msgid ""
+"This command builds a single translated version of the guide: the one for"
+" LANG. The result is stored in `_build/html`, in a folder named after the"
+" language code (e.g., `es`). If you want to build every language at once "
+"instead, use `nox -s build-all-languages`."
+msgstr ""
+
+#: ../../TRANSLATING.md:245
+msgid ""
+"To view the translated version of the guide in your browser, open the "
+"corresponding `index.html` file. For example, to view the Spanish "
+"translation, you would open `_build/html/es/index.html`."
+msgstr ""
+
+#: ../../TRANSLATING.md:247
+msgid ""
+"You can also build a live version of the guide that updates automatically"
+" as you make changes to the translation files. To do this, use the `nox "
+"-s docs-live-lang` command. Note that in this case you need to specify "
+"which language you want to build. For example, if you are working on the "
+"Spanish translation, you would run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:253
+msgid ""
+"Note the `--` before the language code, it indicates that the following "
+"arguments should be passed into the nox session and not be interpreted "
+"directly by nox. If you forget the `--`, nox will look instead for a "
+"session named 'es' and raise an error that it does not exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:255
+msgid ""
+"This command will use `sphinx-autobuild` to launch a local web server "
+"where you can access the translated version of the guide. You can open "
+"the guide in your browser by navigating to `http://localhost:8000`."
+msgstr ""
+
+#: ../../TRANSLATING.md:257
+msgid ""
+"This is a great way to see how the translated version of the guide looks "
+"as you make changes to the translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:259
+msgid "Submitting a PR for Your Contribution"
+msgstr ""
+
+#: ../../TRANSLATING.md:261
+msgid ""
+"Once you are finished translating and before you submit a pull request "
+"(PR) for your translation, you need to make sure that the translated "
+"version of the guide builds without any errors or warning and looks "
+"correctly in the browser."
+msgstr ""
+
+#: ../../TRANSLATING.md:263
+msgid "You can follow these steps:"
+msgstr ""
+
+#: ../../TRANSLATING.md:265
+msgid ""
+"Build the translations of the guide with same parameters that will be "
+"used during the release:"
+msgstr ""
+
+#: ../../TRANSLATING.md:271
+msgid ""
+"Make sure there are no warnings or errors in the output. If there are, "
+"you will need to fix them before submitting the PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:272
+msgid ""
+"Make sure the translated version of the guide looks good in the browser "
+"by opening the `_build/html//index.html` file, where `` is "
+"the language you have been working on."
+msgstr ""
+
+#: ../../TRANSLATING.md:274
+msgid "If everything looks good, you can submit a PR with your changes."
+msgstr ""
+
+#: ../../TRANSLATING.md:277
+msgid ""
+"When you submit a PR for a translation, you should only include changes "
+"to one language. If you worked in multiple languages, please submit a "
+"separate PR for each language."
+msgstr ""
+
+#: ../../TRANSLATING.md:280
+msgid ""
+"Translations PRs will be tagged with a label indicating the language to "
+"make them easier to identify and review. For example, contributions to "
+"the Spanish translation will be tagged with 'lang-es'."
+msgstr ""
+
+#: ../../TRANSLATING.md:282
+msgid "TODO: This tagging could be automated with a GitHub Actions."
+msgstr ""
+
+#: ../../TRANSLATING.md:284
+msgid ""
+"When you submit the PR, make sure to include a short description of the "
+"changes you made and any context that might be helpful for the reviewer "
+"(e.g., you translated new strings, you reviewed fuzzy entries, you fixed "
+"typos, etc.)"
+msgstr ""
+
+#: ../../TRANSLATING.md:286
+msgid "The Review Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:288
+msgid ""
+"The review process for a translation contribution is similar to the "
+"review process for any other contribution to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:290
+msgid ""
+"TODO: This section needs more work, depending on the review workflow we "
+"decide to adopt. Other projects usually assign a coordinator/editor for "
+"each language, who is responsible for reviewing and merging translation "
+"contributions."
+msgstr ""
+
+#: ../../TRANSLATING.md:292
+msgid ""
+"Each language has an assigned editor who is responsible for reviewing and"
+" merging translation contributions. The editor will review the changes to"
+" make sure they are accurate and consistent with the style and tone of "
+"the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:294
+msgid ""
+"Sometimes the editor may ask for clarification or suggest changes to "
+"improve the translation. If this happens, you can make the requested "
+"changes and push them to the same branch where you submitted the original"
+" PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:296
+msgid ""
+"When the editor is satisfied with the translation, they will merge the "
+"PR. The translated version of the guide will be available on the "
+"pyOpenSci website once the language is released."
+msgstr ""
+
+#: ../../TRANSLATING.md:298
+msgid "The Release Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:300
+msgid ""
+"If a language is ready to go live, the maintainers will add the language "
+"code to the `release_languages` list in the `conf.py` configuration file."
+msgstr ""
+
+#: ../../TRANSLATING.md:302
+msgid ""
+"When the guide is built for release in CI, Sphinx will also generate the "
+"translated versions of the guide for the languages in the "
+"`release_languages` list."
+msgstr ""
+
+#: ../../TRANSLATING.md:304
+msgid ""
+"Translations are released in the same way as the English version of the "
+"guide, and the translated versions will be available in folders named "
+"after the language code. For example, the Spanish translation will be "
+"available at: `https://www.pyopensci.org/python-package-guide/es/` when "
+"it is published online."
+msgstr ""
+
+#: ../../TRANSLATING.md:306
+msgid "Frequently Asked Questions (FAQ)"
+msgstr ""
+
+#: ../../TRANSLATING.md:308
+msgid "How do I know which strings need to be translated?"
+msgstr ""
+
+#: ../../TRANSLATING.md:310
+msgid ""
+"When you run the `sphinx-intl stat` command, you will see a list of `.po`"
+" files with the number of translated, fuzzy, and untranslated strings. "
+"You can start by working on the files with the most untranslated strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:312
+msgid "What happens when a string has changed in the original English text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:314
+msgid ""
+"If a string has changed in the original English version, it will be "
+"marked as `fuzzy` in the translation file the next time it is updated "
+"(`update-language` or `update-release-languages`). Contributors working "
+"on the translation can then review the fuzzy entries and make the "
+"necessary changes to ensure it is accurate, before removing the `fuzzy` "
+"tag."
+msgstr ""
+
+#: ../../TRANSLATING.md:316
+msgid "How do I handle links in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:318
+msgid ""
+"You should keep the links in the translated text, but make sure to update"
+" the link text if necessary. For example, if the original English text "
+"contains a link to `[What is a Python package?](/tutorials/intro)`, you "
+"should keep the link in the translated text but update the link text to "
+"`[¿Que es un paquete de Python?](/tutorials/intro)`."
+msgstr ""
+
+#: ../../TRANSLATING.md:320
+msgid "How do I handle formatting in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:322
+msgid ""
+"You should keep the formatting in the translated text, but make sure to "
+"translate the text inside the formatting tags as well. For example, if "
+"the original English text is `**Test special cases:**`, you should keep "
+"the bold formatting in the translated text but update the text inside the"
+" formatting tags to `**Prueba casos especiales:**`."
+msgstr ""
+
+#: ../../TRANSLATING.md:324
+msgid "How do I handle strings that are too long for a single line?"
+msgstr ""
+
+#: ../../TRANSLATING.md:326
+msgid ""
+"If the original English text is too long for a single line, it may be "
+"split into multiple lines. Multiline strings in the `.po` file are "
+"indicated by an empty string in the `msgid` and `msgstr` fields, followed"
+" by the continuation of the text in the next line. For example:"
+msgstr ""
+
+#: ../../TRANSLATING.md:339
+msgid "How do I translate images?"
+msgstr ""
+
+#: ../../TRANSLATING.md:341
+msgid ""
+"You should not translate images in the guide. Producing translated "
+"versions of images is a complex process that requires additional tools "
+"and resources, and it is not typically done unless the translated images "
+"are created alongside the original images. More often, the text around "
+"the image is modified to include any necessary translations."
+msgstr ""
+
+#: ../../TRANSLATING.md:343
+msgid ""
+"In some special cases, an image might be critical to the understanding of"
+" the content. In those cases, the translations will be handled by the "
+"maintainers and editors outside this workflow."
+msgstr ""
+
+#: ../../TRANSLATING.md:345
+msgid ""
+"I am interested in translating the guide into a language that is not "
+"listed. How can I get started?"
+msgstr ""
+
+#: ../../TRANSLATING.md:347
+msgid ""
+"If you want to start a new translation of the guide into a language that "
+"is not listed, you should [create an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository to let the maintainers "
+"know that you intend to work on it. This will help avoid duplication of "
+"effort and ensure that the maintainers are ready to review your "
+"contribution when you are done."
+msgstr ""
+
+#: ../../TRANSLATING.md:349
+msgid "How do I know when a translation is ready to be released?"
+msgstr ""
+
+#: ../../TRANSLATING.md:351
+msgid ""
+"When a translation is ready to be included in the next release of the "
+"guide, the maintainers will add the language code to the "
+"`release_languages` list in the `conf.py` configuration file. This will "
+"trigger the build of the translation during the release process, and the "
+"translated version of the guide will be available on the pyOpenSci "
+"website."
+msgstr ""
+
+#: ../../TRANSLATING.md:353
+msgid ""
+"TODO: There are many approaches here, some projects release a translation"
+" as soon as some strings are translated, others wait until a certain "
+"percentage of the content is translated."
+msgstr ""
+
+#: ../../TRANSLATING.md:355
+msgid "How can I get help with my translation?"
+msgstr ""
+
+#: ../../TRANSLATING.md:357
+msgid ""
+"If you have any questions or need help with your translation, you can "
+"create an [issue](https://github.com/pyOpenSci/python-package-"
+"guide/issues) in the [Packaging Guide "
+"repository](https://github.com/pyOpenSci/python-package-guide)"
+msgstr ""
+
+#: ../../TRANSLATING.md:359
+msgid ""
+"You can also ask in the PyOpenSci Discord server ([click "
+"here](https://discord.gg/NQtTTqtv) to join), you will find a general "
+"channel for questions related to our workflow, processes, and tools "
+"(translation-general) and channels for each of the languages we are "
+"working on (spanish-translation, japanese-translation, etc)."
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/continuous-integration.po b/locales/el/LC_MESSAGES/continuous-integration.po
new file mode 100644
index 000000000..fda225b63
--- /dev/null
+++ b/locales/el/LC_MESSAGES/continuous-integration.po
@@ -0,0 +1,241 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2025.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-18 13:00-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.16.0\n"
+
+#: ../../continuous-integration/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:11
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:13
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:15
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:20
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:22
+msgid ""
+"When you’re ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:25
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:26
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:27
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:29
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:31
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:32
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:34
+msgid "What is Continuous Deployment (CD)?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:36
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:38
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:39
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:41
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:43
+msgid "Why use CI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:45
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:47
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:49
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:52
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:55
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:57
+msgid "CI / CD platforms"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:59
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:62
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:65
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:67
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:72
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:75
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:76
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:77
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:80
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:82
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "What is CI?"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "Continuous Integration"
+msgstr ""
+
+#: ../../continuous-integration/index.md:2
+msgid ""
+"Continuous Integration (CI) and Continuous Deployment (CD) for your "
+"Python package"
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/documentation.po b/locales/el/LC_MESSAGES/documentation.po
new file mode 100644
index 000000000..96f4b7481
--- /dev/null
+++ b/locales/el/LC_MESSAGES/documentation.po
@@ -0,0 +1,3405 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../documentation/glossary.md:7
+msgid "Python packaging glossary"
+msgstr ""
+
+#: ../../documentation/glossary.md:9
+msgid "Core packaging"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "`__init__.py`"
+msgstr ""
+
+#: ../../documentation/glossary.md:13
+msgid ""
+"A special Python file that marks a directory as a Python package. When "
+"Python sees this file, it knows the folder contains importable code. It "
+"can either be empty or contain code that runs when the package is "
+"imported."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "API token"
+msgstr ""
+
+#: ../../documentation/glossary.md:19
+msgid ""
+"A secret key used to authenticate with PyPI or TestPyPI when publishing a"
+" package. You generate one in your account settings and use it in place "
+"of a password. **Treat it like a password and never share it or commit it"
+" to version control**."
+msgstr ""
+
+#: ../../documentation/glossary.md:12
+msgid "Build backend"
+msgstr ""
+
+#: ../../documentation/glossary.md:25
+msgid ""
+"The tool that does the actual work of building your package into "
+"distribution files. In this guide, the build backend is Hatchling. You "
+"specify it in your `pyproject.toml` file under `[build-system]`."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid ""
+"You execute a build by running `hatch build`. Alternatively, you can run"
+" `python -m build`. [Reference: official Python Packaging "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend)"
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Distribution files"
+msgstr ""
+
+#: ../../documentation/glossary.md:33
+msgid ""
+"The files you upload to PyPI so others can install your package. There "
+"are two common types: a wheel (`.whl`) and a source distribution "
+"(`.tar.gz`). See also `Wheel (.whl)` and `Source distribution (sdist)`."
+msgstr ""
+
+#: ../../documentation/glossary.md:26
+msgid "Module"
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid ""
+"A single Python file (`.py`) containing code such as functions, classes, "
+"or variables that can be imported. A package is made up of one or more "
+"modules."
+msgstr ""
+
+#: ../../documentation/glossary.md:31
+msgid "`pyproject.toml`"
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid ""
+"The configuration file at the root of your Python package. Written in "
+"TOML format, it stores metadata such as name, version, authors, and "
+"license. It can also configure tools such as Hatch, uv, and pytest. See "
+"also [Make your Python package PyPI ready](../tutorials/pyproject-toml)."
+msgstr ""
+
+#: ../../documentation/glossary.md:37
+msgid "Python package"
+msgstr ""
+
+#: ../../documentation/glossary.md:50
+msgid ""
+"A directory of Python code structured so it can be installed, imported, "
+"and shared with others. A package includes at least an `__init__.py` file"
+" and a `pyproject.toml` file. This is sometimes referred to as a "
+"**regular package**."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid ""
+"Info: You may hear the term **namespaced package** which is not really a "
+"package at all but a container of subpackages. This is out of scope for "
+"this guide. If interested, consult the [Python "
+"documentation](https://docs.python.org/3/glossary.html#term-namespace-"
+"package)."
+msgstr ""
+
+#: ../../documentation/glossary.md:47
+msgid "PyPI / TestPyPI"
+msgstr ""
+
+#: ../../documentation/glossary.md:60
+msgid ""
+"PyPI (the Python Package Index) is the official repository where Python "
+"packages are published and installed from. TestPyPI is a separate "
+"practice environment used for learning and testing publishing workflows. "
+"See [pypi.org](https://pypi.org) and "
+"[test.pypi.org](https://test.pypi.org). See also [Publish your Python "
+"package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid "Source distribution (sdist)"
+msgstr ""
+
+#: ../../documentation/glossary.md:68
+msgid ""
+"One of the two distribution file types for a Python package. The sdist "
+"(`.tar.gz`) contains source code and project files. When someone installs"
+" from an sdist, tools build the package locally first. See also [Publish "
+"your Python package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:61
+msgid "TOML"
+msgstr ""
+
+#: ../../documentation/glossary.md:74
+msgid ""
+"Tom's Obvious Minimal Language, a simple format for configuration files. "
+"TOML organizes data into tables such as `[project]` or `[tool.hatch]` and"
+" arrays. `pyproject.toml` uses TOML."
+msgstr ""
+
+#: ../../documentation/glossary.md:66
+msgid "Trusted publishing"
+msgstr ""
+
+#: ../../documentation/glossary.md:79
+msgid ""
+"A secure way to publish to PyPI using GitHub Actions instead of an API "
+"token. Rather than storing a secret token, you configure PyPI to trust "
+"your repository directly. See also [Setup Trusted Publishing for secure "
+"and automated publishing via GitHub Actions](../tutorials/trusted-"
+"publishing)."
+msgstr ""
+
+#: ../../documentation/glossary.md:72
+msgid "Wheel (.whl)"
+msgstr ""
+
+#: ../../documentation/glossary.md:85
+msgid ""
+"The binary distribution type for a Python package. A wheel is a pre-built"
+" binary format (`.whl`, a ZIP file) that installs directly without a "
+"build step. For many pure Python packages, one wheel can work across "
+"platforms. See also [Publish your Python package to PyPI](../tutorials"
+"/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:92
+msgid "Tools"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "copier"
+msgstr ""
+
+#: ../../documentation/glossary.md:96
+msgid ""
+"A command-line tool for creating new projects from templates. In this "
+"guide, you can use copier with the pyOpenSci package template to set up "
+"structure, configuration, and tooling quickly. See "
+"[copier.readthedocs.io](https://copier.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "coverage.py"
+msgstr ""
+
+#: ../../documentation/glossary.md:102
+msgid ""
+"A tool that measures how much of your code is exercised by tests, often "
+"as a percentage. It shows which lines and branches are covered. See "
+"[coverage.readthedocs.io](https://coverage.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:11
+msgid "Hatch"
+msgstr ""
+
+#: ../../documentation/glossary.md:107
+msgid ""
+"A modern Python packaging and project management tool. In this guide, "
+"Hatch is used to build packages, manage environments, run scripts, and "
+"publish. Configuration lives in `pyproject.toml`. See "
+"[hatch.pypa.io](https://hatch.pypa.io). See also [Get to know "
+"Hatch](../tutorials/get-to-know-hatch)."
+msgstr ""
+
+#: ../../documentation/glossary.md:18
+msgid "Hatchling"
+msgstr ""
+
+#: ../../documentation/glossary.md:114
+msgid ""
+"The build backend used by Hatch. When you run `python -m build` or `hatch"
+" build`, Hatchling reads `pyproject.toml` and creates sdist and wheel "
+"files. See "
+"[hatch.pypa.io/latest/backend](https://hatch.pypa.io/latest/backend/)."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "pip"
+msgstr ""
+
+#: ../../documentation/glossary.md:120
+msgid ""
+"Python's default package installer. You can use it to install packages "
+"from PyPI into an environment with commands such as `pip install package-"
+"name`. See [pip.pypa.io](https://pip.pypa.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid "pytest"
+msgstr ""
+
+#: ../../documentation/glossary.md:125
+msgid ""
+"A widely used Python testing framework for discovering and running tests."
+" In this guide, pytest often runs through Hatch scripts. See "
+"[docs.pytest.org](https://docs.pytest.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:34
+msgid "Ruff"
+msgstr ""
+
+#: ../../documentation/glossary.md:130
+msgid ""
+"A fast Python linter and formatter. It checks style and can automatically"
+" fix many styling issues. See "
+"[docs.astral.sh/ruff](https://docs.astral.sh/ruff)."
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid "Sphinx"
+msgstr ""
+
+#: ../../documentation/glossary.md:135
+msgid ""
+"A documentation generator for Python projects. Sphinx reads docstrings "
+"and documentation files to build a docs site. See [sphinx-"
+"doc.org](https://www.sphinx-doc.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid "Twine"
+msgstr ""
+
+#: ../../documentation/glossary.md:140
+msgid ""
+"A tool for securely uploading distribution files to PyPI or TestPyPI. See"
+" [twine.readthedocs.io](https://twine.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:48
+msgid "uv"
+msgstr ""
+
+#: ../../documentation/glossary.md:144
+msgid ""
+"A fast Python package and environment manager. In this guide, you can use"
+" uv to manage dependencies and run commands in project environments. See "
+"[docs.astral.sh/uv](https://docs.astral.sh/uv)."
+msgstr ""
+
+#: ../../documentation/glossary.md:149
+msgid "Hatch-specific concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Hatch environment"
+msgstr ""
+
+#: ../../documentation/glossary.md:153
+msgid ""
+"An isolated Python environment managed by Hatch. You can define multiple "
+"environments in `pyproject.toml` for testing, docs, builds, and style "
+"checks, each with its own dependencies and scripts."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Script (Hatch)"
+msgstr ""
+
+#: ../../documentation/glossary.md:158
+msgid ""
+"A named command defined inside a Hatch environment in `pyproject.toml`. "
+"Scripts provide shortcuts such as `hatch run build:check` and `hatch run "
+"test:run`."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Task runner"
+msgstr ""
+
+#: ../../documentation/glossary.md:163
+msgid ""
+"A tool that automates repetitive development workflows. Hatch can "
+"function as a task runner by letting you define scripts that run in "
+"specific environments."
+msgstr ""
+
+#: ../../documentation/glossary.md:168
+msgid "Development concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code coverage"
+msgstr ""
+
+#: ../../documentation/glossary.md:172
+msgid ""
+"A measure of how much source code executes during tests, usually as a "
+"percentage. High coverage does not guarantee no bugs, but low coverage "
+"can indicate untested areas."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Dependencies"
+msgstr ""
+
+#: ../../documentation/glossary.md:177
+msgid ""
+"Other Python packages needed for your package to work. Common classes "
+"include required dependencies, optional dependencies, and development "
+"dependencies."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Docstring"
+msgstr ""
+
+#: ../../documentation/glossary.md:182
+msgid ""
+"A string at the top of a function, class, or module that describes "
+"behavior, inputs, and outputs. Docstrings can be used by tools such as "
+"Sphinx to generate API documentation."
+msgstr ""
+
+#: ../../documentation/glossary.md:15
+msgid "End-to-end test"
+msgstr ""
+
+#: ../../documentation/glossary.md:187
+msgid ""
+"A test that simulates a complete user workflow from start to finish. In "
+"scientific packages, tutorials executed during docs builds can serve as "
+"end-to-end tests."
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Integration test"
+msgstr ""
+
+#: ../../documentation/glossary.md:192
+msgid ""
+"A test that checks how multiple functions or components work together. "
+"Unlike a unit test, it verifies behavior across a broader workflow."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "Linting"
+msgstr ""
+
+#: ../../documentation/glossary.md:196
+msgid ""
+"Automatic checks for style issues, formatting problems, and potential "
+"errors in code."
+msgstr ""
+
+#: ../../documentation/glossary.md:28
+msgid "Unit test"
+msgstr ""
+
+#: ../../documentation/glossary.md:200
+msgid ""
+"A test that checks one function or method in isolation. Unit tests are "
+"fast and help pinpoint where failures occur."
+msgstr ""
+
+#: ../../documentation/glossary.md:32
+msgid "Version specifier / lower bound"
+msgstr ""
+
+#: ../../documentation/glossary.md:204
+msgid ""
+"A constraint on which dependency versions are accepted. For example, "
+"`numpy>=1.24` sets a lower bound so versions older than 1.24 are not "
+"used."
+msgstr ""
+
+#: ../../documentation/glossary.md:209
+msgid "Git / GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "git"
+msgstr ""
+
+#: ../../documentation/glossary.md:213
+msgid "A tool for version control."
+msgstr ""
+
+#: ../../documentation/glossary.md:3
+msgid "GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md:216
+msgid ""
+"A service providing accounts and organizations to facilitate sharing "
+"repositories."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "GitHub Codespace"
+msgstr ""
+
+#: ../../documentation/glossary.md:219
+msgid ""
+"A cloud-based development environment that runs in a browser. See "
+"[github.com/features/codespaces](https://github.com/features/codespaces)."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Scoped commit"
+msgstr ""
+
+#: ../../documentation/glossary.md:223
+msgid ""
+"A git commit that makes one focused change, such as one fix or one "
+"feature update. Scoped commits improve reviewability and history clarity."
+msgstr ""
+
+#: ../../documentation/glossary.md:228
+msgid "Documentation"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code of conduct"
+msgstr ""
+
+#: ../../documentation/glossary.md:232
+msgid ""
+"A document that sets expectations for how contributors and community "
+"members treat one another in a project."
+msgstr ""
+
+#: ../../documentation/glossary.md:4
+msgid "Contributing guide"
+msgstr ""
+
+#: ../../documentation/glossary.md:236
+msgid ""
+"A document, often `CONTRIBUTING.md`, that explains how others can "
+"contribute, including setup steps, workflow, and code style."
+msgstr ""
+
+#: ../../documentation/glossary.md:8
+msgid "MyST Markdown"
+msgstr ""
+
+#: ../../documentation/glossary.md:240
+msgid ""
+"Markedly Structured Text, a Markdown flavor that supports Sphinx "
+"directives and roles. It allows Markdown-based docs while keeping Sphinx "
+"features. See [myst-parser.readthedocs.io](https://myst-"
+"parser.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:14
+msgid "README"
+msgstr ""
+
+#: ../../documentation/glossary.md:246
+msgid ""
+"The front page of your package on GitHub and often on PyPI. A good README"
+" explains purpose, installation, usage, and support options."
+msgstr ""
+
+#: ../../documentation/glossary.md:250
+msgid "AI"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Generative AI / LLM"
+msgstr ""
+
+#: ../../documentation/glossary.md:254
+msgid ""
+"Generative AI systems produce content such as text, code, or images. LLM "
+"stands for Large Language Model, the technology behind tools such as "
+"ChatGPT, GitHub Copilot, and Claude."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:1
+msgid "Tools to Build and Host your Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:3
+msgid ""
+"The most common tool for building documentation in the Python ecosystem "
+"currently is Sphinx. However, some maintainers are using tools like "
+"[mkdocs](https://www.mkdocs.org/) for documentation. It is up to you to "
+"use the platform that you prefer for your documentation!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:8
+msgid ""
+"In this section, we introduce Sphinx as a common tool to build "
+"documentation. We talk about various syntax options that you can use when"
+" writing Sphinx documentation including mySt and rST."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:12
+msgid ""
+"We also talk about ways to publish your documentation online and Sphinx "
+"tools that might help you optimize your documentation website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:1
+msgid "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:3
+msgid "There are three commonly used syntaxes for creating Python documentation:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:4
+msgid ""
+"[markdown](https://www.markdownguide.org/): Markdown is an easy-to-learn "
+"text syntax. It is the default syntax used in Jupyter Notebooks. There "
+"are tools that you can add to a Sphinx website that allow it to render "
+"markdown as html. However, using markdown to write documentation has "
+"limitations. For instance if you want to add references, colored call out"
+" blocks and other custom elements to your documentation, you will need to"
+" use either **myST** or **rST**."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:8
+msgid ""
+"[rST (ReStructured Text):](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/basics.html). **rST** is the "
+"native syntax that sphinx supports. rST was the default syntax used for "
+"documentation for many years. However, in recent years myST has risen to "
+"the top as a favorite for documentation given the flexibility that it "
+"allows."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:9
+msgid ""
+"[myST:](https://myst-parser.readthedocs.io/en/latest/intro.html) myST is "
+"a combination of `markdown` and `rST` syntax. It is a nice option if you "
+"are comfortable writing markdown. `myst` is preferred by many because it "
+"offers both the rich functionality of rST combined with a simple-to-write"
+" markdown syntax."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:12
+msgid ""
+"While you can chose to use any of the syntaxes listed above, we suggest "
+"using `myST` because:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:15
+msgid "It is a simpler syntax and thus easier to learn;"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:16
+msgid ""
+"The above simplicity will make it easier for more people to contribute to"
+" your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:17
+msgid ""
+"Most of your core Python package text files, such as your README.md file,"
+" are already in `.md` format"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:18
+msgid ""
+"`GitHub` and `Jupyter Notebooks` support markdown thus it's more widely "
+"used in the scientific ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:22
+msgid ""
+"If you are on the fence about myST vs rst, you might find that **myST** "
+"is easier for more people to contribute to."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:1
+msgid "How to publish your Python package documentation online"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:3
+msgid ""
+"We suggest that you setup a hosting service for your Python package "
+"documentation. Two free and commonly used ways to quickly create a "
+"documentation website hosting environment are below."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:7
+msgid ""
+"You can host your documentation yourself using [GitHub "
+"Pages](https://pages.github.com/) or another online hosting service."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:8
+msgid ""
+"You can host your documentation using [Read the "
+"Docs](https://readthedocs.org/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:10
+msgid "What is Read the Docs ?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:11
+msgid ""
+"[Read the Docs](https://readthedocs.org/) is a documentation hosting "
+"service that supports publishing your project's documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:13
+msgid ""
+"Read the Docs is a fully featured, free, documentation hosting service. "
+"Some of its many features include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:16
+msgid ""
+"Is free to host your documentation (but there are also paid tiers if you "
+"wish to customize hosting)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:17
+msgid "Automates building your documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:18
+msgid ""
+"Allows you to turn on integration with pull requests where you can view "
+"documentation build progress (success vs failure)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:19
+msgid ""
+"Supports versioning of your documentation which allows users to refer to "
+"older tagged versions of the docs if they are using older versions of "
+"your package."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:20
+msgid "Supports downloading of documentation in PDF and other formats."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:21
+msgid ""
+"You can customize the documentation build using a **.readthedocs.yaml** "
+"file in your GitHub repository."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:24
+msgid "What is GitHub Pages?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:25
+msgid ""
+"[GitHub Pages](https://docs.github.com/en/pages/getting-started-with-"
+"github-pages/what-is-github-pages) is a free web hosting service offered "
+"by GitHub. Using GitHub pages, you can build your documentation locally "
+"or using a Continuous Integration setup, and then push to a branch in "
+"your GitHub repository that is setup to run the GitHub Pages web build."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:33
+msgid "Read the Docs vs GitHub Pages"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:35
+msgid ""
+"GitHub pages is a great option for your documentation deployment. "
+"However, you will need to do a bit more work to build and deploy your "
+"documentation if you use GitHub pages."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:39
+msgid ""
+"Read the Docs can be setup in your Read the Docs user account. The "
+"service automates the entire process of building and deploying your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:42
+msgid ""
+"If you don't want to maintain a documentation website for your Python "
+"package, we suggest using the Read the Docs website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:1
+msgid "Using Sphinx to Build Python Package Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:17
+msgid ""
+"On this page we discuss using [Sphinx](https://www.sphinx-doc.org/) to "
+"build your user-facing package documentation. While Sphinx is currently "
+"the most commonly-used tool in the scientific Python ecosystem, you are "
+"welcome to explore other tools to build documentation such as "
+"[mkdocs](https://www.mkdocs.org/) which is gaining popularity in the "
+"Python packaging ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:25
+msgid "Examples of documentation websites that we love:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:27
+msgid "[GeoPandas](https://geopandas.org/en/stable/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:28
+msgid ""
+"[View rst to create landing "
+"page](https://raw.githubusercontent.com/geopandas/geopandas/main/doc/source/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:29
+msgid "[verde](https://www.fatiando.org/verde/latest/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:30
+msgid ""
+"[View verde landing page code - rst "
+"file.](https://github.com/fatiando/verde/blob/main/doc/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:31
+msgid ""
+"[Here is our documentation if you want to see a myST example of a landing"
+" page.](https://github.com/pyOpenSci/python-package-"
+"guide/blob/main/index.md)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:34
+msgid "Sphinx - a static site generator"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:36
+msgid ""
+"Sphinx is a [static-site "
+"generator](https://www.cloudflare.com/learning/performance/static-site-"
+"generator/). A static site generator is a tool that creates html for a "
+"website based upon a set of templates. The html files are then served "
+"\"Statically\" which means that there is no generation or modification of"
+" the files on the fly."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:39
+msgid "Sphinx is written using Python."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:41
+msgid "Sphinx sites can be customized using extensions and themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:43
+msgid ""
+"The functionality of Sphinx can be extended using extensions and themes. "
+"A few examples include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:46
+msgid ""
+"You can apply documentation themes for quick generation of beautiful "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:47
+msgid ""
+"You can [automatically create documentation for your package's functions "
+"and classes (the package's API) from docstrings in your code using the "
+"autodoc extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/autodoc.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:48
+msgid ""
+"You can [run and test code examples in your docstrings using the doctest "
+"extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:49
+msgid ""
+"While Sphinx natively supports the `rST` syntax, you can add custom "
+"syntax parsers to support easier-to-write syntax using tools such as [the"
+" MyST parser](https://myst-parser.readthedocs.io/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:51
+msgid "Commonly used Sphinx themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:53
+msgid ""
+"You are free to use whatever Sphinx theme that you prefer. However, the "
+"most common Sphinx themes used in the Python scientific community "
+"include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:57
+msgid "[pydata-sphinx-theme](https://pydata-sphinx-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:58
+msgid "[sphinx-book-theme](https://sphinx-book-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:59
+msgid "[furo](https://pradyunsg.me/furo/quickstart/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:63
+msgid "This book is created using Sphinx and the `furo` theme."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:1
+msgid "Optimizing your documentation so search engines (and other users) find it"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:3
+msgid ""
+"If you are interested in more people finding your package, you may want "
+"to add some core Sphinx extensions (and theme settings) that will help "
+"search engines such as Google find your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:7
+msgid "Google Analytics"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:11
+msgid ""
+"Google analytics [is not compliant with the European General Data "
+"Protection Regulation (GDPR)](https://matomo.org/blog/2022/05/google-"
+"analytics-4-gdpr/). While there are many components to this regulation, "
+"one of the core elements is that you have to let users know on your site "
+"that you are collecting data and they have to consent. While it is "
+"possible to add infrastructure around Google Analytics to make it close "
+"to following GDPR regulations, the community is slowly shifting away from"
+" Google using open tools such as [Plausible](https://plausible.io/), "
+"[Cloudflare Web Analytics](https://www.cloudflare.com/web-analytics/) and"
+" [Matomo](https://matomo.org) for web analytics."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:13
+msgid ""
+"pyOpenSci is currently looking into free options for open source "
+"developers."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:16
+msgid ""
+"Some of the [sphinx themes such as the `pydata-sphinx-theme` and sphinx-"
+"book-theme have built in support for Google Analytics](https://pydata-"
+"sphinx-theme.readthedocs.io/en/latest/user_guide/analytics.html#google-"
+"analytics). However, if the theme that you chose does not offer Google "
+"Analytics support, you can use the [`sphinxcontrib-gtagjs` "
+"extension](https://github.com/attakei/sphinxcontrib-gtagjs). This "
+"extension will add a Google Analytics site tag to each page of your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:22
+msgid ""
+"[sphinx-sitemap](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/index.html) for search engine "
+"optimization"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:24
+msgid ""
+"While we are trying to move away from Google Analytics do to compliance "
+"and privacy issues, search engine optimization is still important. Google"
+" is the most popular search engine. And if your documentation is search "
+"optimized, users are more likely to find your package!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:30
+msgid ""
+"If you are interested in optimizing your documentation for search engines"
+" such as Google, you want a **sitemap.xml** file. You can submit this "
+"sitemap to Google and it will index your entire site. This over time can "
+"make the content on your site more visible to others when they search."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:36
+msgid "This extension is lightweight."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:38
+msgid ""
+"It [requires that you to add it to your Sphinx `conf.py` extension list "
+"and site your documentation base url](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/getting-started.html)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:40
+msgid "[sphinxext.opengraph](https://github.com/sphinx-doc/sphinxext-opengraph)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:42
+msgid ""
+"OpenGraph is an extension that allows you to add metadata to your "
+"documentation content pages. [The OpenGraph protocol allows other "
+"websites to provide a useful preview of the content on your page when "
+"shared](https://www.freecodecamp.org/news/what-is-open-graph-and-how-"
+"can-i-use-it-for-my-website/#heading-what-is-open-graph). This is "
+"important for when the pages in your documentation are shared on social "
+"media and even for shares on collaboration platforms like Slack and "
+"Discourse."
+msgstr ""
+
+#: ../../documentation/index.md:3
+msgid "Documentation Overview"
+msgstr ""
+
+#: ../../documentation/index.md:3 ../../documentation/index.md:10
+#: ../../documentation/index.md:21 ../../documentation/index.md:42
+msgid "Intro"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Document Your Code (API)"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Package Tutorials"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Write User Documentation"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Contributing File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Development Guide"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Changelog File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Docs for Contributors & Maintainers"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "README file"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Code of Conduct File"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "LICENSE files"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Community Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Sphinx for Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "myST vs Markdown vs rst"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publish Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Website Hosting and Optimization"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publication tools for your docs"
+msgstr ""
+
+#: ../../documentation/index.md:1
+msgid "Documentation for your Open Source Python Package"
+msgstr ""
+
+#: ../../documentation/index.md:55
+msgid ""
+"Please note that the tools discussed here are those that we see commonly "
+"used in the community. As tools evolve we will update this guide. If you "
+"are submitting a package for pyOpenSci peer review and use other tools "
+"that are not listed in our guide to build your package you can still "
+"submit for review! The tools listed here are suggestions, not "
+"requirements. Our requirements are focused on the documentation content "
+"of your package."
+msgstr ""
+
+#: ../../documentation/index.md:65
+msgid "Documentation is critical for your Python package's success"
+msgstr ""
+
+#: ../../documentation/index.md:67
+msgid ""
+"Documentation is as important to the success of your Python open source "
+"package as the code itself."
+msgstr ""
+
+#: ../../documentation/index.md:70
+msgid ""
+"Quality code is of course valuable as its how your package gets the tasks"
+" done. However, if users don't understand how to use your package in "
+"their workflows, then they won't use it."
+msgstr ""
+
+#: ../../documentation/index.md:73
+msgid ""
+"Further, explicitly documenting how to contribute is important if you "
+"wish to build a base of contributors to your package."
+msgstr ""
+
+#: ../../documentation/index.md:76
+msgid "Two types of Python package users"
+msgstr ""
+
+#: ../../documentation/index.md:78
+msgid ""
+"The documentation that you write for your package should target two types"
+" of users:"
+msgstr ""
+
+#: ../../documentation/index.md:81
+msgid "1. Basic Tool Users"
+msgstr ""
+
+#: ../../documentation/index.md:83
+msgid ""
+"Basic tool users are the people who will use your package code in their "
+"Python workflows. They might be new(er) to Python and/or data science. Or"
+" expert programmers. But they might not have a background in software "
+"development. These users need to know:"
+msgstr ""
+
+#: ../../documentation/index.md:88
+msgid "How to install your package"
+msgstr ""
+
+#: ../../documentation/index.md:89
+msgid "How to install dependencies that your package requires"
+msgstr ""
+
+#: ../../documentation/index.md:90
+msgid "How to get started using the code base"
+msgstr ""
+
+#: ../../documentation/index.md:91
+msgid ""
+"Information on how to cite your code / give you credit if they are using "
+"it in a research application."
+msgstr ""
+
+#: ../../documentation/index.md:93
+msgid ""
+"Information on the license that your code uses so they know how they can "
+"or can't use the code in an operational setting."
+msgstr ""
+
+#: ../../documentation/index.md:96
+msgid "2. Potential tool contributors"
+msgstr ""
+
+#: ../../documentation/index.md:98
+msgid ""
+"The other subset of users are more experienced and/or more engaged with "
+"your package. As such they are potential contributors. These users:"
+msgstr ""
+
+#: ../../documentation/index.md:102
+msgid "might have a software development background,"
+msgstr ""
+
+#: ../../documentation/index.md:103
+msgid ""
+"might also be able to contribute bug fixes to your package or updates to "
+"your documentation"
+msgstr ""
+
+#: ../../documentation/index.md:104
+msgid ""
+"might also just be users who will find spelling errors in your "
+"documentation, or bugs in your tutorials."
+msgstr ""
+
+#: ../../documentation/index.md:106
+msgid ""
+"These users need all of the things that a basic user needs. But, they "
+"also need to understand how you'd like for them to contribute to your "
+"package. These potential contributors need:"
+msgstr ""
+
+#: ../../documentation/index.md:110
+msgid ""
+"A development guide to help them understand the infrastructure used in "
+"your package repository."
+msgstr ""
+
+#: ../../documentation/index.md:111
+msgid ""
+"Contributing guidelines that clarify the types of contributions that you "
+"welcome and how you'd prefer those contributions to be submitted."
+msgstr ""
+
+#: ../../documentation/index.md:114
+msgid ""
+"It's important to remember that the definition of what a contribution is "
+"can be broad. A contribution could be something as simple as a bug "
+"report. Or fixing a spelling issue in your documentation. Or it could be "
+"a code fix that includes a new test that covers an edge-case that they "
+"discovered."
+msgstr ""
+
+#: ../../documentation/index.md:120
+msgid "Documentation elements that pyOpenSci looks for reviewing a Python package"
+msgstr ""
+
+#: ../../documentation/index.md:122
+msgid ""
+"In the pyOpenSci open peer review, we look for a documentation structure "
+"that supports both your tool users and potential contributors. The files "
+"and elements that we look for specifically can be found in our peer "
+"review check list (see link below)."
+msgstr ""
+
+#: ../../documentation/index.md:127
+msgid ""
+"In this guide, we discuss each required element, and also discuss other "
+"elements that you should consider in your package's documentation in more"
+" detail."
+msgstr ""
+
+#: ../../documentation/index.md:131
+msgid "View pyOpenSci peer review check list"
+msgstr ""
+
+#: ../../documentation/index.md:138
+msgid ""
+"Image showing the files in the the MovingPandas GitHub repository. Files "
+"in the image include code of conduct.md contributing.md license.txt and "
+"readme.md."
+msgstr ""
+
+#: ../../documentation/index.md:144
+msgid ""
+"An example from the MovingPandas GitHub repository with all of the major "
+"files in it including CONTRIBUTING.md, README.md, CODE_OF_CONDUCT.md and "
+"a LICENSE.txt file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/index.md:147
+msgid "What's next in this Python package documentation section?"
+msgstr ""
+
+#: ../../documentation/index.md:149
+msgid ""
+"In this section of the pyOpenSci package guide, we will walk you through "
+"best practices for setting up documentation for your Python package. We "
+"will also suggest tools that you can use to build your user-facing "
+"documentation website."
+msgstr ""
+
+#: ../../documentation/index.md:154
+msgid "Todo"
+msgstr ""
+
+#: ../../documentation/index.md:156
+msgid ""
+"Python version support You should always be explicit about which versions"
+" of Python your package supports. Keeping compatibility with old Python "
+"versions can be difficult as functionality changes. A good rule of thumb "
+"is that the package should support, at least, the latest three Python "
+"versions (e.g., 3.8, 3.7, 3.6)."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:1
+msgid "CHANGELOG.md Guide"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:3
+msgid "Introduction"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:5
+msgid ""
+"The `CHANGELOG.md` document serves as a valuable resource for developers "
+"and users alike to track the evolution of a project over time. "
+"Understanding the structure and purpose of a changelog helps users and "
+"contributors stay informed about new features, bug fixes, and other "
+"changes introduced in each release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:7
+msgid "What is CHANGELOG.md?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:9
+msgid ""
+"The primary purpose of `CHANGELOG.md` is to provide a record of notable "
+"changes made to the project with each new release. This document helps "
+"users understand what has been added, fixed, modified, or removed with "
+"each version of the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:11
+msgid ""
+"[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) is a great, "
+"simple resource for understanding what a changelog is and how to create a"
+" good changelog. It also includes examples of things to avoid."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:13
+msgid "Versioning your Python package and semantic versioning"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:16
+msgid ""
+"An important component of a package that serves as the backbone behind "
+"the changelog file is a good versioning scheme. Semantic Versioning is "
+"widely used across Python packages."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:17
+msgid ""
+"[Creating New Versions of Your Python Package](../../package-structure-"
+"code/python-package-versions.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:18
+msgid "[Semantic Versioning](https://semver.org)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:21
+msgid "Why is it important?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:23
+msgid ""
+"A well-maintained changelog is essential for transparent communication "
+"with users and developers. It serves as a centralized hub for documenting"
+" changes and highlights the progress made in each release. By keeping the"
+" changelog up-to-date, project maintainers can build trust with their "
+"user base and demonstrate their commitment to improving the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:25
+msgid "What does it include?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:27
+msgid ""
+"The contents of a `CHANGELOG.md` file typically follow a structured "
+"format, detailing the changes introduced in each release. While the exact"
+" format may vary depending on the project's conventions, some common "
+"elements found in changelogs for Python packages include:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:29
+msgid ""
+"**Versioning**: Clear identification of each release version using "
+"semantic versioning or another versioning scheme adopted by the project."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:31
+msgid ""
+"**Release Date**: The date when each version was released to the public, "
+"providing context for the timeline of changes."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:33
+msgid ""
+"**Change Categories**: Organizing changes into categories such as "
+"\"Added,\" \"Changed,\" \"Fixed,\" and \"Removed\" to facilitate "
+"navigation and understanding."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:35
+msgid ""
+"**Description of Changes**: A concise description of the changes made in "
+"each category, including new features, enhancements, bug fixes, and "
+"deprecated functionality."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:37
+msgid ""
+"**Links to Issues or Pull Requests**: References to relevant issue "
+"tracker items or pull requests associated with each change, enabling "
+"users to access more detailed information if needed."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:39
+msgid ""
+"**Upgrade Instructions**: Guidance for users on how to upgrade to the "
+"latest version, including any breaking changes or migration steps they "
+"need to be aware of."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:41
+msgid ""
+"**Contributor Recognition**: Acknowledgment of contributors who made "
+"significant contributions to the release, fostering a sense of community "
+"and appreciation for their efforts."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:43
+msgid "How do maintainers use it?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:45
+msgid "Often you will see a changelog that documents a few things:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:47
+msgid "Unreleased Section"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:49
+msgid ""
+"Unreleased commits are at the top of the changelog, commonly in an "
+"`Unreleased` section. This is where you can add new fixes, updates and "
+"features that have been added to the package since the last release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:51
+msgid "This section might look something like this:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:59
+msgid "Release Sections"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:61
+msgid ""
+"When you are ready to make a new release, you can move the elements into "
+"a section that is specific to that new release number."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:63
+msgid ""
+"This specific release section will sit below the unreleased section and "
+"can include any updates, additions, deprecations and contributors."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:65
+msgid ""
+"The unreleased section then always lives at the top of the file and new "
+"features continue to be added there. At the same time, after releasing a "
+"version like v1.0 all of its features remain in that specific section."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:83
+msgid "What does it look like?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:85
+msgid ""
+"This example comes from [Devicely](https://github.com/hpi-"
+"dhc/devicely/blob/main/CHANGELOG.md), a pyOpenSci accepted package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:3
+msgid "The CODE_OF_CONDUCT file - Python Packaging"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:5
+msgid "Example CODE_OF_CONDUCT files"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:8
+msgid ""
+"[SciPy Code of Conduct file - notice they included theirs in their "
+"documentation](https://docs.scipy.org/doc/scipy/dev/conduct/code_of_conduct.html)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:9
+msgid ""
+"[fatiando CODE_OF_CONDUCT.md "
+"file](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:12
+msgid ""
+"Your package should have a `CODE_OF_CONDUCT.md` file located the root of "
+"the repository. Once you have people using your package, you can consider"
+" the package itself as having a community around it. Some of this "
+"community uses your tool. These users may have questions or encounter "
+"challenges using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:18
+msgid ""
+"Others in the community might want to contribute to your tool. They might"
+" fix bugs, update documentation and engage with the maintainer team."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:22
+msgid "Why you need a CODE_OF_CONDUCT"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:24
+msgid ""
+"In order to keep this community healthy and to protect yourself, your "
+"maintainer team and your users from unhealthy behavior, it is important "
+"to have a [`CODE_OF_CONDUCT`](https://opensource.guide/code-of-conduct/)."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:28
+msgid ""
+"The `CODE_OF_CONDUCT` is important as it establishes what you expect in "
+"terms of how users and contributors interact with maintainers and each "
+"other. It also establishes rules and expectations which can then be "
+"enforced if need be to protect others from harmful and/or negative "
+"behaviors."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:34
+msgid ""
+"If you are not comfortable with creating your own `CODE_OF_CONDUCT` text,"
+" we encourage you to adopt the `CODE_OF_CONDUCT` language used in the "
+"[Contributor Covenant](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/). [Many other "
+"communities](https://www.contributor-covenant.org/adopters/) have adopted"
+" this `CODE_OF_CONDUCT` as their own. See the [Fatiando a Terra "
+"Geoscience Python community's example "
+"here.](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:2
+msgid "Your Python Package CONTRIBUTING File"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:4
+msgid ""
+"The **CONTRIBUTING.md** is the landing page guide for your project's "
+"contributors. It outlines how contributors can get involved, the "
+"contribution types that you welcome, and how contributors should interact"
+" or engage with you and your maintainer team. The contributor guide "
+"should also link to get-started resources that overview how to set up "
+"development environments, what type of workflow you expect on "
+"GitHub/GitLab, and anything else that contributors might need to get "
+"started."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:6
+msgid ""
+"This file benefits maintainers and contributors. For contributors, it "
+"provides a roadmap that helps them get started and makes their first "
+"contribution easier. For maintainers, it answers commonly asked questions"
+" and reduces the burden of explaining your process to every person who "
+"wants to contribute. This document creates a more collaborative and "
+"efficient development process for everyone."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:8
+msgid "CONTRIBUTING files lower barriers to entry"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:10
+msgid ""
+"The contributing file lowers barriers to entry for new and seasoned "
+"contributors as it provides a roadmap."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:12
+msgid ""
+"**For Contributors**: It provides clear instructions on contributing, "
+"from reporting issues to submitting pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:13
+msgid ""
+"**For Maintainers**: It streamlines contributions by setting expectations"
+" and standardizing processes, reducing the time spent clarifying common "
+"questions or handling incomplete issues or pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:15
+msgid ""
+"Including a well-written CONTRIBUTING.md file in your project is one way "
+"of making it more welcoming and open to new and seasoned contributors. It"
+" also helps create a smoother workflow for everyone involved."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:17
+msgid "Make it welcoming"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:19
+msgid ""
+"Make the guide welcoming. Use accessible language to encourage "
+"participation from contributors of all experience levels. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:21
+msgid ""
+"Avoid technical jargon or explain terms when necessary (for example, "
+"\"fork the repository\")."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:22
+msgid ""
+"Include a friendly introduction, such as \"Thank you for your interest in"
+" contributing! We're excited to collaborate with you.\""
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:23
+msgid "Highlight that all contributions, no matter how small, are valued."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:25
+msgid "What a CONTRIBUTING.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:27
+msgid "Example contributing files"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:30
+msgid ""
+"[PyGMT contributing "
+"file](https://github.com/GenericMappingTools/pygmt/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:31
+msgid ""
+"[Verde's contributing "
+"file](https://github.com/fatiando/verde/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:34
+msgid ""
+"Your Python package should include a file called **CONTRIBUTING.md** "
+"located in the root of your repository next to [your **README.md** file"
+"](readme-file)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:37
+msgid "The CONTRIBUTING.md file should include information about:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:39
+msgid "The types of contributions that you welcome"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:41
+msgid ""
+"Example: We welcome contributions of all kinds. If you want to address an"
+" existing issue, check out our issues in this repository and comment on "
+"the one that you'd like to help with. Otherwise, you can open a new "
+"issue..."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:43
+msgid ""
+"How you'd like contributions to happen. Clearly outline your contribution"
+" process. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:44
+msgid "Should contributors address open issues"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:45
+msgid "Are new issues welcome?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:46
+msgid ""
+"Should contributors open a pull request (PR) directly or discuss changes "
+"first?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:48
+msgid ""
+"Include instructions for the fork and pull request workflow and link to "
+"resources or guides explaining these steps (if available)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:49
+msgid ""
+"Guidelines that you have in place for users submitting issues, pull "
+"requests, or asking questions."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:51
+msgid ""
+"If you have a [development guide](development-guide), link to it. This "
+"guide should provide clear instructions on how to set up your development"
+" environment locally. It also should overview CI tools that you have that"
+" could simplify the contribution process (for example, pre-[commit.ci "
+"bot](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/code-style-linting-format.html#pre-commit-ci), and so on), [linters,"
+" code formatters](https://www.pyopensci.org/python-package-guide/package-"
+"structure-code/code-style-linting-format.html#code-linting-formatting-"
+"and-styling-tools), and so on."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:53
+msgid ""
+"This guide should also include information for someone interested in "
+"asking questions. Some projects accept questions as GitHub or GitLab "
+"issues. Others use GitHub Discussions, Discourse, or even a Discord "
+"server."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:56
+msgid "The contributing file should also include:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:58
+msgid "A link to your [code of conduct](coc-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:59
+msgid "A link to your project's [LICENSE](license-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:60
+msgid "A link to a [development guide](development-guide) if you have one"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:62
+msgid "Summary"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:64
+msgid ""
+"A well-crafted CONTRIBUTING.md file is welcome mat for your project! By "
+"providing clear instructions, helpful resources, and a welcoming tone, "
+"you make it easier for contributors to get involved and build a stronger,"
+" more collaborative community around your project."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:2
+msgid "What the development guide for your Python package should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:4
+msgid ""
+"Ideally, your package should also have a development guide. This file may"
+" live in your package documentation and should be linked to from your "
+"CONTRIBUTING.md file (discussed above). A development guide should "
+"clearly show technically proficient users how to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:8
+msgid "Set up a development environment locally to work on your package"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:9
+msgid "Run the test suite"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:10
+msgid "Build documentation locally"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:12
+msgid "The development guide should also have guidelines for:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:14
+msgid ""
+"code standards including docstring style, code format and any specific "
+"code approaches that the package follows."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:16
+msgid ""
+"It's also helpful to specify the types of tests you request if a "
+"contributor submits a new feature or a change to an existing feature that"
+" will not be covered by your existing test suite."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:18
+msgid ""
+"If you have time to document it, it's also helpful to document your "
+"maintainer workflow and release processes."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:20
+msgid "Why a development guide is important"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:22
+msgid "It's valuable to have a development guide, in the case that you wish to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:25
+msgid "Onboard new maintainers."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:26
+msgid ""
+"Allow technically inclined contributors to make thoughtful and useful "
+"code based pull requests to your repository."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:28
+msgid ""
+"It also is important to pyOpenSci that the maintenance workflow is "
+"documented in the case that we need to help you onboard new maintainers "
+"in the future."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:33
+msgid ""
+"A well thought out continuous integration setup in your repository can "
+"allow users to skip building the package locally (especially if they are "
+"just updating text)."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:38
+msgid ""
+"A development guide, while strongly recommended, is not a file that "
+"pyOpenSci requires a package to have in order to be eligible for review. "
+"Some maintainers may also opt to include the development information in "
+"their contributing guide."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:44
+msgid ""
+"[The Mozilla Science Lab website has a nice outline of things to consider"
+" when creating a contributing guide](https://mozillascience.github.io"
+"/working-open-workshop/contributing/)"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:1
+msgid "Documentation Files That Should be in your Python Package Repository"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:3
+msgid ""
+"In this section of the Python packaging guide, we review all of the files"
+" that you should have in your Python package repository. Your Python "
+"package should, at a minimum have the following files:"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:7
+msgid ""
+"The files mentions above (README, Code of Conduct, license file, etc) are"
+" used as a measure of package community health on many online platforms. "
+"Below, you can see an example how GitHub evaluates community health. This"
+" community health link is available for all GitHub repositories."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:13
+msgid ""
+"Image showing that the MovingPandas GitHub repository community health "
+"page with green checks next to each file including a description, README,"
+" code of conduct, contributing, license and issue templates. Note that "
+"Security policy has a yellow circle next to it as that is missing from "
+"the repo."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:19
+msgid ""
+"GitHub community health looks for a readme file among other elements when"
+" it evaluates the community level health of your repository. This example"
+" is from the [MovingPandas GitHub "
+"repo](https://github.com/movingpandas/movingpandas/community) *(screen "
+"shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:22
+msgid ""
+"[Snyk](https://snyk.io/advisor/python) is another well-known company that"
+" keeps tabs on package health. Below you can see a similar evaluation of "
+"files in the GitHub repo as a measure of community health."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:26
+msgid ""
+"Screenshot of the Snyk page for movingpandas. It shows that the "
+"repository has a README file, contributing file, code of conduct. It also"
+" shows that it has 30 contributors and no funding. The package health "
+"score is 78/100."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:32
+msgid ""
+"Screenshot showing [SNYK](https://snyk.io/advisor/python/movingpandas) "
+"package health for moving pandas. Notice both platforms look for a README"
+" file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:8
+msgid "License files for Python open source software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:10
+msgid ""
+"Want to learn how to add a license file to your GitHub repository? Check "
+"out this lesson."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:17
+msgid "What is a Open Source License file?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:19
+msgid ""
+"When we talk about LICENSE files, we are referring to a file in your "
+"GitHub or GitLab repository that contains legally binding language that "
+"describes to your users how they can legally use (and not use) your "
+"package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:23
+msgid "Why licenses are important"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:25
+msgid ""
+"A license file is important for all open source projects because it "
+"protects both you as a maintainer and your users. The license file helps "
+"your users and the community understand:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:27
+msgid "How they can use your software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:28
+msgid "Whether the software can be reused or adapted for other purposes"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:29
+msgid "How people can contribute to your project"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:31
+msgid "and more."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:33
+msgid ""
+"[Read more about why license files are critical in protecting both you as"
+" a maintainer and your users of your scientific Python open source "
+"package.](https://opensource.guide/legal/#just-give-me-the-tldr-on-what-i"
+"-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:35
+msgid "Where to store your license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:37
+msgid ""
+"Your `LICENSE` file should be stored at root of your GitHub / GitLab "
+"repository."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:39
+msgid ""
+"Some maintainers customize the language in their license files for "
+"specific reasons. However, if you are just getting started, we suggest "
+"that you select a permissive license and then use the legal language "
+"templates provided both by GitHub and/or the "
+"[choosealicense.com](https://choosealicense.com/) website."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:42
+msgid ""
+"Licenses are legally binding, as such you should avoid trying to create "
+"your own license unless you have the guidance of legal council."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:44
+msgid "Use open permissive licenses when possible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:46
+msgid ""
+"We generally suggest that you use a permissive, license that is [Open "
+"Software Initiative (OSI) approved](https://opensource.org/license). If "
+"you are [submitting your package to pyOpenSci for peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), then we "
+"require an OSI approved license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:50
+msgid "Copyleft licenses"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:51
+msgid ""
+"The other major category of licenses are [\"copyleft\" "
+"licenses](https://en.wikipedia.org/wiki/Copyleft). Copyleft licenses "
+"require people that use your work to redistribute it with the same (or "
+"greater) rights to modify, copy, share, and redistribute it. In other "
+"words, copyleft licenses prohibit someone taking your work, making a "
+"proprietary version of it, and redistributing it without providing the "
+"source code so others can do the same. Copyleft licenses are \"sticky\" "
+"in that they are designed to ensure that more free software is created."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:56
+#, python-brace-format
+msgid ""
+"The difference between copyleft and permissive licenses is an important "
+"cultural divide in free and open source software (e.g., see "
+"{footcite}`hunterReclaimingComputingCommons2016`, "
+"{footcite}`gnuprojectWhatFreeSoftware2019`, "
+"{footcite}`gnuprojectWhatCopyleft2022`). It is important to understand "
+"this difference when choosing your license. Copyleft licenses represents "
+"the \"free\" part of \"free and open source software\". Free and open "
+"source software is intrinsically political, and it is important to be "
+"aware of power dynamics in computing as well as the practical problems of"
+" license compatibility (discussed below)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:61
+msgid "How to choose a license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:63
+msgid ""
+"To select your license, we suggest that you use GitHub's [Choose a "
+"License tool](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:66
+msgid ""
+"If you choose your license when creating a new GitHub repository, you can"
+" also automatically get a text copy of the license file to add to your "
+"repository. However in some cases the license that you want is not "
+"available through that online process."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "License recommendations from the SciPy package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:72
+msgid ""
+"[The SciPy documentation has an excellent overview of "
+"licenses.](https://docs.scipy.org/doc/scipy/dev/core-"
+"dev/index.html#licensing) One of the key elements that these docs "
+"recommend is ensuring that the license that you select is compatible with"
+" licenses used in many parts of the scientific Python ecosystem. Below is"
+" a highlight of this text which outlines license that are compatible with"
+" the modified BSD license that SciPy uses."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:78
+msgid ""
+"Other licenses that are compatible with the modified BSD license that "
+"SciPy uses are 2-clause BSD, MIT and PSF. Incompatible licenses are GPL, "
+"Apache and custom licenses that require attribution/citation or prohibit "
+"use for commercial purposes."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:80
+msgid ""
+"If your primary goal is for your code to be used by other, major packages"
+" in the scientific ecosystem, we also recommend that you consider using "
+"either BSD or MIT as your license. If you are unsure, the MIT license "
+"tends to be a simpler easier-to-understand option."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:85
+msgid ""
+"Important: make sure that you closely follow the guidelines outlines by "
+"the License that you chose"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:87
+msgid ""
+"Every license has different guidelines in terms of what code you can use "
+"in your package and also how others can (or can not) use the code in your"
+" package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:90
+msgid ""
+"If you borrow code from other tools or online sources, make sure that the"
+" license for the code that you are using also complies with the license "
+"that you selected for your package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:94
+msgid ""
+"A useful way to think about license compatibility is the distinction "
+"between **\"inbound\"** and **\"outbound\"** compatibility. \"Inbound\" "
+"licenses are those that cover the software you plan to include in your "
+"package. Your package is protected by an \"outbound\" license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:98
+msgid ""
+"**Permissive licenses** like BSD and MIT have few **outbound** "
+"restrictions - they can be used in any way by downstream consumers, "
+"including making them proprietary. This is why they are favored by many "
+"businesses and large packages that want to be adopted by businesses. "
+"Permissive licenses have more **inbound** restrictions - they can't use "
+"software that requires more freedoms to be preserved than they do, like "
+"copyleft licenses. A package licensed under MIT needs to take special "
+"care when including or modifying a package licensed under the GPL-3."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:103
+msgid ""
+"**Copyleft licenses** like GPL-3 have more **outbound** restrictions - "
+"they require more of packages that include, use, modify, and reproduce "
+"them. This is the purpose of copyleft licenses, to ensure that derivative"
+" works remain free and open source. They have fewer **inbound** "
+"restrictions - a GPL-3 licensed package can include any other "
+"permissively licensed and most copyleft licensed packages."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Compatible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Dependency (\"Inbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Your Package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Downstream Package (\"Outbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Permissive"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Copyleft"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:118
+msgid "An example of how a license determine how code can be reused"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:121
+msgid ""
+"Let's use StackOverflow as an example that highlights how a license "
+"determines how code can or can not be used."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:123
+msgid ""
+"[Stack Overflow uses a Creative Commons Share Alike "
+"license.](https://stackoverflow.com/help/licensing). The sharealike "
+"license requires you to use the same sharealike license when you reuse "
+"any code from Stack Overflow."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:125
+#, python-brace-format
+msgid ""
+"This means that from a legal perspective, if you copy code from the Stack"
+" Overflow website and use it in your package that is licensed "
+"differently, say with a MIT license, you are violating Stack Overflow's "
+"license requirements! This would not be true with a GPL licensed package."
+" `GPL-3` packages can include code licensed by `CC-BY-SA` "
+"{footcite}`creativecommonsShareAlikeCompatibilityGPLv32015`."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:128
+msgid "🚨 Proceed with caution! 🚨"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:131
+msgid "What about software citation?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:133
+msgid ""
+"While many permissive licenses do not require citation, we strongly "
+"encourage that you cite all software that you use in papers, blogs, and "
+"other publications. You tell your users how to cite your package by using"
+" a [citation.cff file](https://docs.github.com/en/repositories/managing-"
+"your-repositorys-settings-and-features/customizing-your-repository/about-"
+"citation-files)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:136
+msgid ""
+"Additional resources on software citation The Turing Way has excellent "
+"guides on this topic:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:139
+msgid ""
+"[CITATION.cff files](https://book.the-turing-"
+"way.org/communication/citable/citable-cff) — detailed guide on creating "
+"and maintaining citation files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:140
+msgid ""
+"[Software citation pathways](https://book.the-turing-way.org/pathways"
+"/pathways-software-citation) — overview of how software citation works in"
+" practice"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:142
+msgid "Citation.cff files: Making your software citable"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:144
+msgid ""
+"A `CITATION.cff` file is a machine-readable file that provides citation "
+"information for your software package. The \"cff\" stands for \"Citation "
+"File Format,\" which is a standardized format for software citation "
+"metadata."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:146
+msgid "What citation.cff files add to your repository"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:148
+msgid ""
+"When you add a `CITATION.cff` file to your repository, GitHub "
+"automatically detects it and displays a \"Cite this repository\" button. "
+"This makes it easy for users to properly cite your software. The file "
+"contains standardized citation information that tools and services can "
+"automatically read and use. GitHub will generate both APA and BibTeX "
+"citation formats for users."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:150
+msgid "How dates are tracked in citation.cff files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:152
+msgid ""
+"The citation file tracks important dates for your software. The `date-"
+"released` field shows when the current version was released. The `date-"
+"published` field shows when the software was first made available. You "
+"also include a `version` field with the specific version number."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:154
+msgid ""
+"You should update these dates with each new release so people cite the "
+"correct version of your software."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:156
+msgid "Integration with Zenodo"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:158
+msgid ""
+"Citation.cff files work well with Zenodo, which is a popular place to "
+"store research software and get DOIs. When you create a Zenodo release, "
+"it can automatically pull information from your citation file. This keeps"
+" your citation information the same between GitHub and Zenodo. You can "
+"also include your Zenodo DOI in the citation file. Each time you make a "
+"new GitHub release, it can create a new Zenodo version with updated "
+"citation information."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:161
+msgid "Here's a basic example of what a `CITATION.cff` file might look like:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:177
+msgid "References"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:3
+msgid "README File Guidelines and Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:5
+msgid ""
+"Your **README.md** file should be located in the root of your GitHub "
+"repository. The **README.md** file is important as it is often the first "
+"thing that someone sees before they install your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:9
+msgid "The README.md file is the landing page of:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:11
+msgid ""
+"Your package as it appears on a repository site such as PyPI or "
+"Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:12
+msgid "Your package's GitHub repository"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:14
+msgid ""
+"Your README.md file is also used as a measure of package and community "
+"health on sites such as:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:17
+msgid ""
+"[GitHub community health for MovingPandas (available for all "
+"repositories)](https://github.com/movingpandas/movingpandas/community) "
+"and [Snyk - MovingPandas "
+"example](https://snyk.io/advisor/python/movingpandas)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:19
+msgid ""
+"README landing page screenshot for the Pandera package. It has the "
+"Pandera logo at the top - which has two arrows in a chevron pattern "
+"pointing downward within a circle. Subtitle is statistical data testing "
+"toolkit. A data validation library for scientists, engineering, and "
+"analytics seeking correctness. Below that are a series of badges "
+"including CI tests passing, docs passing, version of Pandera on pypi "
+"(0.13.4), MIT license and that it has been pyOpenSci peer reviewed. There"
+" are numerous badges below that. Finally below the badges the text says, "
+"Pandera provides a flexible and expressive API for performing data "
+"validation on dataframe-like objects to make data processing pipelines "
+"more readable and robust."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:25
+msgid ""
+"Your GitHub repository landing page highlights the README.md file. Here "
+"you can see the README.md file for the pyOpenSci package "
+"[Pandera](https://github.com/unionai-oss/pandera). *(screen shot taken "
+"Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:28
+msgid ""
+"Thus, it is important that you spend some time up front creating a high "
+"quality **README.md** file for your Python package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:32
+msgid ""
+"An editor or the editor in chief will ask you to revise your README file "
+"before a review begins if it does not meet the criteria specified below."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:35
+msgid "Please go through this list before submitting your package to pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:52
+msgid "What your README.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:54
+msgid ""
+"Your **README.md** file should contain the following things (listed from "
+"top to bottom):"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:56
+msgid "✔️ Your package's name"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:58
+msgid ""
+"Ideally your GitHub repository's name is also the name of your package. "
+"The more self explanatory that name is, the better."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:61
+msgid ""
+"✔️ Badges for current package version, continuous integration and test "
+"coverage"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:63
+msgid ""
+"Badges are a useful way to draw attention to the quality of your project."
+" Badges assure users that your package is well-designed, tested, and "
+"maintained. They are also a useful maintenance tool to evaluate if things"
+" are building properly. A great example of this is adding a [Read the "
+"Docs status badge](https://docs.readthedocs.io/en/stable/badges.html) to "
+"your README.md file to quickly see when the build on that site fails."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:69
+msgid ""
+"It is common to provide a collection of badges towards the top of your "
+"README file for others to quickly browse."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:72
+msgid "Some badges that you might consider adding to your README file include:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:74
+msgid "Current version of the package on PyPI / Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid ""
+"Example: [](https://pypi.org/project/pandera/)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid "PyPI version shields.io"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid ""
+"Status of tests (pass or fail) - Example: [](https://github.com"
+"/unionai-"
+"oss/pandera/actions?query=workflow%3A%22CI+Tests%22+branch%3Amain)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid "CI Build"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid ""
+"Documentation build - Example: "
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid "Docs Building"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid ""
+"DOI (for citation) Example: "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid "DOI"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid ""
+"Once you package is accepted to pyOpenSci, we will provide you with a "
+"badge to add to your repository that shows that it has been reviewed. "
+"[](https://github.com/pyOpenSci/software-"
+"submission/issues/12)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid "pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:92
+msgid ""
+"Beware of the overuse of badges! There is such a thing as too much of a "
+"good thing (which can overload a potential user!)."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:95
+msgid "✔️ A short, easy-to-understand description of what your package does"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:97
+msgid ""
+"At the top of your README file you should have a short, easy-to-"
+"understand, 1-3 sentence description of what your package does. This "
+"section should clearly state your goals for the package. The language in "
+"this description should use less technical terms so that a variety of "
+"users with varying scientific (and development) backgrounds can "
+"understand it."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:103
+msgid ""
+"In this description, it's useful to let users know how your package fits "
+"within the broader scientific Python package ecosystem. If there are "
+"other similar packages or complementary package mentions them here in 1-2"
+" sentences."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:108
+msgid ""
+"Consider writing for a high school level (or equivalent) level. This "
+"level of writing is often considered an appropriate level for scientific "
+"content that serves a variety of users with varying backgrounds."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:112
+msgid ""
+"The goal of this description is to maximize accessibility of your "
+"**README** file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:116
+msgid "✔️ Installation instructions"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:118
+msgid ""
+"Include instructions for installing your package. If you have published "
+"the package on both PyPI and Anaconda.org, be sure to include "
+"instructions for both."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:121
+msgid "✔️ Document any additional setup required"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:123
+msgid ""
+"Add any additional setup required such as authentication tokens, to get "
+"started using your package. If setup is complex, consider linking to an "
+"installation page in your online documentation here rather than over "
+"complicating your README file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:128
+msgid "✔️ Brief demonstration of how to use the package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:130
+msgid ""
+"This description ideally includes a brief, quick start code example that "
+"shows a user how to get started using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:133
+msgid "✔️ Descriptive links to package documentation, short tutorials"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:135
+msgid "Include descriptive links to:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:137
+msgid "The package's documentation page."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:138
+msgid "Short tutorials that demonstrate application of your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:140
+msgid "Too Much Of A Good Thing"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:143
+msgid ""
+"Try to avoid including several tutorials in the README.md file itself. "
+"This too will overwhelm the user with information."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:145
+msgid ""
+"A short quick-start code example that shows someone how to use your "
+"package is plenty of content for the README file. All other tutorials and"
+" documentation should be presented as descriptive links."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:151
+msgid "✔️ A Community Section with Links to Contributing Guide, Code of Conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:153
+msgid "Use your README.md file to direct users to more information on:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:155
+msgid "Contributing to your package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:156
+msgid "Development setup for more advanced technical contributors"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:157
+msgid "Your code of conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:158
+msgid "Licensing information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:160
+msgid ""
+"All of the above files are important for building community around your "
+"project."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:163
+msgid "✔️ Citation information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:165
+msgid ""
+"Finally be sure to include instructions on how to cite your package. "
+"Citation should include the DOI that you want used when citing your "
+"package, and any language that you'd like to see associated with the "
+"citation."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:169
+msgid "README Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:173
+msgid ""
+"Below are some resources on creating great README.md files that you might"
+" find helpful."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:176
+msgid ""
+"[How to Write a Great README - Bane "
+"Sullivan](https://github.com/banesullivan/README)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:177
+msgid ""
+"[Art of README - Kira (@hackergrrl)](https://github.com/hackergrrl/art-"
+"of-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+#, python-format
+msgid ""
+"[Standard Readme - Richard Littauer](https://github.com/RichardLitt"
+"/standard-readme) [](https://github.com/RichardLitt/standard-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+msgid "standard-readme compliant"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:179
+msgid ""
+"[Standard Readme pre-commit hooks](https://github.com/tkoyama010"
+"/standard-readme-pre-commit)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:1
+msgid "Create tutorials in your Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:6
+msgid ""
+"Your package should have tutorials that make it easy for a user to get "
+"started using your package. Ideally, those tutorials also can be run from"
+" start to finish providing a second set of checks (on top of your test "
+"suite) to your package's code base."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:11
+msgid ""
+"On this page, we review two Sphinx extensions (`sphinx-gallery` and "
+"`nbsphinx`) that allow you to create reproducible tutorials that are run"
+" when your Sphinx documentation builds."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:15
+msgid "Create Python package tutorials that run when you build your docs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:17
+msgid ""
+"Adding well constructed tutorials to your package will make it easier for"
+" someone new to begin using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:20
+msgid ""
+"There are two Sphinx tools that make it easy to add tutorials to your "
+"package:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:22
+msgid "[Sphinx Gallery](https://sphinx-gallery.github.io/stable/index.html) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:23
+msgid "[NbSphinx](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:25
+msgid "Both of these tools act as Sphinx extensions and:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:27
+msgid ""
+"Support creating a gallery type page in your Sphinx documentation where "
+"users can explore tutorials via thumbnails."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:28
+msgid ""
+"Run the code in your tutorials adding another level of \"testing\" for "
+"your package as used."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:29
+msgid "Render your tutorials with Python code and plot outputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:31
+msgid "[sphinx gallery:](https://sphinx-gallery.github.io/stable/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:33
+msgid ""
+"If you prefer to write your tutorials using Python **.py** scripts, you "
+"may enjoy using Sphinx gallery. Sphinx gallery uses **.py** files with "
+"text and code sections that mimic the Jupyter Notebook format. When you "
+"build your documentation, the gallery extension:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:38
+msgid ""
+"Runs the code in each tutorial. Running your tutorial like this acts as a"
+" check to ensure your package's functions, classes, methods, and "
+"attributes (ie the API) are working as they should."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:39
+msgid ""
+"Creates a downloadable Jupyter Notebook **.ipynb** file and a **.py** "
+"script for your tutorial that a user can quickly download and run."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:40
+msgid ""
+"Creates a rendered **.html** page with the code elements and code "
+"outputs in a user-friendly tutorial gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:41
+msgid ""
+"Creates a gallery landing page with visual thumbnails for each tutorial "
+"that you create."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:44
+msgid ""
+"Image showing the gallery output provided by sphinx-gallery where each "
+"tutorial is in a grid and the tutorial thumbnails are created from a "
+"graphic in the tutorial."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:50
+msgid ""
+"`sphinx-gallery` makes it easy to create a user-friendly tutorial "
+"gallery. Each tutorial has a download link where the user can download a "
+"**.py** file or a Jupyter Notebook. And it renders the tutorials in a "
+"user-friendly grid."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:54
+msgid "Below you can see what a tutorial looks like created with sphinx-gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:56
+msgid ""
+"Image showing ta single tutorial from Sphinx gallery. The tutorial shows "
+"a simple matplotlib created plot and associated code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:62
+msgid ""
+"`sphinx-gallery` tutorials by default include download links for both the"
+" python script (**.py** file) and a Jupyter notebook (**.ipynb** file) at"
+" the bottom."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:66
+msgid "Sphinx Gallery benefits"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:67
+msgid "easy-to-download notebook and .py outputs for each tutorials."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:68
+msgid ".py files are easy to work with in the GitHub pull request environment."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:69
+msgid "Nice gridded gallery output."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:70
+msgid ""
+"Build execution time data per tutorial. [Example](https://sphinx-"
+"gallery.github.io/stable/auto_examples/sg_execution_times.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:72
+msgid "Sphinx gallery challenges"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:74
+msgid "The downsides of using Sphinx gallery include:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:76
+msgid ""
+"the **.py** files can be finicky to configure, particularly if you have "
+"matplotlib plot outputs."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:78
+msgid ""
+"For example: To allow for plots to render, you need to name each file "
+"with `plot_` at the beginning."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:81
+msgid ""
+"Many users these days are used to working in Jupyter Notebooks. .py may "
+"be slightly less user friendly to work with"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:83
+msgid ""
+"These nuances can make it challenging for potential contributors to add "
+"tutorials to your package. This can also present maintenance challenge."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:86
+msgid "Add about the gallery setup:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:93
+msgid "File directory structure:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:114
+msgid ""
+"[nbsphinx - tutorials using Jupyter "
+"Notebooks](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:116
+msgid ""
+"If you prefer to use Jupyter Notebooks to create tutorials you can use "
+"nbsphinx. nbsphinx operates similarly to Sphinx gallery in that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:119
+msgid "It runs your notebooks and produces outputs in the rendered tutorials"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:121
+msgid ""
+"Pro/con By default it does not support downloading of **.py** and "
+"**.ipynb** files. However you can add a [link to the notebook at the top "
+"of the page with some additional conf.py settings (see: epilog "
+"settings)](https://nbsphinx.readthedocs.io/en/0.8.10/prolog-and-"
+"epilog.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:125
+msgid ""
+"Image showing the gallery output provided by nbsphinx using the sphinx-"
+"gallery front end interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:131
+msgid ""
+"`nbsphinx` can be combined with Sphinx gallery to create a gallery of "
+"tutorials. However, rather than rendering the gallery as a grid, it lists"
+" all of the gallery elements in a single column."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:2
+msgid "Document the code in your package's API using docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:4
+msgid "What is an API?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:6
+msgid ""
+"API stands for **A**pplied **P**rogramming **I**nterface. When discussed "
+"in the context of a (Python) package, the API refers to the functions, "
+"classes, methods, and attributes that a package maintainer creates for "
+"users."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:10
+msgid ""
+"A simple example of a package API element: For instance, a package might "
+"have a function called `add_numbers()` that adds up a bunch of numbers. "
+"To add up numbers, you as the user simply call `add_numbers(1,2,3)` and "
+"the package function calculates the value and returns `6`. By calling the"
+" `add_numbers` function, you are using the package's API."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:16
+msgid ""
+"Package APIs consist of functions, classes, methods and attributes that "
+"create a user interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:18
+msgid "What is a docstring and how does it relate to documentation?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:20
+msgid ""
+"In Python, a docstring refers to text in a function, method or class that"
+" describes what the function does and its inputs and outputs. Python "
+"programmers usually refer to the inputs to functions as "
+"[\"parameters\"](https://docs.python.org/3/glossary.html#term-parameter) "
+"or [\"arguments\"](https://docs.python.org/3/faq/programming.html#faq-"
+"argument-vs-parameter), and the outputs are often called \"return "
+"values\""
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:23
+msgid "The docstring is thus important for:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:25
+msgid ""
+"When you call `help()` in Python, for example, `help(add_numbers)` will "
+"show the text of the function's docstring. The docstring thus helps a "
+"user better understand how to apply the function more effectively to "
+"their workflow."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:26
+msgid ""
+"When you build your package's documentation, the docstrings can also be "
+"used to automatically create full API documentation that provides a clean"
+" view of all its functions, classes, methods, and attributes."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:29
+msgid ""
+"Example API Documentation for all functions, classes, methods, and "
+"attributes in a package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:30
+msgid ""
+"[View example high-level API documentation for the Verde package. This "
+"page lists every function and class in the package along with a brief "
+"explanation of what it "
+"does](https://www.fatiando.org/verde/latest/api/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:31
+msgid ""
+"[You can further dig down to see what a specific function does within the"
+" package by clicking on an API "
+"element](https://www.fatiando.org/verde/latest/api/generated/verde.grid_coordinates.html#verde.grid_coordinates)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:34
+msgid "Python package API documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:36
+msgid ""
+"If you have a descriptive docstring for every user-facing class, method, "
+"attribute and/or function in your package (_within reason_), then your "
+"package's API is considered well-documented."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:39
+msgid ""
+"In Python, this means that you need to add a docstring for every user-"
+"facing class, method, attribute and/or function in your package (_within "
+"reason_) that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:43
+msgid "Explains what the function, method, attribute, or class does"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:44
+msgid "Defines the `type` inputs and outputs (ie. `string`, `int`, `np.array`)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:45
+msgid "Explains the expected output `return` of the object, method or function."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:48
+msgid "Three Python docstring formats and why we like NumPy style"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:50
+msgid ""
+"There are several Python docstring formats that you can choose to use "
+"when documenting your package including:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:53
+msgid ""
+"[NumPy-style](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:54
+msgid ""
+"[google style](https://sphinxcontrib-"
+"napoleon.readthedocs.io/en/latest/example_google.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:55
+msgid ""
+"[reST style](https://sphinx-rtd-"
+"tutorial.readthedocs.io/en/latest/docstrings.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:59
+msgid ""
+"We suggest using [NumPy-style "
+"docstrings](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard) for your Python documentation because:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:62
+msgid ""
+"NumPy style docstrings are core to the scientific Python ecosystem and "
+"defined in the [NumPy style "
+"guide](https://numpydoc.readthedocs.io/en/latest/format.html). Thus you "
+"will find them widely used there."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:63
+msgid ""
+"The Numpy style docstring is simplified and thus easier to read both in "
+"the code and when calling `help()` in Python. In contrast, some feel that"
+" reST style docstrings are harder to quickly scan, and can take up more "
+"lines of code in modules."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:66
+msgid ""
+"If you are using NumPy style docstrings, be sure to include the [sphinx "
+"napoleon extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/napoleon.html) in your documentation "
+"`conf.py` file. This extension allows Sphinx to properly read and format "
+"NumPy format docstrings."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:71
+msgid "Docstring examples Better and Best"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:73
+msgid ""
+"Below is a good example of a well-documented function. Notice that this "
+"function's docstring describes the function's inputs and the function's "
+"output (or return value). The initial description of the function is "
+"short (one line). Following that single-line description, there is a "
+"slightly longer description of what the function does (2 to 3 sentences)."
+" The return of the function is also specified."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:107
+msgid "Best: a docstring with example use of the function"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:109
+msgid ""
+"This example contains an example of using the function that is also "
+"tested in sphinx using "
+"[doctest](https://docs.python.org/3/library/doctest.html)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:160
+msgid ""
+"Using the above NumPy format docstring in sphinx, the autodoc extension "
+"will create the about documentation section for the `extent_to_json` "
+"function. The output of the `es.extent_to_json(rmnp)` command can even be"
+" tested using doctest adding another quality check to your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:166
+msgid ""
+"Using doctest to run docstring examples in your package's methods and "
+"functions"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:171
+msgid ""
+"Above, we provided some examples of good, better, best docstring formats."
+" If you are using Sphinx to create your docs, you can add the "
+"[doctest](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html) extension to your Sphinx"
+" build. Doctest provides an additional check for docstrings with example "
+"code in them. Doctest runs the example code in your docstring `Examples` "
+"checking that the expected output is correct. Similar to running "
+"tutorials in your documentation, `doctest` can be a useful step that "
+"assures that your package's code (API) runs as you expect it to."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:178
+msgid ""
+"It's important to keep in mind that examples in your docstrings help "
+"users using your package. Running `doctest` on those examples provides a "
+"check of your package's API. The doctest ensures that the functions and "
+"methods in your package run as you expect them to. Neither of these items"
+" replace a separate, stand-alone test suite that is designed to test your"
+" package's core functionality across operating systems and Python "
+"versions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:186
+msgid ""
+"Below is an example of a docstring with an example. doctest will run the "
+"example below and test that if you provide `add_me` with the values 1 and"
+" 3 it will return 4."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:219
+msgid "Adding type hints to your docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:221
+msgid ""
+"In the example above, you saw the use of numpy-style docstrings to "
+"describe data types that are passed into functions as parameters or into "
+"classes as attributes. In a numpy-style docstring you add those types in "
+"the Parameters section of the docstring. Below you can see that the "
+"parameter `num1` and `num2` should both be a Python `int` (integer) "
+"value."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:236
+msgid ""
+"Describing the expected data type that a function or method requires "
+"helps users better understand how to call a function or method."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:239
+msgid ""
+"Type-hints add another layer of type documentation to your code. Type-"
+"hints make it easier for new developers, your future self or contributors"
+" to get to know your code base quickly."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:243
+msgid ""
+"Type hints are added to the definition of your function. In the example "
+"below, the parameters aNum and aNum2 are defined as being type = int "
+"(integer)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:250
+msgid ""
+"You can further describe the expected function output using `->`. Below "
+"the output of the function is also an int."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:258
+msgid "Why use type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:260
+msgid "Type hints:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:262
+msgid "Make development and debugging faster,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:263
+msgid ""
+"Make it easier for a user to see the data format inputs and outputs of "
+"methods and functions,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:264
+msgid ""
+"Support using static type checking tools such as [`mypy`](https://mypy-"
+"lang.org/) which will check your code to ensure types are correct."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:266
+msgid "You should consider adding type hinting to your code if:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:268
+msgid "Your package performs data processing,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:269
+msgid "You use functions that require complex inputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:270
+msgid ""
+"You want to lower the entrance barrier for new contributors to help you "
+"with your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:272
+msgid "Beware of too much type hinting"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:275
+msgid "As you add type hints to your code consider that in some cases:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:277
+msgid ""
+"If you have a complex code base, type hints may make code more difficult "
+"to read. This is especially true when a parameter’s input takes multiple "
+"data types and you list each one."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:278
+msgid ""
+"Writing type hints for simple scripts and functions that perform obvious "
+"operations don't make sense."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:281
+msgid "Gradually adding type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:283
+msgid ""
+"Adding type hints can take a lot of time. However, you can add type hints"
+" incrementally as you work on your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:287
+msgid ""
+"Adding type hints is also a great task for new contributors. It will help"
+" them get to know your package's code and structure better before digging"
+" into more complex contributions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:1
+msgid "Create User Facing Documentation for your Python Package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:14
+msgid "Core components of user-facing Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:15
+msgid "Below we break documentation into two broad types."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:17
+msgid ""
+"**User-facing documentation** refers to documentation that describes the "
+"way the tools within a package are broadly used in workflows. **API "
+"documentation** refers to documentation of functions, classes, methods, "
+"and attributes in your code and is written at a more granular level. This"
+" documentation is what a user sees when they type `help(function-name)`."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:23
+msgid ""
+"Your user-facing documentation for your Python package should include "
+"several core components."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:26
+msgid ""
+"**Documentation Website:** This refers to easy-to-read documentation that"
+" helps someone use your package. This documentation should help users "
+"both install and use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:27
+msgid ""
+"**Short Tutorials:** Your user-facing documentation should also include "
+"[**short tutorials** that showcase core features of your package](create-"
+"package-tutorials)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:28
+msgid ""
+"**Package Code / API documentation:** You package's functions, classes, "
+"methods, and attributes (the API) should also be documented. API "
+"documentation can be generated from "
+"[docstrings](https://pandas.pydata.org/docs/development/contributing_docstring.html)"
+" found in your code. Ideally, you have docstrings for all user-facing "
+"functions, classes, and methods in your Python package. [We discuss code "
+"documentation and docstrings in greater detail here.](document-your-code-"
+"api-docstrings)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:32
+msgid "Write usable documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:34
+msgid ""
+"User-facing documentation should be published on a easy-to-navigate "
+"website. The documentation should be written keeping in mind that users "
+"may not be developers or expert-level programmers. Rather, the language "
+"that you use in your documentation should not be highly technical."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:39
+msgid ""
+"To make the language of your documentation more accessible to a broader "
+"audience:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:42
+msgid "Whenever possible, define technical terms and jargon."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:43
+msgid "Consider writing instructions for a high-school level reader."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:44
+msgid ""
+"Include step-by-step code examples, tutorials or vignettes that support "
+"getting started using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:46
+msgid "Four elements of a good open source documentation landing page"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:48
+msgid ""
+"To make it easy for users to find what they need quickly, consider adding"
+" quick links on your package's landing page to the following elements:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:52
+msgid ""
+"**Getting started:** This section should provide the user with a quick "
+"start for installing your package. A small example of how to use the "
+"package is good to have here as well. Or you can link to useful tutorials"
+" in the get started section."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:53
+msgid ""
+"**About:** Describe your project, stating its goals and its "
+"functionality."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:54
+msgid ""
+"**Community:** Instructions for how to help and/or get involved. This "
+"might include links to your issues (if that is where you let users ask "
+"questions) or the discussion part of your GitHub repo. This section might"
+" include a development guide for those who might contribute to your "
+"package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:55
+msgid ""
+"**API Documentation:** This is the detailed project documentation. Here "
+"you store documentation for your package's API including all user-facing "
+"functions, classes, methods, and attributes as well as any additional "
+"high level discussion that will help people use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:58
+msgid ""
+"Image showing the landing page for GeoPandas documentation which has 4 "
+"sections including Getting started, Documentation, About GeoPandas, "
+"Community."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:64
+msgid ""
+"The documentation landing page of GeoPandas, a spatial Python library, "
+"has the 4 element specified above. Notice that the landing page is simple"
+" and directs users to each element using a Sphinx card."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:67
+msgid ""
+"NOTE: in many cases you can include your **README** file and your "
+"**CONTRIBUTING** files in your documentation given those files may have "
+"some of the components listed above."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:71
+msgid ""
+"You can include files in Sphinx using the include directive. Below is an "
+"example of doing this using `myst` syntax."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:1
+msgid "Writing user-facing documentation for your Python package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:3
+msgid ""
+"This section walks you through best practices for with writing "
+"documentation for your Python package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:6
+msgid ""
+"We talk about the elements that you should consider adding to your "
+"documentation, the different types of users who might read your "
+"documentation and how to create tutorials for your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:10
+msgid ""
+"Here we also cover sphinx extensions that you can user to make "
+"documentation easier such as:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:13
+msgid ""
+"autodoc to automagically populate documentation for your code's "
+"functions, classes, methods and attributes (API documentation) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:15
+msgid "sphinx gallery for tutorials."
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/index.po b/locales/el/LC_MESSAGES/index.po
new file mode 100644
index 000000000..901ed2879
--- /dev/null
+++ b/locales/el/LC_MESSAGES/index.po
@@ -0,0 +1,514 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../index.md:257
+msgid "Tutorials"
+msgstr "Εκπαιδευτικό Υλικό"
+
+#: ../../index.md:264
+msgid "Packaging"
+msgstr "Πακετάρισμα"
+
+#: ../../index.md:135 ../../index.md:272
+msgid "Documentation"
+msgstr "Τεκμηρίωση"
+
+#: ../../index.md:175 ../../index.md:280
+msgid "Tests"
+msgstr "Δοκιμές"
+
+#: ../../index.md:280
+msgid "Testing"
+msgstr "Έλεγχος"
+
+#: ../../index.md:288
+msgid "Maintain"
+msgstr "Συντήρηση"
+
+#: ../../index.md:288
+msgid "Continuous Integration"
+msgstr "Συνεχής ολοκλήρωση"
+
+#: ../../index.md:296
+msgid "Glossary"
+msgstr "Γλωσσάριο"
+
+#: ../../index.md:296
+msgid "Reference"
+msgstr "Αναφορές"
+
+#: ../../index.md:1
+msgid "pyOpenSci Python Package Guide"
+msgstr "Οδηγός Πακέτου pyOpenSci Python"
+
+#: ../../index.md:3
+msgid ""
+"We support the Python tools that scientists need to create open science "
+"workflows."
+msgstr ""
+"Υποστηρίζουμε τα εργαλεία Python τα οποία χρειάζονται οι επιστήμονες για να "
+"δημιουργήσουν ροές εργασίας ανοιχτής επιστήμης."
+
+#: ../../index.md:20
+msgid ""
+" "
+"[](https://github.com/pyopensci/python-package-guide) "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+
+#: ../../index.md:20
+msgid "GitHub release (latest by date)"
+msgstr "Έκδοση GitHub (πιο πρόσφατη ανά ημερομηνία)"
+
+#: ../../index.md:20
+msgid "DOI"
+msgstr ""
+
+#: ../../index.md:27
+msgid "About this guide"
+msgstr "Σχετικά με αυτόν τον οδηγό"
+
+#: ../../index.md:29
+msgid ""
+"Image with the pyOpenSci flower logo in the upper right hand corner. The "
+"image shows the packaging lifecycle. The graphic shows a high level "
+"overview of the elements of a Python package. The inside circle has 5 "
+"items - user documentation, code/api, test suite, contributor "
+"documentation, project metadata / license / readme. In the middle of the "
+"circle is says maintainers and has a small icon with people. On the "
+"outside circle there is an arrow and it says infrastructure."
+msgstr ""
+"Εικόνα με το λογότυπο-λουλούδι του pyOpenSci στην επάνω δεξιά γωνία. Η "
+"εικόνα παρουσιάζει τον κύκλο ζωής ενός πακέτου (packaging). "
+"Το διάγραμμα παρέχει μια συνοπτική επισκόπηση των "
+"βασικών στοιχείων ενός πακέτου Python. Ο εσωτερικός κύκλος περιλαμβάνει "
+"πέντε στοιχεία: τεκμηρίωση χρήστη, κώδικα/API, σουίτα δοκιμών, τεκμηρίωση "
+"για συνεισφέροντες και μεταδεδομένα έργου / άδεια χρήσης / αρχείο README. "
+"Στο κέντρο του κύκλου αναγράφεται «Συντηρητές» και υπάρχει ένα μικρό "
+"εικονίδιο με ανθρώπους. Στον εξωτερικό κύκλο υπάρχει ένα βέλος και η "
+"ένδειξη «Υποδομή»."
+
+#: ../../index.md:35
+msgid "This guide will help you:"
+msgstr "Αυτός ο οδηγός θα σας βοηθήσει να:"
+
+#: ../../index.md:37
+msgid "Learn how to create a Python package from start to finish"
+msgstr "Μάθετε πως να δημιουργείτε ένα πακέτο Python από την αρχή μέχρι το τέλος"
+
+#: ../../index.md:38
+msgid "Understand the broader Python packaging tool ecosystem"
+msgstr "Κατανοήστε το ευρύτερο οικοσύστημα εργαλείων πακετοποίησης της Python"
+
+#: ../../index.md:39
+msgid "Navigate and make decisions around tool options"
+msgstr ""Περιηγηθείτε και λάβετε αποφάσεις σχετικά με τις διαθέσιμες επιλογές εργαλείων""
+
+#: ../../index.md:40
+msgid "Understand all of the pieces of creating and maintaining a Python package"
+msgstr "Κατανοήσετε όλα τα στοιχεία που συνθέτουν τη δημιουργία και τη συντήρηση ενός πακέτου Python"
+
+#: ../../index.md:42
+msgid ""
+"You will also find best practice recommendations and curated lists of "
+"community resources surrounding packaging and package documentation."
+msgstr ""
+"Θα βρείτε επίσης συστάσεις βέλτιστων πρακτικών και επιμελημένες λίστες "
+"πόρων της κοινότητας σχετικά με τη δημιουργία πακέτων και την τεκμηρίωσή "
+"τους."
+
+#: ../../index.md:45
+msgid "Todo"
+msgstr ""
+
+#: ../../index.md:46
+msgid "TODO: change the navigation of docs to have a"
+msgstr ""
+
+#: ../../index.md:48
+msgid "user documentation contributor / maintainer documentation"
+msgstr ""
+
+#: ../../index.md:50
+msgid "development guide"
+msgstr ""
+
+#: ../../index.md:51
+msgid "contributing guide"
+msgstr ""
+
+#: ../../index.md:53
+msgid "Community docs"
+msgstr ""
+
+#: ../../index.md:54
+msgid "readme, coc, license"
+msgstr ""
+
+#: ../../index.md:56
+msgid "Publish your docs"
+msgstr ""
+
+#: ../../index.md:59
+msgid "Tutorial Series: Create a Python Package"
+msgstr ""
+
+#: ../../index.md:61
+msgid ""
+"The first round of our community-developed, how to create a Python "
+"package tutorial series for scientists is complete! Join our community "
+"review process or watch development of future tutorials in our [GitHub "
+"repo here](https://github.com/pyOpenSci/python-package-guide)."
+msgstr ""
+
+#: ../../index.md:68
+msgid "✿ Create a Package Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:72
+msgid "[What is a Python package?](/tutorials/intro)"
+msgstr ""
+
+#: ../../index.md:73
+msgid "[Create a Python package](/tutorials/create-python-package)"
+msgstr ""
+
+#: ../../index.md:74
+msgid "[Publish your package to (test) PyPI](/tutorials/publish-pypi)"
+msgstr ""
+
+#: ../../index.md:75
+msgid "[Publish your package to conda-forge](/tutorials/publish-conda-forge)"
+msgstr ""
+
+#: ../../index.md:78
+msgid "✿ Package Metadata Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:82
+msgid "[How to add a README file](/tutorials/add-readme)"
+msgstr ""
+
+#: ../../index.md:83
+msgid ""
+"[How to add metadata to a pyproject.toml file for publication to "
+"PyPI.](/tutorials/pyproject-toml.md)"
+msgstr ""
+
+#: ../../index.md:86
+msgid "✿ Packaging Tool Tutorials ✿"
+msgstr ""
+
+#: ../../index.md:90
+msgid "[Introduction to Hatch](/tutorials/get-to-know-hatch)"
+msgstr ""
+
+#: ../../index.md:91
+msgid "[Run Python scripts using Hatch](/tutorials/run-python-scripts-hatch)"
+msgstr ""
+
+#: ../../index.md:94
+msgid "✿ Reference Guides ✿"
+msgstr ""
+
+#: ../../index.md:98
+msgid "[Command Line Reference Guide](/tutorials/command-line-reference)"
+msgstr ""
+
+#: ../../index.md:102
+msgid "Python Packaging for Scientists"
+msgstr ""
+
+#: ../../index.md:104
+msgid ""
+"Learn about Python packaging best practices. You will also get to know "
+"the the vibrant ecosystem of packaging tools that are available to help "
+"you with your Python packaging needs."
+msgstr ""
+
+#: ../../index.md:111
+msgid "✨ Create your package ✨"
+msgstr ""
+
+#: ../../index.md:115
+msgid "[Package file structure](/package-structure-code/python-package-structure)"
+msgstr ""
+
+#: ../../index.md:116
+msgid ""
+"[Package metadata / pyproject.toml](package-structure-code/pyproject-"
+"toml-python-package-metadata.md)"
+msgstr ""
+
+#: ../../index.md:117
+msgid ""
+"[Build your package (sdist / wheel)](package-structure-code/python-"
+"package-distribution-files-sdist-wheel.md)"
+msgstr ""
+
+#: ../../index.md:118
+msgid "[Declare dependencies](package-structure-code/declare-dependencies.md)"
+msgstr ""
+
+#: ../../index.md:119
+msgid ""
+"[Navigate the packaging tool ecosystem](package-structure-code/python-"
+"package-build-tools.md)"
+msgstr ""
+
+#: ../../index.md:120
+msgid ""
+"[Non pure Python builds](package-structure-code/complex-python-package-"
+"builds.md)"
+msgstr ""
+
+#: ../../index.md:123
+msgid "✨ Publish your package ✨"
+msgstr ""
+
+#: ../../index.md:127
+msgid ""
+"Gain a better understanding of the Python packaging ecosystem Learn about"
+" best practices for:"
+msgstr ""
+
+#: ../../index.md:130
+msgid ""
+"[Package versioning & release](/package-structure-code/python-package-"
+"versions.md)"
+msgstr ""
+
+#: ../../index.md:131
+msgid ""
+"[Publish to PyPI & Conda-forge](/package-structure-code/publish-python-"
+"package-pypi-conda.md)"
+msgstr ""
+
+#: ../../index.md:142
+msgid "✨ Write The Docs ✨"
+msgstr ""
+
+#: ../../index.md:145
+msgid ""
+"[Create documentation for your users](/documentation/write-user-"
+"documentation/intro)"
+msgstr ""
+
+#: ../../index.md:146
+msgid ""
+"[Core files to include in your package repository](/documentation"
+"/repository-files/intro)"
+msgstr ""
+
+#: ../../index.md:147
+msgid ""
+"[Write tutorials to show how your package is used](/documentation/write-"
+"user-documentation/create-package-tutorials)"
+msgstr ""
+
+#: ../../index.md:150
+msgid "✨ Developer Docs ✨"
+msgstr ""
+
+#: ../../index.md:153
+msgid ""
+"[Create documentation for collaborating developers](/documentation"
+"/repository-files/contributing-file)"
+msgstr ""
+
+#: ../../index.md:154
+msgid ""
+"[Write a development guide](/documentation/repository-files/development-"
+"guide)"
+msgstr ""
+
+#: ../../index.md:157
+msgid "✨ Document For A Community ✨"
+msgstr ""
+
+#: ../../index.md:160
+msgid ""
+"[Writing a README file](/documentation/repository-files/readme-file-best-"
+"practices)"
+msgstr ""
+
+#: ../../index.md:161
+msgid ""
+"[Set norms with a Code of Conduct](/documentation/repository-files/code-"
+"of-conduct-file)"
+msgstr ""
+
+#: ../../index.md:162
+msgid "[License your package](/documentation/repository-files/license-files)"
+msgstr ""
+
+#: ../../index.md:165
+msgid "✨ Publish Your Docs ✨"
+msgstr ""
+
+#: ../../index.md:168
+msgid "[How to publish your docs](/documentation/hosting-tools/intro)"
+msgstr ""
+
+#: ../../index.md:169
+msgid "[Using Sphinx](/documentation/hosting-tools/intro)"
+msgstr ""
+
+#: ../../index.md:170
+msgid ""
+"[Markdown, MyST, and ReST](/documentation/hosting-tools/myst-markdown-"
+"rst-doc-syntax)"
+msgstr ""
+
+#: ../../index.md:171
+msgid ""
+"[Host your docs on Read The Docs or GitHub Pages](/documentation/hosting-"
+"tools/publish-documentation-online)"
+msgstr ""
+
+#: ../../index.md:181
+msgid "✨ Tests for your Python package ✨"
+msgstr ""
+
+#: ../../index.md:184
+msgid "[Intro to testing](tests/index.md)"
+msgstr ""
+
+#: ../../index.md:185
+msgid "[Write tests](tests/write-tests)"
+msgstr ""
+
+#: ../../index.md:186
+msgid "[Types of tests](tests/test-types)"
+msgstr ""
+
+#: ../../index.md:189
+msgid "✨ Run your tests ✨"
+msgstr ""
+
+#: ../../index.md:192
+msgid "[Run tests locally with Hatch](tests/run-tests)"
+msgstr ""
+
+#: ../../index.md:193
+msgid "[Run tests with nox](tests/run-tests-nox)"
+msgstr ""
+
+#: ../../index.md:194
+msgid "[Run tests in CI](tests/tests-ci)"
+msgstr ""
+
+#: ../../index.md:198
+msgid "Contributing"
+msgstr ""
+
+#: ../../index.md:205
+msgid "✨ Code style & Format ✨"
+msgstr ""
+
+#: ../../index.md:208
+msgid "[Code style](package-structure-code/code-style-linting-format.md)"
+msgstr ""
+
+#: ../../index.md:211
+msgid "✨ Want to contribute? ✨"
+msgstr ""
+
+#: ../../index.md:216
+msgid ""
+"We welcome contributions to this guide. Learn more about how you can "
+"contribute."
+msgstr ""
+
+#: ../../index.md:221
+msgid "A group of people building a pyramid with blocks"
+msgstr ""
+
+#: ../../index.md:227
+msgid "A community-created guidebook"
+msgstr ""
+
+#: ../../index.md:229
+msgid ""
+"Every page in this guidebook goes through an extensive community review "
+"process. To ensure our guidebook is both beginner-friendly and accurate, "
+"we encourage reviews from a diverse set of pythonistas and scientists "
+"with a wide range of skills and expertise."
+msgstr ""
+
+#: ../../index.md:232
+msgid "View guidebook contributors"
+msgstr ""
+
+#: ../../index.md:240
+msgid "Who this guidebook is for"
+msgstr ""
+
+#: ../../index.md:242
+msgid ""
+"This guidebook is for anyone interested in learning more about Python "
+"packaging. It is beginner-friendly and will provide:"
+msgstr ""
+
+#: ../../index.md:244
+msgid "Beginning-to-end guidance on creating a Python package."
+msgstr ""
+
+#: ../../index.md:245
+msgid ""
+"Resources to help you navigate the Python packaging ecosystem of tools "
+"and approaches to packaging."
+msgstr ""
+
+#: ../../index.md:246
+msgid ""
+"A curated list of resources to help you get your package into documented,"
+" usable and maintainable shape."
+msgstr ""
+
+#: ../../index.md:248
+msgid "Where this guide is headed"
+msgstr ""
+
+#: ../../index.md:250
+msgid ""
+"If you have ideas of things you'd like to see here clarified in this "
+"guide, [we invite you to open an issue on "
+"GitHub.](https://github.com/pyOpenSci/python-package-guide/issues)."
+msgstr ""
+
+#: ../../index.md:253
+msgid ""
+"If you have questions about our peer review process or packaging in "
+"general, you are welcome to use our [GitHub "
+"Discussions](https://github.com/orgs/pyOpenSci/discussions)."
+msgstr ""
+
+#: ../../index.md:255
+msgid ""
+"This living Python packaging guide is updated as tools and best practices"
+" evolve in the Python packaging ecosystem. We will be adding new content "
+"over the next year."
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/maintain-automate.po b/locales/el/LC_MESSAGES/maintain-automate.po
new file mode 100644
index 000000000..fee759547
--- /dev/null
+++ b/locales/el/LC_MESSAGES/maintain-automate.po
@@ -0,0 +1,1807 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../maintain-automate/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:12
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:14
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:18
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:23
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:25
+msgid ""
+"When you're ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:28
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:29
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:30
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:32
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:34
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:35
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:37
+msgid "What is continuous deployment (CD)?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:39
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:41
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:42
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:44
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:47
+msgid "Why use CI?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:49
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:54
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:58
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:63
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:68
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:71
+msgid "CI/CD platforms"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:73
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:78
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:83
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:85
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:91
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:94
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:97
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:100
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:105
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:107
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:1
+msgid "Installing your own code"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:3
+msgid ""
+"You have a conda environment. It works. Maybe it has packages that were "
+"hard to install, like GDAL, HDF5, or other compiled scientific "
+"dependencies."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:5
+msgid ""
+"You also have code that you are writing locally. Maybe it started as a "
+"script, or maybe it is already organized as a Python package. You want to"
+" use that code inside the same environment with GDAL, HDF5, and the other"
+" tools you already installed."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:7
+msgid ""
+"The instructions to install your code into a conda environment is to "
+"first activate your conda environment `conda activate your_env_name` and "
+"then run this: `python -m pip install -e . --no-deps`. You may also see "
+"this written as `pip install -e .`. See [The Full Command](the-full-"
+"command) section below for more info as to the details of this command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:9
+msgid ""
+"If this is the first time you're seeing pip install commands, you may not"
+" be totally sure what is going on here. Conda created the environment, "
+"why am I using `pip` to install things now? You may have heard guidance "
+"to generally try and avoid mixing conda and pip? You may already be "
+"mixing conda and pip and things are totally fine. You may also not care "
+"at all because `pip install -e .` seems to work fine and you can get back"
+" to what you're actually trying to do. (If that last one is you, you're "
+"also probably not reading this page). In any event, all of these "
+"situations are perfectly understandable and totally okay for you to be "
+"going through."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:11
+msgid ""
+"So... why pip? The short answer is that conda and pip are doing different"
+" jobs here."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:13
+msgid ""
+"The slightly longer, mostly apologetic, answer is this is just sort of "
+"the current ergonomics of how python packaging works and, honestly? Most "
+"of us have turned this confusing pain point into muscle memory. But not "
+"you. You're new here. And you're like... wat? And you're totally "
+"justified to feel this way."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:15
+msgid ""
+"So, what is happening here? `conda` manages the environment: the Python "
+"runtime, compiled libraries, command line tools, and the packages your "
+"project depends on. This is stuff that you've already been doing and "
+"you're comfortable with (or at least familiar with). `pip` is doing one "
+"Python-packaging-specific job: installing your local package into the "
+"active environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:17
+msgid ""
+"In editable mode, the `-e` flag, `pip` connects the active environment to"
+" the source files you are editing. And... why exactly is that useful?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:19
+msgid "It's useful because it gives you a pretty quick development loop:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:21
+msgid "Edit your code in your editor."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:22
+msgid "Run it from a terminal, test suite, or Jupyter notebook."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:23
+msgid "Edit the code again."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:24
+msgid "Run it again without reinstalling your package."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:26
+msgid ""
+"So the goal is not to switch from conda to pip. The goal is to keep using"
+" your conda environment while making your local package importable inside"
+" that environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:28
+msgid "Should I use pip for everything now?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:30
+msgid "Probably not?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:32
+msgid ""
+"If conda is already working well for your project, keep using conda to "
+"manage the environment. Use pip only for this one task: installing your "
+"local package in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:34
+msgid ""
+"If you are curious about other tools like uv, pixi, Hatch, or pip-only "
+"workflows, see [Environment Managers](environment-managers.md). Those "
+"tools can be great choices. But you do not need to switch tools just to "
+"develop your local package inside a conda environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:36
+msgid ""
+"As a final note, people in the conda ecosystem are actively working on "
+"better conda/pip interoperability. In the future, this workflow may "
+"become less awkward. For now, `python -m pip install -e . --no-deps` is "
+"the standard bridge."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:39
+msgid "The full command"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:41
+msgid ""
+"`python -m pip install -e . --no-deps` is a mouthful. I know it. You know"
+" it. Why do we do these things?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:43
+msgid "The simplest version of this is:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:48
+msgid "But we recommend the longer version in conda environments for two reasons."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:50
+msgid ""
+"The `python -m pip` part ensures that you're using pip from the active "
+"conda environment. Sometimes this results in `pip not found`, which is "
+"actually a good error to get because it means you prevented an annoying-"
+"to-debug failure mode. If this happens just `conda install pip` and try "
+"again. So, why? Sometimes `pip` from a different python environment can "
+"be on your PATH which means that you'll accidentally install your code "
+"into an unrelated python environment. This can be confusing to debug. "
+"This has happened to most (all?) of us. It usually hits when you're least"
+" prepared to debug and fix it. So we recommend the `python -m` in front "
+"to prevent this from happening. But it does add to the length of the "
+"command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:52
+msgid ""
+"The `--no-deps` flag tells pip not to install your package's "
+"dependencies, if you have any listed in your project. If you do have them"
+" listed, probably in your `pyproject.toml` file, then `pip install -e .` "
+"will try to install the dependencies that are listed in that file. In a "
+"conda environment, that can range from \"mostly fine\" to \"now my "
+"environment is broken and I am not sure how to recover.\""
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:54
+msgid ""
+"With `--no-deps`, pip installs only your local package. You remain "
+"responsible for managing the environment dependencies with conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:2
+msgid "Environment Managers for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:4
+msgid "Quick Decision Guide"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:6
+msgid "**Python-only project, want simplicity?** → venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:7
+msgid "**Python-only, want speed?** → **uv** (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:8
+msgid "**Installing CLI tools globally?** → pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:9
+msgid ""
+"**Need conda packages or cross-language dependencies?** → **pixi** "
+"(recommended) or conda/mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:10
+msgid ""
+"**Creating a Python package?** → Use Hatch -- with UV as a dependency "
+"manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:12
+msgid ""
+"You can mix tools! For example, use **pipx** to install tools you use "
+"often (at the command line) like Hatch, ruff or pre-commit, then use "
+"**uv** within your projects for package and environment management."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:15
+msgid "Environment and package managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:17
+msgid ""
+"Package and environment managers are important tools in your Python "
+"packaging workflows. To make Your packaging experience when selecting a "
+"tool will be easier if you understand the difference between the two."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:20
+msgid ""
+"A **package manager** is used to install, update, and remove Python "
+"packages (libraries and tools) and their dependencies in your "
+"environment. When you use a package manager, you are often downloading "
+"packages from a repository like PyPI (Python Package Index) or a local "
+"repository like GitHub / GitLab."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:23
+msgid ""
+"When you run `pip install numpy`, pip acts as a package manager and "
+"installs numpy from PyPI. Pip's default repository when you install a "
+"package is PyPI, but it can be used to install packages from other "
+"repositories such as GitHub."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:26
+msgid ""
+"An **environment manager** creates isolated spaces (environments) for "
+"your Python projects. Each environment has its own Python installation "
+"and its own installed packages. Using isolated environments for different"
+" projects reduces the change of environment conflicts when using the same"
+" environment across different projects with different dependencies."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:28
+msgid ""
+"There are many tools listed below, but if you're short on time, you may "
+"want to consider"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:30
+msgid ""
+"Hatch combined with UV if you are managing a Python package. [Check out "
+"our tutorials for more on this workflow.](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:31
+msgid ""
+"Pixi or mamba as faster alternatives to conda if you are working in the "
+"non-Pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:33
+msgid "Where environment managers save your environment"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:35
+msgid ""
+"Environment managers save environments in different locations by default."
+" For instance, `venv`, an environment manager that ships with Python, "
+"saves an environment by default in your current working directory. UV has"
+" the same native behavior. In contrast, conda and mamba save environments"
+" in a global location, allowing you to access them easily across "
+"projects."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:38
+msgid ""
+"UV does have a global cache even tho its default behavior is to create an"
+" environment in your current working directory."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:42
+msgid "Some tools do everything"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:44
+msgid ""
+"Some modern tools handle both package installation and environment "
+"management. For instance, UV, conda and mamba can be used to both create "
+"environments, add dependencies, and build and install tools."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:46
+msgid "Comparison Table: pip ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Tool"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Type"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Language"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Speed"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Default Environment Location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Description"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pip**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Package manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+#: ../../maintain-automate/task-runners.md
+msgid "Python"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Slower"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "N/A (uses existing environment)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's standard package installer. pip also builds packages"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pipx**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (isolated per tool)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid ""
+"Installs tools that you need to regularly use across projects such as "
+"nox, pytest or ruff in a global location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**uv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Both"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Rust"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fastest"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fast package installer and environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**venv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's built-in environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**virtualenv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Moderate"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Feature-rich alternative to venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:56
+msgid "Comparison Table: conda ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**conda**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python/C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (`~/anaconda3/envs/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Cross-language package and environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**mamba**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster drop-in replacement for conda"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pixi**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory (`.pixi/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Modern conda-based tool with lock files"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:64
+msgid ""
+"**Speed comparison:** Rust-based tools (uv, pixi) are significantly "
+"faster when installing packages and resolving complex environments than "
+"Python-based tools. Mamba is faster than conda but might be slower than "
+"Rust-based alternatives such as Pixi."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:67
+msgid "Package Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:69
+msgid "pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:71
+msgid ""
+"Pip is Python's standard package installer. It is included with Python by"
+" default."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:72
+msgid ""
+"Pip is great for installing packages from PyPI and GitHub / GitLab into "
+"existing environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:73
+msgid ""
+"It is also great for development if you want to install your package "
+"locally in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:75
+#: ../../maintain-automate/environment-managers.md:87
+#: ../../maintain-automate/environment-managers.md:99
+#: ../../maintain-automate/environment-managers.md:127
+#: ../../maintain-automate/environment-managers.md:189
+#: ../../maintain-automate/environment-managers.md:211
+#: ../../maintain-automate/environment-managers.md:261
+#: ../../maintain-automate/environment-managers.md:280
+msgid "**Basic usage:**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:81
+msgid "pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:83
+msgid ""
+"Pipx is can be used to install a tool that you need to use across "
+"projects (like `riff`, `pytest`, `sphinx`, `nox`), globally."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:85
+msgid ""
+"Why use it: You might use it to avoid reinstalling the same tool over and"
+" over on your machine."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:93
+msgid "conda / mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:95
+msgid ""
+"Conda is a cross-language package manager that installs Python packages, "
+"R packages, system libraries, and more. Mamba is a faster, drop-in "
+"replacement for conda and we highly recommend mamba over conda if you are"
+" still using conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:97
+msgid ""
+"These tools are best for scientific computing projects and environments "
+"that need non-Python dependencies (like C libraries, GDAL, or R "
+"packages)."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:109
+msgid "Conda and mamba also function as environment managers - see below!"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:112
+#: ../../maintain-automate/index.md:51
+msgid "Environment Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:114
+msgid "hatch for pure Python packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:116
+#: ../../maintain-automate/environment-managers.md:204
+#: ../../maintain-automate/environment-managers.md:273
+msgid "pyOpenSci Recommends"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:118
+msgid ""
+"We recommend **hatch** as a complete project management tool for Python "
+"packaging. Hatch manages environments, builds packages, runs tests, and "
+"handles publishing—all in one tool. It can use **uv** as its backend for "
+"even faster operations."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:121
+msgid ""
+"Hatch is a comprehensive modern Python project manager that handles "
+"environments, package building, testing, and publishing. Hatch creates "
+"isolated environments for different tasks (testing, docs, development). "
+"Hatch uses UV under the hood to install Python, and can be set to use UV "
+"to manage environment installations too."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:123
+msgid ""
+"Hatch is best for Python package developers who want an all-in-one tool "
+"that handles the entire packaging workflow from development to "
+"publication."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:125
+msgid "[Check out our tutorial](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch with uv backend"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:160
+msgid ""
+"Hatch acts as a task runner and can manage multiple environments that you"
+" define. It also handles project and dependency installation, making it "
+"ideal for package maintainers who want consistency across development "
+"tasks."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:163
+msgid "venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:165
+msgid ""
+"venv is Python's built-in environment creator (included with Python "
+"3.3+). It is best for simple pure Python projects. Because venv ships "
+"with Python, and it is used by Hatch, UV and other tools under the hood, "
+"it is the most widely used tool."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:168
+msgid "Basic usage:"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:184
+msgid "virtualenv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:186
+msgid ""
+"virtualenv is a more feature-rich alternative to venv with better "
+"performance and additional options. It's best for you if you need more "
+"control over your environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:202
+msgid "uv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:206
+msgid ""
+"We recommend **uv** for fast, reliable Python package and environment "
+"management. It's significantly faster than pip and easily handles both "
+"installing packages and creating environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:209
+msgid ""
+"UV is a fast, Rust-based tool that replaces both pip and venv. It "
+"installs packages and creates virtual environments at lightning speed. UV"
+" is best for any pure Python project. Pixi is better if are working in "
+"the non-pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "uv (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+#: ../../maintain-automate/environment-managers.md:272
+msgid "pixi"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:256
+msgid "conda / mamba (as environment managers)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:258
+msgid ""
+"Conda and mamba create isolated environments that can contain Python, R, "
+"system libraries, and more. The conda ecosystem tools are best for "
+"managing complex dependencies across languages or when you need specific "
+"system libraries."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:275
+msgid ""
+"For projects needing conda packages, we recommend **pixi** over "
+"conda/mamba. It's faster, uses lock files for reproducibility, and works "
+"cross-platform."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:278
+msgid ""
+"Pixi is a modern, fast package and environment manager built on conda "
+"ecosystems. Similar to UV, Pixi uses lock files for reproducible "
+"environments. Pixi is best suited for scientific projects that require "
+"conda packages, teams that require exact reproducibility, or cross-"
+"platform development."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:299
+msgid ""
+"Pixi automatically creates a lock file (`pixi.lock`) ensuring everyone on"
+" your team gets identical environments."
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "What is CI?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Task runners"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Development installs with conda"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Maintain & Automate"
+msgstr ""
+
+#: ../../maintain-automate/index.md:2
+msgid "Automate Workflows and Maintain Your Package"
+msgstr ""
+
+#: ../../maintain-automate/index.md:4
+msgid ""
+"Once you've [created your package](create-pure-python-package), "
+"[published it](publish-pypi-tutorial), and set up a repository for it, "
+"the next step is to automate development and maintenance workflows. "
+"Automation makes maintaining your package easier, more robust, and more "
+"secure. It also helps new contributors get started quickly without having"
+" to manually set up complex development environments and testing "
+"workflows."
+msgstr ""
+
+#: ../../maintain-automate/index.md:11
+msgid "Why automate?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:13
+msgid ""
+"When you automate repetitive tasks like running tests, checking code "
+"style, and building documentation, you ensure that these important steps "
+"happen consistently every time. This consistency helps you catch bugs "
+"early, maintain code quality, and make it easier for others to contribute"
+" to your package. Automation also saves you time—instead of remembering "
+"and typing long command sequences, you can run everything with simple "
+"commands or have workflows run automatically when you push code to "
+"GitHub."
+msgstr ""
+
+#: ../../maintain-automate/index.md:22
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../maintain-automate/index.md:24
+msgid ""
+"This section will walk you through two key automation strategies for "
+"Python packages:"
+msgstr ""
+
+#: ../../maintain-automate/index.md:27
+msgid ""
+"[**Task runners**](task-runners-intro) help you automate common "
+"development tasks locally— things like running tests, building "
+"documentation, formatting code, and checking for errors. Instead of "
+"typing out long command sequences every time, you define tasks once and "
+"run them with simple commands. Task runners like Hatch and Nox also "
+"manage isolated environments for different workflows, ensuring you have "
+"the right dependencies for each task."
+msgstr ""
+
+#: ../../maintain-automate/index.md:35
+msgid ""
+"[**Continuous Integration (CI)**](ci-cd) takes automation further by "
+"running your tests and checks automatically every time code is pushed to "
+"GitHub or when someone opens a pull request. CI ensures that all changes "
+"are tested across different Python versions and operating systems before "
+"they're merged. You can also use Continuous Deployment (CD) to automate "
+"publishing your package to PyPI and deploying your documentation."
+msgstr ""
+
+#: ../../maintain-automate/index.md:42
+msgid ""
+"Together, task runners and CI/CD create a robust development workflow "
+"that makes your package easier to maintain and more welcoming to "
+"contributors."
+msgstr ""
+
+#: ../../maintain-automate/index.md:46
+msgid ""
+"[**Development installs in conda environments**](dev-installs) help you "
+"connect conda-based scientific development environments with local Python"
+" package development. This is especially useful when your package depends"
+" on compiled or system-level dependencies that conda manages well."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:2
+msgid "Task Runners for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:4
+msgid "What is a Task Runner?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:6
+msgid ""
+"A task runner is a tool that automates repetitive development workflows. "
+"Instead of typing out long command sequences every time you need to test "
+"your code, build documentation, or check your package, you define these "
+"tasks once and run them with simple commands."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:11
+msgid "For example, rather than running:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:19
+msgid "You can define a task and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:25
+msgid ""
+"Most modern task runners also include environment management features "
+"that make it quick and easy to run tasks. Task runners ensure that "
+"workflows are executed consistently every time, whether you're running "
+"them on your laptop or in continuous integration, and they also make it "
+"easier for contributors to recreate the same workflows in their local "
+"environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:32
+msgid "Benefits of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:34
+msgid ""
+"Task runners provide several benefits for package development. When you "
+"use a task runner, everyone on your team runs tasks the same way, "
+"reducing environment-specific issues and \"works on my machine\" "
+"problems. Complex multi-step processes become single commands, so "
+"contributors don't need to memorize or look up lengthy command sequences."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:41
+msgid ""
+"Many task runners also create isolated environments for different "
+"workflows, ensuring the right dependencies are available for each task "
+"without conflicts. This means your tasks run the same way locally and in "
+"continuous integration, making debugging easier and builds more reliable."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:47
+msgid "Two types of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:49
+msgid ""
+"The most common task runners used in the Python ecosystem fall into two "
+"categories:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:51
+msgid "Environment + command managers"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:53
+msgid ""
+"You can use these to both create custom isolated environments and also to"
+" run your tasks."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:55
+msgid ""
+"**[Hatch](https://hatch.pypa.io/):** Hatch is an all-in-one package "
+"management tool that includes a built-in task runner. It uses a "
+"declarative TOML configuration in your `pyproject.toml` file, which means"
+" everything related to your package—metadata, dependencies, and "
+"tasks—lives in one place. Hatch also integrates with UV for fast "
+"environment creation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:56
+msgid ""
+"**[Nox](https://nox.thea.codes/):** Nox is a flexible Python-based task "
+"runner that uses a code-based (imperative) configuration approach. You "
+"write Python functions to define your tasks in a `noxfile.py`, which "
+"gives you maximum flexibility for complex testing scenarios and "
+"conditional logic. It's especially popular in the Scientific Python "
+"ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:57
+msgid ""
+"**[Tox](https://tox.wiki/):** Tox is a mature declarative tool that uses "
+"INI or TOML configuration files. It's particularly well-suited for "
+"testing across multiple Python versions and dependency combinations, and "
+"has been a standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:59
+msgid "Command-only tools"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:61
+msgid "These tools execute your commands but don't manage environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:63
+msgid ""
+"**[Make](https://www.gnu.org/software/make/):** Make is a traditional "
+"build automation tool that uses Makefiles. It's widely known and "
+"available on most systems, making it a good choice for simple task "
+"automation when you don't need Python-specific features. However, it can "
+"have cross-platform compatibility issues, especially on Windows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:64
+msgid ""
+"**[Just](https://just.systems/):** Just is a modern command runner "
+"written in Rust with simple, Make-like syntax. It's fast, cross-platform,"
+" and easy to learn, making it a good lightweight alternative when you "
+"need basic task running without environment management."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:66
+msgid ""
+"Generally the two task runners that pyOpenSci suggests and uses are "
+"[Nox](https://nox.thea.codes/en/stable/) and [Hatch (also a package "
+"management tool)](https://hatch.pypa.io/latest/). Below, you will learn "
+"about the differences between all of the tools and can make a decision "
+"for yourself depending on your needs."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:71
+msgid "pyOpenSci recommends: Hatch and Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:73
+msgid ""
+"At pyOpenSci, the recommendation is **Hatch** for Python package "
+"development. Hatch also includes a task and environment system feature. "
+"Using Hatch means you don't need to setup another tool like Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:77
+msgid ""
+"However, **Nox** is also an excellent choice, particularly if you need "
+"complex testing, build or workflow logic."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:80
+msgid ""
+"You'll find many of the pyOpenSci documentation repositories use Nox to "
+"automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:83
+msgid "Why use Hatch?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:85
+msgid ""
+"Hatch is an all-in-one tool that helps you manage metadata, dependencies,"
+" build configuration, and tasks together in `pyproject.toml`. Using "
+"Hatch, everything related to your package lives in one place. It combines"
+" packaging (building and publishing) with everyday development tasks like"
+" testing, docs, and formatting, making workflows easier to run and share."
+" Hatch also integrates with UV making it extremely fast. Finally, Hatch "
+"follows modern packaging practices (for example, PEP 621), so your "
+"project stays aligned with community standards."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:95
+msgid "Why use Nox?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:97
+msgid ""
+"Python-based configuration gives Nox maximum flexibility, making it easy "
+"to express complex logic and conditionals directly. Because sessions are "
+"written in Python, they are explicit and easy to inspect and debug. Nox "
+"is particularly powerful for handling complex test and build scenarios "
+"that some packages require."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:103
+msgid "Declarative vs. imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:105
+msgid "An important distinction between these tools is how you configure them:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:107
+msgid ""
+"Hatch is a **Declarative tool**. This means it uses a configuration file "
+"where you specify *what* you want. See the example below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:119
+msgid ""
+"Nox uses an **Imperative** approach to defining workflows. With Nox, you "
+"write Python code that defines how to perform a task. An example of a Nox"
+" function (which would live in a separate noxfile.py file) is shown "
+"below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:132
+msgid "Trade-offs: declarative vs. imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:134
+msgid ""
+"**Declarative (Hatch, Tox):** Simpler syntax, easier to read and "
+"maintain. Might be slightly less flexible for complex logic (this is user"
+" dependent)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:137
+msgid ""
+"**Imperative (Nox):** You can easily include complex logic and "
+"conditionals. Because it uses Python, it might be more familiar to you!"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:141
+msgid ""
+"Neither approach is inherently better—it depends on your needs and "
+"preferences. Projects with complex testing scenarios may benefit from "
+"Nox's flexibility, while projects wanting simple, standardized workflows "
+"may prefer the clarity of declarative configuration."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:146
+msgid "An overview of the core task runners tools that you will find in"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:147
+msgid "the Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:149
+msgid "Comparison table"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:151
+msgid ""
+"Below you will see a comparison of features associated with each tool. "
+"Each tool is then described in a bit more detail just in case you want a "
+"better lay of the land."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Feature"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:167
+msgid "Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:223
+msgid "Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:275
+msgid "Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:321
+msgid "Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:360
+msgid "Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "noxfile.py"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "tox.ini"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Makefile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "justfile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration Style**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Declarative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Language**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "INI/TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Make syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Just syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Python-specific**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Yes"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "No"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Environment Management**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Matrix Testing**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Packaging Integration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Cross-platform**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Limited"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Best For**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complete package development"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complex testing workflows and other builds"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Legacy projects, standard testing"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple commands"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:169
+msgid ""
+"[Hatch](https://hatch.pypa.io/) is a modern, all-in-one packaging and "
+"task automation tool that simplifies Python package development by "
+"handling everything from building and publishing to running tests and "
+"formatting code. Hatch is what we use [in our packaging tutorials found "
+"in this guidebook](packaging-101)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:174
+msgid "Why we like Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:176
+msgid ""
+"Hatch stands out because it's a single tool that handles both packaging "
+"AND task running. Instead of juggling multiple tools, you configure "
+"everything in your `pyproject.toml` file—no extra configuration files "
+"needed. Hatch creates isolated environments for different tasks (like "
+"testing or building docs) and integrates with UV for extremely fast "
+"environment setup. It uses a declarative, clean syntax that's easy to "
+"read and maintain, and it supports matrix testing so you can easily test "
+"your package across multiple Python versions."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:185
+msgid "When to use Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:187
+msgid ""
+"Hatch is ideal for complete package development workflows. You can use it"
+" for testing across Python versions, building documentation, running code"
+" formatters and linters, and building and publishing your package to "
+"PyPI. If you want a modern, all-in-one solution that follows current "
+"Python packaging standards (like PEP 621), Hatch is an excellent choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:194
+#: ../../maintain-automate/task-runners.md:251
+#: ../../maintain-automate/task-runners.md:299
+#: ../../maintain-automate/task-runners.md:344
+#: ../../maintain-automate/task-runners.md:383
+msgid "Example configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:196
+msgid ""
+"Below is an example of how you'd set up a test environment in Hatch. This"
+" configuration creates a `test` environment with pytest and pytest-cov "
+"installed, defines a `run` script to execute your tests, and sets up "
+"matrix testing to run tests on Python 3.10, 3.11, and 3.12:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:217
+#: ../../maintain-automate/task-runners.md:269
+#: ../../maintain-automate/task-runners.md:315
+#: ../../maintain-automate/task-runners.md:356
+#: ../../maintain-automate/task-runners.md:396
+msgid "You would run the above in your terminal using:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:219
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:221
+msgid "**Learn more:** [Hatch documentation](https://hatch.pypa.io/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:225
+msgid ""
+"[Nox](https://nox.thea.codes/) is a Python-based automation toolkit "
+"focused on testing across environments. It uses a code-based (imperative)"
+" configuration approach that gives you maximum flexibility for complex "
+"testing workflows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:230
+msgid "Why we like Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:232
+msgid ""
+"Nox stands out because it uses Python code to define your tasks, which "
+"means you can include complex logic and conditionals directly in your "
+"automation workflows. Because sessions are written in Python, they're "
+"explicit, easy to inspect, and straightforward to debug. Nox is "
+"particularly powerful for handling complex test and build scenarios that "
+"some packages require, and it's especially popular in the Scientific "
+"Python ecosystem. You'll find many pyOpenSci documentation repositories "
+"use Nox to automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:242
+msgid "When to use Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:244
+msgid ""
+"Nox is ideal when you need complex testing scenarios with conditional "
+"logic or when you prefer Python-based configuration over declarative "
+"formats. It's excellent for testing across Python versions and managing "
+"multiple testing environments. If packaging is handled separately and you"
+" want maximum flexibility in your task automation, Nox is a great choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:253
+msgid ""
+"Below is an example of a Nox session that runs tests across multiple "
+"Python versions. The `@nox.session` decorator defines a session (similar "
+"to a task), and you specify which Python versions to test with. Nox will "
+"create isolated environments for each version and run your tests:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:271
+msgid "`nox -s tests`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:273
+msgid "**Learn more:** [Nox documentation](https://nox.thea.codes/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:277
+msgid ""
+"[Tox](https://tox.wiki/) is a mature automation tool for testing in "
+"multiple environments. It uses declarative configuration and has been a "
+"standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:281
+msgid "Why people use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:283
+msgid ""
+"Tox is mature and stable, with a long history in the Python ecosystem. It"
+" uses declarative configuration (traditionally INI format, though TOML "
+"support was added recently) and is particularly good for testing across "
+"Python versions and dependency sets. Many projects use Tox because it "
+"integrates well with CI/CD systems and has a robust plugin ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:290
+msgid "When to use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:292
+msgid ""
+"Tox is ideal if you're maintaining a legacy project that already uses it,"
+" or if you have existing `tox.ini` configuration you want to preserve. "
+"It's also a good choice if you need specific Tox plugins or prefer "
+"declarative configuration separate from your packaging tools. However, "
+"keep in mind that Tox can be slower than modern alternatives like Hatch."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:301
+msgid ""
+"Below is an example of a Tox configuration that runs tests across "
+"multiple Python versions. The `envlist` specifies which Python versions "
+"to test, and the `testenv` section defines what to install and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:317
+msgid ""
+"`tox` (runs all environments) or `tox -e py310` (runs a specific "
+"environment)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:319
+msgid "**Learn more:** [Tox documentation](https://tox.wiki/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:323
+msgid ""
+"[Make](https://www.gnu.org/software/make/) is a traditional build "
+"automation tool that uses Makefiles. It's been around since the 1970s and"
+" is widely used across many programming languages."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:327
+msgid "Why people use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:329
+msgid ""
+"Make is widely known and available on most systems, making it a familiar "
+"choice for many developers. It has simple syntax for basic tasks and "
+"executes very quickly. Because it's not Python-specific, you can use it "
+"to coordinate tasks across different languages in the same project."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:335
+msgid "When to use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:337
+msgid ""
+"Make is best for simple task automation when you don't need Python-"
+"specific features or environment management. It's a good lightweight "
+"option if you want something fast and universally available. However, be "
+"aware that Make can have cross-platform compatibility issues, especially "
+"on Windows, and you'll need to handle Python environment management "
+"separately."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:346
+msgid ""
+"Below is an example of a simple Makefile with tasks for testing and "
+"building documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:358
+msgid "`make test` or `make docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:362
+msgid ""
+"[Just](https://just.systems/) is a modern command runner written in Rust "
+"that offers a simpler, more user-friendly alternative to Make."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:365
+msgid "Why people use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:367
+msgid ""
+"Just has simple, Make-like syntax but with better error messages and more"
+" intuitive behavior. It's fast, truly cross-platform (unlike Make), and "
+"easy to learn. The tool is written in Rust, which makes it very "
+"performant, and it avoids many of the quirks and gotchas that Make has "
+"accumulated over decades."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:373
+msgid "When to use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:375
+msgid ""
+"Just is ideal when you need a lightweight command runner for simple tasks"
+" and don't require Python-specific features or environment management. "
+"It's a great choice if you want something faster and more modern than "
+"Make, with better cross-platform support. However, keep in mind that Just"
+" requires separate installation and has less integration with the Python "
+"packaging ecosystem compared to tools like Hatch or Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:385
+msgid ""
+"Below is an example of a justfile with tasks for testing and building "
+"documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:398
+msgid "`just test` or `just docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:400
+msgid "**Learn more:** [Just documentation](https://just.systems/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:402
+msgid "Choosing the right task runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:404
+msgid "**Choose Hatch if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:406
+msgid "You're building a Python package"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:407
+msgid "You want an all-in-one tool"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:408
+msgid "You prefer configuration in pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:409
+msgid "You want fast environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:410
+msgid "You prefer declarative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:412
+msgid "**Choose Nox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:414
+msgid "You need complex testing scenarios with conditional logic"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:415
+msgid "You prefer Python-based, imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:416
+msgid "You're working in the Scientific Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:417
+msgid "Packaging is handled separately"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:418
+msgid "You want maximum flexibility"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:420
+msgid "**Choose Tox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:422
+msgid "You're maintaining a legacy project already using it"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:423
+msgid "You have existing tox.ini configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:424
+msgid "You need specific tox plugins"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:425
+msgid "You prefer declarative configuration separate from packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:427
+msgid "**Choose Make or Just if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:429
+msgid "You need a lightweight command runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:430
+msgid "You're not doing Python-specific workflows"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:431
+msgid "You want something simple and fast"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:432
+msgid "You don't need environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:434
+msgid "Next steps"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:436
+msgid ""
+"Learn how to use [Hatch "
+"environments](https://hatch.pypa.io/latest/tutorials/environment/basic-"
+"usage/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:437
+msgid ""
+"[Create a package using the Python package tutorial.](create-pure-python-"
+"package)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:438
+msgid ""
+"Explore and use the [pyOpenSci package "
+"template](https://github.com/pyOpenSci/pyos-package-template) with pre-"
+"configured Hatch tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:441
+msgid ""
+"Read the [Scientific Python development guide on task "
+"runners](https://learn.scientific-python.org/development/guides/tasks/). "
+"This guide is excellent if you plan to use nox as your task runner as it "
+"has lots of examples that you can follow."
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/package-structure-code.po b/locales/el/LC_MESSAGES/package-structure-code.po
new file mode 100644
index 000000000..1ab7852dc
--- /dev/null
+++ b/locales/el/LC_MESSAGES/package-structure-code.po
@@ -0,0 +1,5442 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../package-structure-code/code-style-linting-format.md:1
+msgid "Python Package Code Style, Format and Linters"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:3
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:12
+msgid "Take Aways"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:5
+msgid "pyOpenSci requires authors to follow PEP 8 code format guidelines"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:6
+msgid ""
+"Setting up a code formatters like Black and isort will help you enforce "
+"PEP 8 style guidelines and also consistent, readable code format"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:7
+msgid "Some commonly used tools are: Black, Isort, flake8, Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:8
+msgid ""
+"You can also setup pre-commit hooks which will run code formatters "
+"locally each time you make a commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:10
+msgid ""
+"[precommit.ci](https://pre-commit.ci/) is a bot that you can add to your "
+"GitHub repository. It will automagically apply code format to every PR "
+"using the tools specified in your pre-commit-config.yaml file. It can "
+"save significant time and make contributions easier for new contributors."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:11
+msgid ""
+"Automation is good! By making code quality tools care of your code, you "
+"can focus on structural and high values tasks."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:14
+msgid ""
+"Consistent code format and style is useful to both your package and "
+"across the scientific Python ecosystem because using similar formats "
+"makes code easier to read."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:18
+msgid ""
+"For instance, if you saw a sentence like this one without any spaces, or "
+"punctuation, it would take your brain longer to process it."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:25
+msgid ""
+"pyOpenSci peer review process requires that you to follow standard "
+"[Python PEP 8 format rules](https://peps.python.org/pep-0008/) as closely"
+" as you can."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:29
+msgid ""
+"pyOpenSci doesn't require you to use a specific code format tool. "
+"However, we do look for consistency and readability in code style. Below "
+"you will find a discussion of:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:33
+msgid "The benefits of using linters and code format tools in your workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:34
+msgid "Some commonly used tools in the scientific Python space"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:35
+msgid ""
+"Setting up pre-commit hooks and the pre-commit.ci bot to make using code "
+"format tools in daily workflows and in pull requests on GitHub easier."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:39
+msgid "Use a code format tool (or tools) to make your life easier"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:41
+msgid ""
+"We suggest that you use a code format tool, or a set of format tools, "
+"because manually applying all of the PEP 8 format specifications is both "
+"time consuming for maintainers and can be a road block for potential new "
+"contributors. Code formatters will automagically reformat your code for "
+"you, adhering to PEP 8 standards and applying consistent style decisions "
+"throughout."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:47
+msgid "Setting up a code format suite of tools will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:49
+msgid "Save you and your maintainer team time in fixing PEP 8 inconsistencies."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:50
+msgid "Ensure that format and style is consistent across your entire code-base."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:51
+msgid ""
+"Avoid lengthy discussions with contributors and other maintainers about "
+"personalized code format preferences during reviews."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:53
+msgid ""
+"Avoid pure visual edits in the code base so that code reviews focus on "
+"added value"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:55
+msgid ""
+"Many packages use a suite of tools to apply code format rules, taking the"
+" work out of manually implementing code format requirements."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:58
+msgid ""
+"Consistent code format across packages within the (scientific) Python "
+"ecosystem, will also broadly make code easier to scan, understand and "
+"contribute to."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:61
+msgid "Linting vs. format and style"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:63
+msgid "Before we dive in let's get a few definitions out of the way."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:65
+msgid "Code linting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:67
+msgid ""
+"A code linter is a tool that will review your code and identify errors or"
+" issues. A linter typically does not modify your code. It will tell you "
+"what the error is and on what line it was discovered. Flake8, discussed "
+"below, is an example of a commonly-used code linter."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:72
+msgid "Code formatters (and stylers)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:74
+msgid ""
+"Code formatters will reformat your code for you. Python focused code "
+"formatters often follow PEP 8 standards. However, they also make "
+"stylistic decisions about code consistency."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:78
+msgid ""
+"Black is an example of a commonly-used code formatter. Black both applies"
+" PEP 8 standards while also making decisions about things like consistent"
+" use of double quotes for strings, and spacing of items in lists."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:82
+msgid "You will learn more about Black below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:84
+msgid "Code linting, formatting and styling tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:87
+msgid "Black"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:89
+msgid ""
+"[Black](https://black.readthedocs.io/en/stable/) is a code formatter. "
+"Black will automagically (and _unapologetically_) fix spacing issues and "
+"ensure code format is consistent throughout your package. Black also "
+"generally adheres to PEP 8 style guidelines with some exceptions. A few "
+"examples of those exceptions are below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:95
+msgid ""
+"Black defaults to a line length of 88 (79 + 10%) rather than the 79 "
+"character `PEP 8` specification. However, line length is a setting can be"
+" manually overwritten in your Black configuration."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:96
+msgid "Black will not adjust line length in your comments or docstrings."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:97
+msgid ""
+"This tool will not review and fix import order (you need `isort` or "
+"`ruff` to do that - see below)."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:100
+msgid ""
+"If you are interested in seeing how Black will format your code, you can "
+"use the [Black playground](https://black.vercel.app/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:104
+msgid ""
+"Using a code formatter like Black will leave you more time to work on "
+"code function rather than worry about format."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:108
+msgid "Flake8"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:110
+msgid ""
+"To adhere to Python `pep8` format standards, you might want to add "
+"[flake8](https://flake8.pycqa.org/en/latest/) to your code format "
+"toolbox."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:114
+msgid "flake8 will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:116
+msgid ""
+"Flag every line in your code that extends beyond 79 characters (including"
+" those in docstrings and comments)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:117
+msgid ""
+"Flag spacing issues that conflict with PEP 8 guidelines such as missing "
+"spaces after commas"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:119
+msgid ""
+"Flake8 also flags unused imports and unused declared variables in your "
+"modules."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:122
+msgid ""
+"Below you can see the output of running `flake8 filename.py` at the "
+"command line for a Python file within a package called `stravalib`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:126
+msgid "The line length standard for PEP 8 is 79 characters."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:128
+msgid ""
+"Notice that flake8 returns a list of issues that it found in the model.py"
+" module on the command line. The Python file itself is not modified. "
+"Using this output, you can fix each issue line by line manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:143
+msgid "Isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:145
+msgid ""
+"Python imports refer to the Python packages that a module in your package"
+" requires. Imports should always be located at the top of each Python "
+"module in your package."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:149
+msgid ""
+"[PEP 8 has specific standards for the order of these "
+"imports](https://peps.python.org/pep-0008/#imports). These standards are "
+"listed below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:151
+msgid "Imports should be grouped in the following order:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:153
+msgid "Standard library imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:154
+msgid "Related third party imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:155
+msgid "Local application/library specific imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:157
+msgid ""
+"While `flake8` will identify unused imports in your code, it won't fix or"
+" identify issues with the order of package imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:160
+msgid ""
+"`isort` will identify where imports in your code are out of order. It "
+"will then modify your code, automatically reordering all imports. This "
+"leaves you with one less thing to think about when cleaning up your code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:165
+msgid "Example application of isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:167
+msgid "Code imports before `isort` is run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:169
+msgid ""
+"Below, the `pandas` is a third party package, `typing` is a core `Python`"
+" package distributed with `Python`, and `examplePy.temperature` is a "
+"first-party module which means it belongs to the same package as the file"
+" doing the import. Also notice that there are no spaces in the imports "
+"listed below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:179
+msgid "From the project root, run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:185
+msgid "Python file `temporal.py` imports after `isort` has been run"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:193
+msgid "Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:195
+msgid ""
+"[Ruff](https://docs.astral.sh/ruff/) is a new addition to the code "
+"quality ecosystem, gaining some traction since its release. `ruff` is "
+"both a linter and a code formatter for Python, aiming to replace several "
+"tools behind a single interface. As such, `ruff` can be used at a "
+"replacement of all other tools mentioned here, or in complement to some "
+"of them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:201
+msgid ""
+"`ruff` has some interesting features that distinguish it from other "
+"linters:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:203
+msgid "Linter configuration in `pyproject.toml`"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:204
+msgid "Several hundred rules included, many of which are automatically fixable"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:205
+msgid ""
+"Rules explanation, see [F403](https://docs.astral.sh/ruff/rules"
+"/undefined-local-with-import-star/) for an example"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:206
+msgid ""
+"Fast execution time, makes a quick feedback loop possible even on large "
+"projects."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:208
+msgid ""
+"Here is a simple configuration to get started with `ruff`. It would go "
+"into your `pyproject.toml`:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:216
+msgid ""
+"Depending on your project, you might want to add the following to sort "
+"imports correctly:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:224
+msgid "How to use code formatter in your local workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:226
+msgid "Linters, code formatters and your favorite coding tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:228
+msgid ""
+"Linters can be run as a command-line tool as shown above. They also can "
+"be run within your favorite coding tool (e.g. VScode, pycharm, etc). For "
+"example, you might prefer to have tools like Black and isort run when you"
+" save a file. In some editors you can also setup shortcuts that run your "
+"favorite code format tools on demand."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:234
+msgid "Use pre-commit hooks to run code formatters and linters on commits"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:236
+msgid "You can also setup a `pre-commit hook` in your Python package repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:238
+msgid ""
+"A pre-commit hook is a tool that allows an action (or actions) to be "
+"triggered when you apply a commit to your git repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:241
+msgid "Pre-commit hook example workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:243
+msgid "The precommit workflow looks like this: You type and run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:246
+msgid "`git commit -m \"message here\"` at the command line"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:248
+msgid ""
+"Once you hit return, pre-commit will run any tools that you have "
+"configured in a **.pre-commit-config.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:250
+msgid ""
+"If the tools configured in the pre-commit hook run successfully without "
+"making changes or finding errors in your code, the commit will be applied"
+" to the repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:254
+msgid ""
+"If the tools configured in the hook find errors in your files, the commit"
+" will NOT be applied to the repository. Remember from the discussion "
+"above that a code formatter like Black will run and reformat your code. A"
+" linter like _flake8_ will provide you with some output that details "
+"where there are syntax issues in your code. You will then need to fix "
+"those issues, manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:261
+msgid ""
+"Once all of the fixes are applied you can re-add (stage) the files to be "
+"commit. And re-run your commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:265
+msgid "Diagram showing the steps of a pre-commit workflow from left to right."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:267
+msgid ""
+"The pre-commit workflow begins with you adding files that have changes to"
+" be staged in git. Next, you'd run git commit. When you run git commit, "
+"the pre-commit hooks will then run. In this example, Black, the code "
+"formatter and flake8, a linter both run. If all of the files pass Black "
+"and flake8 checks, then your commit will be recorded. If they don't, the "
+"commit is canceled. You will have to fix any flake8 issues, and then re-"
+"add / stage the files to be committed. [_Image "
+"Source_](https://ljvmiranda921.github.io/notebook/2018/06/21/precommits-"
+"using-black-and-flake8/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:280
+msgid ""
+"If have a Python code-base and multiple maintainers actively working on "
+"the code, and you intend to run a tool like Black, be sure to coordinate "
+"across your team. An initial commit that applies Black to your entire "
+"package will likely change a significant amount of your code. This could "
+"lead to merge conflicts on open and new PR's before the new changes are "
+"merged."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:287
+msgid "General pre commit checks"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:289
+msgid ""
+"In addition to calling tools, Pre-commit also has a suite of [built in "
+"format hooks](https://github.com/pre-commit/pre-commit-hooks#hooks-"
+"available) that you can call. Some, such as `trailing-whitespace` can be "
+"also useful to add to your pre-commit workflow to ensure clean, "
+"streamlined code files."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:294
+msgid ""
+"An example pre-commit-config.yaml file is below with examples of how this"
+" is all setup."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:297
+msgid "Pre-commit.ci"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:299
+msgid ""
+"[Pre-commit.ci](https://pre-commit.ci) is a bot that may become your new "
+"best friend. This bot, when setup on a repo can be configured to do the "
+"following:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:302
+msgid "It will check every pull request using all of the pre-commit hook setting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:303
+msgid ""
+"If you wish, it will also submit a pull request to your repo with pre-"
+"commit fixes, saving you, and new contributors the time of reformatting a"
+" pr that has format issues."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:306
+msgid "You can also call the bot on any pull request to run / and fix the code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:308
+msgid ""
+"The pre-commit.ci bot uses the same pre-commit-config.yaml file that you "
+"use to setup pre-commit locally."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:311
+msgid "Setting up a bot like this can be valuable because:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:313
+msgid ""
+"It can make is easier for maintainers as they no longer have to worry at "
+"allows about fixing code format. The bot will do the work for them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:315
+msgid ""
+"It can make it easier for new comers as they never have to setup pre-"
+"commit locally or worry about linting their code. They can even make "
+"small fixes to the code directly on GitHub without worry."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:317
+msgid "Setting up a git pre-commit hook"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:319
+msgid "To setup pre-commit locally, you need to do 3 things:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:321
+msgid ""
+"Install pre-commit (and include it as a development requirement in your "
+"repository)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:331
+msgid ""
+"Create a .pre-commit-config.yaml file in the root of your package "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:333
+msgid ""
+"Below is an example **.pre-commit-cofig.yaml** file that can be used to "
+"setup the pre-commit hook and the pre-commit.ci bot if you chose to "
+"implement that too."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:341
+msgid ""
+"This file specifies a hook that will be triggered automatically before "
+"each `git commit`, in this case, it specifies a `flake8` using version "
+"`6.0.0`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:344
+msgid ""
+"Install your pre-commit hook(s) using `pre-commit install`. This will "
+"install all of the hooks specified in the pre-commit yaml file into your "
+"environment."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:346
+msgid ""
+"Once you have done the above, you are ready to start working on your "
+"code. Pre-commit will run every time you run `git commit`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:349
+msgid "Summary"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:351
+msgid ""
+"pyOpenSci suggests setting up a linter and a code styler for your "
+"package, regardless of whether you use pre-commit hooks, CI or other "
+"infrastructure to manage code format. Setting up these tools will give "
+"you automatic feedback about your code's structure as you (or a "
+"contributor) write it. And using a tool like black that format code for "
+"you, reduce effort that you need to make surrounding decisions around "
+"code format and style."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:1
+msgid "Complex Python package builds"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:3
+msgid ""
+"This guide is focused on packages that are either pure-python or that "
+"have a few simple extensions in another language such as C or C++."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:6
+msgid ""
+"For comprehensive guidance on packaging compiled projects with "
+"C/C++/Fortran/Rust extensions, see the [Scientific Python Development "
+"Guide on compiled packaging](https://learn.scientific-"
+"python.org/development/guides/packaging-compiled/). This is the best "
+"reference for complex builds and covers scikit-build-core, meson-python, "
+"maturin, and other modern build backends."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:8
+msgid ""
+"If you have questions about these types of package, please open an [issue"
+" about this guide specifically in the GitHub repo for this "
+"guide](https://github.com/pyOpenSci/python-package-guide/issues). There "
+"are many nuances to building and distributing Python packages that have "
+"compiled extensions requiring non-Python dependencies at build time. For "
+"an overview and thorough discussion of these nuances, please see [this "
+"site.](https://pypackaging-native.github.io/)"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:10
+msgid "Pure Python packages vs. packages with extensions in other languages"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:12
+msgid ""
+"You can classify Python package complexity into three general categories."
+" These categories can in turn help you select the correct package "
+"frontend and backend tools."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:16
+msgid ""
+"**Pure-python packages:** these are packages that only rely on Python to "
+"function. Building a pure Python package is simpler. As such, you can "
+"chose a tool below that has the features that you want and be done with "
+"your decision!"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:18
+msgid ""
+"**Python packages with non-Python extensions:** These packages have "
+"additional components called extensions written in other languages (such "
+"as C or C++). If you have a package with non-Python extensions, then you "
+"need to select a build backend tool that allows additional build steps "
+"needed to compile your extension code. Further, if you wish to use a "
+"frontend tool to support your workflow, you will need to select a tool "
+"that supports additional build setups. We suggest that you chose build "
+"tool that supports custom build steps like Hatch."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:20
+msgid ""
+"**Python packages that have extensions written in different languages "
+"(e.g. Fortran and C++) or that have non Python dependencies that are "
+"difficult to install (e.g. GDAL):** These packages often have complex "
+"build steps (more complex than a package with just a few C extensions for"
+" instance). As such, these packages require tools such as [scikit-"
+"build](https://scikit-build.readthedocs.io/en/latest/) or [meson-"
+"python](https://mesonbuild.com/Python-module.html) to build. NOTE: you "
+"can use meson-python with PDM."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:23
+msgid "Mixing frontend and backend projects"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:25
+msgid ""
+"It is sometimes necessary or desirable to use a build frontend with an "
+"alternative build-backend. This is because some frontends do not have a "
+"default backend (`build`), and this choice is placed on the maintainer. "
+"Other backends (`hatch`) have a preferred backend (`hatchling`) but allow"
+" the maintainer to migrate to another, while some backends (`poetry`) "
+"only work with a single backend (`poetry-core`). Refer to (#python-"
+"package-build-tools) for more information about frontend and backend "
+"compatibility."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:31
+msgid ""
+"In this packaging guide we recommend using `hatch` along with its "
+"preferred backend `hatchling`. While this will be suitable for most "
+"packages, an alternate backend may be used with Hatch if needed when "
+"creating an extension module. A Python extension module is one that is "
+"made up, either in part or entirely, of compiled code. In this case the "
+"backend chosen (such as `meson-python`) must know how to compile the "
+"extension language and bind it to Python. `hatchling` does not know how "
+"to do this all on its own and must either make use of "
+"[plugins](https://hatch.pypa.io/1.9/plugins/about/) or be replaced by a "
+"backend that is already capable of building extension modules."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:39
+msgid ""
+"In order to use a different backend you will need to edit your project's "
+"`pyproject.toml`. If you have a `pyproject.toml` generated by the `hatch`"
+" command, or from following the packaging tutorial, you may have to make "
+"a change like this"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:6
+msgid "Dependencies for your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:8
+msgid ""
+"In the [pyproject.toml overview page](pyproject-toml-python-package-"
+"metadata), you learned how to set up a **pyproject.toml** file with basic"
+" metadata for your package. On this page, you will learn how to specify "
+"different types of dependencies in your `pyproject.toml`."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:14
+msgid "What is a package dependency?"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:16
+msgid ""
+"A Python package dependency refers to an external package or A tool that "
+"is needed when using or working on your Python project. Declare your "
+"dependencies in your `pyproject.toml` file. This keeps all package "
+"metadata in one place, making it simpler for users and contributors to "
+"understand your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:19
+msgid "Older ways to declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:22
+msgid ""
+"While `pyproject.toml` is now the standard, you may sometimes encounter "
+"older approaches to storing dependencies \"in the wild\":"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:24
+msgid ""
+"**requirements.txt**: Previously common for dependencies, still used by "
+"some projects for local development"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:25
+msgid ""
+"**setup.py or setup.cfg**: May be needed for packages with extensions in "
+"other languages"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:27
+msgid ""
+"[Learn more in the setuptools "
+"documentation](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html"
+"#declaring-required-dependency)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:30
+msgid "Why specify dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:32
+msgid ""
+"Specifying dependencies in the `project.dependencies` array of your "
+"`pyproject.toml` file ensures that libraries needed to run your package "
+"are correctly installed into a user's environment. For instance, if your "
+"package requires Pandas to run properly, and you add Pandas to the "
+"`project.dependencies` array, Pandas will be installed into the users' "
+"environment when they install your package using uv, pip, or conda."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:45
+msgid ""
+"Development dependencies make it easier for contributors to work on your "
+"package. You can set up instructions for running specific workflows, such"
+" as tests, linting, and even typing, that automatically install groups of"
+" development dependencies. These dependencies can be stored in arrays "
+"(lists of dependencies) within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:55
+msgid "Types of dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:57
+msgid ""
+"There are three different types of dependencies that you will learn about"
+" on this page:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:59
+msgid ""
+"**Required dependencies:** These are dependencies that need to be "
+"installed for your package to work correctly in a user's environment. You"
+" add these dependencies to the `project.dependencies` table in your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:60
+msgid ""
+"**Feature Dependencies:** These are dependencies that are required if a "
+"user wants to access additional functionality (that is not core) to your "
+"package. Store these in the `[project.optional-dependencies]` table or "
+"your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:61
+msgid ""
+"**Development Dependencies:** These dependencies are required if someone "
+"wants to develop or work on your package. These include instance linters,"
+" testing tools like pytest and mypy are examples of development "
+"dependencies. Store these in the `[dependency-groups]` table of your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:64
+msgid ""
+"A dependency is not part of your project's codebase. It is a package or "
+"software called within the code of your project or used during the "
+"development of your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:69
+msgid "1. Required dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:71
+msgid ""
+"Required dependencies are imported and called directly within your "
+"package's code. They are needed for your package to run."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:74
+msgid ""
+"You can add your required dependencies to the `dependencies` array in the"
+" `[project]` table of your **pyproject.toml** file. When users install "
+"your package with uv, pip, or conda, these dependencies will be "
+"automatically installed alongside your package in their environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:92
+msgid ""
+"Try your best to minimize dependencies whenever possible. Remember that "
+"fewer dependencies reduce the possibility of version conflicts in user "
+"environments."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add Required Dependencies with UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:102
+#: ../../package-structure-code/declare-dependencies.md:162
+#: ../../package-structure-code/declare-dependencies.md:222
+msgid "You can use uv to add dependencies to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:104
+msgid "**Add a required dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:110
+msgid "Will add numpy as a dependency to your `project.dependencies` array:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:121
+msgid "Requiring packages from GitHub / Gitlab"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:124
+msgid ""
+"If you have dependencies that need to be installed directly from GitHub, "
+"you can specify them in your pyproject.toml file like this:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:133
+msgid ""
+"IMPORTANT: If your library depends on a GitHub-hosted project, you should"
+" point to a specific commit/tag/hash of that repository before you upload"
+" your project to PyPI. You never know how the project might change over "
+"time. Commit hashes are more reliable as they can't be changed"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:140
+msgid "2. Optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:142
+msgid ""
+"Optional (also referred to as feature) dependencies can be installed by "
+"users as needed. Optional dependencies add specific features to your "
+"package that not all users need. For example, if your package has an "
+"optional interactive plotting feature that uses Bokeh, you would list "
+"Bokeh under `[project.optional-dependencies]`. Users who want interactive"
+" plotting will install it. Users who don't need plotting don't have to "
+"install it."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:144
+msgid "Place these dependencies in the `[project.optional-dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:155
+msgid ""
+"When a user installs your package, uv, pip, or conda automatically "
+"installs all required dependencies. Optional dependencies are only "
+"installed if the user explicitly requests them."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add optional dependencies using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:164
+msgid "**Add an optional dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:170
+msgid "Will add this to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:181
+msgid "3. Dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:183
+msgid ""
+"Development dependencies include packages needed to work on your package "
+"locally. They are used to perform tasks such as:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:186
+msgid "running your test suite (pytest, pytest-cov)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:187
+msgid "building your documentation (sphinx, sphinx-theme packages)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:188
+msgid "linting and formatting code (ruff, black)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:189
+msgid "building package distribution files (build, twine)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:191
+msgid ""
+"Dependency groups are optional because they are not required for users to"
+" install and use your package. However, they will make it easier for "
+"contributors to your project to setup development environments locally."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:196
+msgid "New: PEP 735 dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:199
+msgid ""
+"`[dependency-groups]` is a newer specification introduced by PEP 735. "
+"They are intended to organize development dependencies and are "
+"intentionally separate from `[project.optional-dependencies]`, which can"
+" be installed into a user's environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:203
+msgid "How to declare dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:205
+msgid ""
+"You declare development dependencies in your **pyproject.toml** file "
+"within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:208
+msgid ""
+"Similar to optional-dependencies, you can create separate subgroups or "
+"arrays with names using the syntax: `group-name = [\"dep1\", \"dep2\"]`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add [dependency-groups] using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:224
+msgid "**Add a development dependency group:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:231
+msgid "Will add the following to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:244
+#: ../../package-structure-code/declare-dependencies.md:250
+#: ../../package-structure-code/declare-dependencies.md:294
+#: ../../package-structure-code/declare-dependencies.md:413
+#: ../../package-structure-code/declare-dependencies.md:495
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:14
+msgid "Todo"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:245
+msgid ""
+"i'll pick back up here tomorrow - this section is all about how things "
+"install and what \"ships\" with your package vs what just gets installed "
+"via commands (ie development)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:248
+msgid "Understanding required vs. optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:251
+msgid ""
+"The purpose of this section is to help users understand how dependencies "
+"relate to what is installed in their environment. We have two graphics on"
+" this page - one that breaks out the two buckets of tools (required and "
+"optional) that both get installed into a user's envt vs development "
+"groups, which are contributor/ development facing, not user-facing. When "
+"we originally wrote this section, development groups didn't exist, and we"
+" were using optional dependencies for dev groups."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:253
+msgid ""
+"The graphic below is two circles representing optional vs regular / "
+"required deps - created before development groups existed... there is "
+"another graphi that shows what gets installed into a uses envt."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:257
+msgid ""
+"Diagram showing two main groups of Python package dependencies: required "
+"and optional. Required dependencies include core packages needed to use "
+"your package. Optional dependencies include development dependencies for "
+"working on the package locally and feature dependencies for additional "
+"functionality."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:259
+msgid ""
+"Python package dependencies fall into two categories: **required** "
+"dependencies that users need to run your package, and **optional** "
+"dependencies for development work or additional features."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:264
+msgid "Additional dependency resources"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:266
+msgid ""
+"[Learn more: View PyPA's overview of declaring optional "
+"dependencies](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/#dependencies-optional-dependencies)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:267
+msgid ""
+"[Dependency "
+"specifiers](https://packaging.python.org/en/latest/specifications"
+"/dependency-specifiers/)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:271
+msgid "Install dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:273
+msgid ""
+"When someone installs your package, only core dependencies are installed "
+"by default. To install optional dependencies, you need to specify which "
+"groups to include when installing the package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:279
+msgid ""
+"Diagram showing a Venn diagram with three sections representing "
+"dependency groups - docs, feature, and tests. In the center it shows "
+"your-package with core dependencies seaborn and numpy. Two arrows on the "
+"right demonstrate: first, python -m pip install your-package installs "
+"only the package and core dependencies. Second, python -m pip install "
+"your-package[tests] installs the package, core dependencies, and test "
+"dependencies including pytest and pytest-cov."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:281
+msgid ""
+"When a user installs your package using `pip install your-package`, only "
+"your package and its core dependencies get installed. When they install "
+"with `pip install your-package[tests]`, pip will install your package, "
+"core dependencies, and the test dependencies from the `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:288
+msgid "Using uv or pip for installation"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:290
+msgid ""
+"UV streamlines this process, allowing you to sync a venv in your project "
+"directory with both an editable install of your package and its "
+"dependencies automatically. You can also use pip and install dependencies"
+" into the environment of your choice."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:295
+msgid ""
+"We shouldn't show UV pip install, so how do you add optional feature deps"
+" with UV??"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:298
+#: ../../package-structure-code/declare-dependencies.md:340
+msgid "**Install dependency groups:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:304
+msgid "You can use uv sync to sync dependency groups in your uv-managed venv"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:312
+#: ../../package-structure-code/declare-dependencies.md:333
+msgid "**Install optional dependencies:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:320
+msgid "**Install everything (package + all dependencies):**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:326
+msgid ""
+"`uv sync` is the recommended command for development workflows. It "
+"manages your virtual environment and keeps your lockfile up to date. Use "
+"`uv pip install` when you need pip-compatible behavior."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use pip (version >=25.1)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:347
+msgid ""
+"Always call pip using `python -m pip` to ensure you're using the pip from"
+" your current active Python environment. This helps avoid installation "
+"conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:351
+msgid ""
+"**Note:** Some shells (like zsh on Mac) require quotes around brackets to"
+" run successfully:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:353
+msgid "`python -m pip install \".[tests]\"`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:359
+msgid "Combining dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:361
+msgid "You can also create combined groups that reference other groups:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:370
+msgid "Then install everything with pip install or uv sync as needed:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:379
+msgid ""
+"When you install optional dependencies, pip and uv install your package "
+"and its core dependencies automatically."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:383
+msgid "Version specifiers for dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:385
+msgid ""
+"Version specifiers control which versions of a dependency work with your "
+"package. Use them to specify minimum versions, exclude buggy releases, or"
+" set version ranges."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:389
+msgid "Common operators"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:391
+msgid ""
+"**`>=`** Minimum version set: `numpy>=1.20` (This is the most common "
+"approach and is recommended)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:392
+msgid ""
+"**`==`** Exact version: `requests==2.28.0` (Avoid pinning dependencies "
+"like this unless necessary)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:393
+msgid ""
+"**`~=`** Compatible release: `django~=4.2.0` (Allows patches: "
+">=4.2.0,<4.3.0)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:394
+msgid "**`<` or `>`** - Upper/lower bounds: `pandas>=1.0,<3.0`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:395
+msgid ""
+"**`!=`** Exclude version: `scipy>=1.7,!=1.8.0` (Rare but allows you to "
+"skip a buggy release version)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:398
+msgid ""
+"**Best practice:** Use `>=` to specify your minimum tested version and "
+"avoid upper bounds unless you know at what version that dependency is no "
+"longer compatible. UV will do this by default when it adds a dependency "
+"to your pyproject.toml file. This keeps your package flexible and reduces"
+" dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:414
+msgid "Using conda and Pixi"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:418
+msgid ""
+"The `pyproject.toml` file works great for pure-Python packages. However, "
+"some packages (particularly in the scientific Python ecosystem) require "
+"dependencies written in other languages like C or Fortran. Conda was "
+"created to support the distribution of tools with non-Python "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:423
+msgid "**For conda users:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:425
+msgid ""
+"You can maintain an `environment.yml` file to help users and contributors"
+" set up conda environments. This is especially useful for packages with "
+"system-level dependencies like GDAL."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:429
+msgid "**Consider Pixi for conda package focused workflows:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:431
+msgid ""
+"[Pixi](https://pixi.sh) is a modern package manager built on top of both "
+"the conda and Python package ecosystems. Pixi is able to treat conda and "
+"Python package requirements with parity when resolving environments, but "
+"uses a \"conda-first\" approach of using already resolved conda packages "
+"if possible when resolving Python dependencies. Pixi [can also use "
+"`pyproject.toml` for "
+"configuration](https://pixi.sh/latest/python/pyproject_toml/). If your "
+"project relies heavily on conda packages, Pixi offers a streamlined "
+"workflow with faster dependency resolution and automatic lock file "
+"support for full environment reproducibility. If you already have an "
+"existing conda environment definition file, like an `environment.yml`, "
+"you can [import the "
+"environment](https://pixi.sh/latest/tutorials/import/) into a new Pixi "
+"workspace with"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:449
+msgid "A note for conda users"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:452
+msgid ""
+"If you use a conda environment for development and install your package "
+"with `python -m pip install -e .` dependencies will be installed from "
+"PyPI, potentially overwriting conda packages that had already been "
+"installed. This can cause conflicts, especially for packages with system "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:457
+msgid "To avoid this, install your package without dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:463
+msgid "Then install dependencies through your conda `environment.yml` file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:466
+msgid "Dependencies in Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:468
+msgid ""
+"Once you've specified dependencies in your `pyproject.toml`, you can use "
+"them in other workflows like building documentation on Read the Docs."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:471
+msgid ""
+"[Read the Docs](https://readthedocs.org) is a documentation platform that"
+" automatically builds and publishes your documentation. To install your "
+"dependencies during the build process, configure them in a "
+"**readthedocs.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:476
+msgid "Here's an example that installs your `docs` optional dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:487
+msgid "Learn more about Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:490
+msgid ""
+"[Creating a readthedocs.yaml file](https://docs.readthedocs.io/en/stable"
+"/config-file/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:491
+msgid ""
+"[Using uv with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:492
+msgid ""
+"[Using Poetry with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html#install-dependencies-with-poetry)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:497
+msgid ""
+"Keep this comment - in this file for now - Jeremiah "
+"did a nice inventory of common shells and whether they need quotes or "
+"not. It's really comprehensive. But do we want it in the guide?? It's "
+"really useful for more advanced users."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:499
+msgid ""
+"Following this comment: "
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:502
+msgid "Jonny will add a section that talks about:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:504
+msgid ""
+"Why you specify dependencies How to specify dependencies When you use "
+"different specifiers"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Intro"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Python package structure"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "pyproject.toml Package Metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Package Build Tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Complex Builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Create & Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish with Conda / PyPI"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Package versions"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Code style"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish your package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:1
+msgid "Python Package Structure & Code"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:3
+msgid ""
+"This section covers everything you need to structure your Python package,"
+" configure metadata, choose build tools, and publish your package to PyPI"
+" and conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:9
+msgid "New to Python packaging?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:13
+msgid "**Start with our step-by-step tutorials:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:15
+msgid "Follow along as we create a package from scratch"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:16
+msgid "Learn by doing with guided examples"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:17
+msgid "Perfect for your first package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:19
+msgid "Start the tutorial series"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:27
+msgid "Already have code to package?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:30
+msgid "**Jump into the reference guides:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:32
+msgid "Learn about package structure and metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:33
+msgid "Compare build tools and choose what's right for you"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:34
+msgid "Understand the publishing process"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:36
+msgid "Start with the cards below ↓"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:40
+msgid "How this content is developed"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:43
+msgid ""
+"All of the content in this guide has been vetted by community members, "
+"including maintainers and developers of the core packaging tools."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:46
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:48
+msgid "In this section, you'll learn how to:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:50
+msgid ""
+"**Structure your package** - Choose between src and flat layouts, "
+"organize tests and documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:51
+msgid ""
+"**Configure metadata** - Set up `pyproject.toml` with project "
+"information, dependencies, and versioning"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:52
+msgid ""
+"**Choose build tools** - Compare Hatch, PDM, Poetry, and setuptools to "
+"find the right fit"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:53
+msgid ""
+"**Build distributions** - Create sdist and wheel files ready for "
+"publication"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:54
+msgid ""
+"**Publish your package** - Make your package available on PyPI and "
+"optionally conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:55
+msgid ""
+"**Maintain code quality** - Set up linters and formatters to keep your "
+"code consistent"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:57
+msgid ""
+"Our recommendations align with current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/), while "
+"prioritizing tools that are beginner-friendly and well-maintained."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:59
+msgid "Package setup"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:66
+msgid "✨ Package file structure ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:68
+msgid ""
+"Learn how to organize your package files using [src or flat layouts"
+"](package-source-layout). This page helps you decide on a package "
+"structure that follows modern Python best practices, including where to "
+"place [tests](src-layout-test) and [documentation](package-source-"
+"layout)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:71
+msgid "✨ Add metadata ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:73
+msgid ""
+"Learn how to add [project metadata](pyproject-toml-python-package-"
+"metadata) to your Python package to support both filtering on PyPI and "
+"also the metadata that a package installer needs to build and install "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:78
+msgid "✨ Declare dependencies ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:80
+msgid ""
+"Learn how to specify [required dependencies](required-dependencies), "
+"[optional feature dependencies](optional-dependencies), and [development "
+"dependencies](dependency-groups) in your [pyproject.toml file](pyproject-"
+"toml-overview)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:83
+msgid "✨ Setup package versioning ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:85
+msgid ""
+"Learn how to manage package versions using [semantic versioning (SemVer"
+")](package-versioning) or [calendar versioning (CalVer)](package-"
+"versioning). This page helps you choose the right versioning strategy and"
+" set up [automated version management](tools-version-management) using "
+"tools like hatch_vcs or setuptools-scm."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:89
+msgid "Development practices"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:96
+msgid "✨ Code style & linters ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:98
+msgid ""
+"Learn how to set up [code formatters and linters](code-style-tools) "
+"([Black](about-black), [Ruff](about-ruff), [flake8](about-flake8)) to "
+"ensure your package follows [PEP 8 standards](code-style-tools) and "
+"maintains consistent code style throughout your project."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:102
+msgid "Build & publish"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:109
+msgid "✨ Choose your build tool ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:111
+msgid ""
+"Learn how to choose the right packaging tool for your project. Compare "
+"[Hatch](about-hatch), [PDM](about-pdm), [Poetry](about-poetry), and "
+"[setuptools](about-setuptools) to find the best fit for your workflow. "
+"See the [summary comparison](summary-build-tools) to help decide."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:114
+msgid "✨ Build your package ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:116
+msgid ""
+"Learn how to build your Python package into [distribution files](build-"
+"package) ([sdist](python-source-distribution) and [wheel](python-wheel)) "
+"that can be published on [PyPI](publish-pypi-conda)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:119
+msgid "✨ Publish to PyPI and Conda ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:121
+msgid ""
+"Learn how to publish your package to [PyPI](publish-pypi-conda) and "
+"optionally to [conda-forge](how-to-submit-to-conda-forge). This page "
+"covers the complete process for making your package available to users, "
+"including the [conda-forge submission process](how-to-submit-to-conda-"
+"forge) after publishing to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:125
+msgid "Choosing the right tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:127
+msgid ""
+"Not sure which build tool to use? This decision tree can help you choose "
+"based on your package's needs:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:131
+msgid ""
+"Figure showing a decision tree with the various packaging tool front-end "
+"and back-end options."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:133
+msgid ""
+"Use this decision tree to help select a packaging tool. See the "
+"[packaging tools page](python-package-build-tools) for detailed "
+"comparisons and recommendations."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:136
+msgid "Our recommendations"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:138
+msgid "We suggest tools and approaches based on three principles:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:140
+msgid ""
+"**Beginner-friendly** - Tools that are easy to learn and use for those "
+"new to packaging"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:141
+msgid "**Well-maintained** - Tools with active development and good documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:142
+msgid ""
+"**Standards-aligned** - Tools that follow current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/)"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:144
+msgid "Pure Python vs. complex builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:146
+msgid ""
+"**Pure Python packages** can use any modern tool (Hatch, PDM, Poetry, "
+"Flit) - choose based on the features you want"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:147
+msgid ""
+"**Packages with C/C++ extensions** may need additional build steps. See "
+"our [complex builds page](complex-python-package-builds) for guidance. "
+"For comprehensive information on packaging compiled projects, see the "
+"[Scientific Python Development Guide on compiled packaging](https://learn"
+".scientific-python.org/development/guides/packaging-compiled/)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:149
+msgid ""
+"Most scientific Python packages start simple and can evolve to handle "
+"more complex requirements as needed."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:151
+msgid "Submitting your package for peer review?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:153
+msgid ""
+"If you're planning to submit your package to pyOpenSci for [peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), check "
+"out our [editor checklist](https://www.pyopensci.org/software-peer-review"
+"/how-to/editor-in-chief-guide.html#editor-checklist-template) for the "
+"minimum requirements. These checks are useful for anyone creating a "
+"Python package, not just those submitting for review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:155
+msgid "These are recommendations, not requirements"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:158
+msgid ""
+"The suggestions in this guide are designed to help you create a well-"
+"structured package. They are **not** specific requirements for pyOpenSci "
+"peer review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:160
+msgid ""
+"If you're submitting to pyOpenSci, see our [package "
+"scope](https://www.pyopensci.org/software-peer-review/about/package-"
+"scope.html) and [author guide](https://www.pyopensci.org/software-peer-"
+"review/how-to/author-guide.html#) for actual review requirements."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:1
+msgid "Publishing Your Package In A Community Repository: PyPI or Anaconda.org"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:5
+msgid ""
+"pyOpenSci requires that your package has an distribution that can be "
+"installed from a public community repository such as PyPI or a conda "
+"channel such as `bioconda` or `conda-forge` on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:9
+msgid ""
+"Below you will learn more about the various publishing options for your "
+"Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:14
+msgid ""
+"Installing packages in the same environment using both pip and conda can "
+"lead to package conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:16
+msgid ""
+"To minimize conflicts for users who may be using conda (or pip) to manage"
+" local environments, consider publishing your package to both PyPI and "
+"the conda-forge channel on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:18
+msgid ""
+"Below you will learn more specifics about the differences between PyPI "
+"and conda publishing of your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:23
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:6
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:25
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires a source distribution on PyPI in order to build"
+" your package on conda-forge. You do not need to rebuild your package to "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:29
+msgid "What is PyPI"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:31
+msgid ""
+"[PyPI](https://pypi.org/) is an online Python package repository that you"
+" can use to both find and install and publish your Python package. There "
+"is also a test PyPI repository where you can test publishing your package"
+" prior to the final publication on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:36
+msgid ""
+"Many if not most Python packages can be found on PyPI and are thus "
+"installable using `pip`."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:38
+msgid ""
+"The biggest different between using pip and conda to install a package is"
+" that conda can install any package regardless of the language(s) that it"
+" is written in. Whereas `pip` can only install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:43
+msgid "Click here for a tutorial on publishing your package to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:51
+msgid ""
+"On the package build page, we discussed the [two package distribution "
+"types that you will create when making a Python package](python-package-"
+"distribution-files-sdist-wheel): SDist (packaged as a .tar.gz or .zip) "
+"and Wheel (.whl) which is really a zip file. Both of those file "
+"\"bundles\" will be published on PyPI when you use [a standard build tool"
+"](python-package-build-tools) to build your package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:59
+msgid "What is conda and Anaconda.org?"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:61
+msgid ""
+"conda is an open source package and environment management tool. conda "
+"can be used to install tools from the [Anaconda "
+"repository](https://repo.anaconda.com/)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:65
+msgid ""
+"Anaconda.org contains public and private repositories for packages. These"
+" repositories are known as channels (discussed below)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:68
+msgid "A brief history of conda's evolution"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:71
+msgid ""
+"The conda ecosystem evolved years ago to provide support for, and "
+"simplify the process of, managing software dependencies in scientific "
+"Python projects."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:75
+msgid ""
+"Many of the core scientific Python projects depend upon or wrap around "
+"tools and extensions that are written in other languages, such as C++. In"
+" the early stages of the scientific ecosystem's development, these non-"
+"Python extensions and tools were not well supported on PyPI, making "
+"publication difficult. In recent years there is more support for complex "
+"builds that allow developers to bundle non-Python code into a Python "
+"distribution using the [wheel distribution format](python-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:77
+msgid ""
+"Conda provides a mechanism to manage these dependencies and ensure that "
+"the required packages are installed correctly."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:81
+msgid ""
+"While conda was originally created to support Python packages, it is now "
+"used across all languages. This cross-language support makes it easier "
+"for some packages to include and have access to tools written in other "
+"languages, such as C/C++ (gdal), Julia, or R. Creating an environment "
+"that mixes all of these packages is usually easier and more consistent "
+"with full-fledged package managers like conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:89
+msgid "conda channels"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:91
+msgid ""
+"conda built packages are housed within repositories that are called "
+"channels. The conda package manager can install packages from different "
+"channels."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:94
+msgid ""
+"There are several core public channels that most people use to install "
+"packages using conda, including:"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:97
+msgid ""
+"**defaults:** this is a channel managed by Anaconda. It is the version of"
+" the Python packages that you will install if you install the Anaconda "
+"Distribution. Anaconda (the company) decides what packages live on the "
+"`defaults` channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:98
+msgid ""
+"[**conda-forge:**](https://conda-forge.org/) this is a community-driven "
+"channel that focuses on scientific packages. This channel is ideal for "
+"tools that support geospatial data. Anyone can publish a package to this "
+"channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:99
+msgid ""
+"[**bioconda**](https://bioconda.github.io/): this channel focuses on "
+"biomedical tools."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:101
+msgid ""
+"**conda-forge** emerged as many of the scientific packages did not exist "
+"in the `defaults` Anaconda channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:106
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"Anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI. And test PyPI. A "
+"testbed server for you to practice."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:108
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:111
+msgid "conda channels, PyPI, conda, pip - Where to publish your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:113
+msgid ""
+"You might be wondering why there are different package repositories that "
+"can be used to install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:116
+msgid ""
+"And more importantly you are likely wondering how to pick the right "
+"repository to publish your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:119
+msgid "The answer to both questions relates dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:123
+msgid ""
+"Image showing an XKCD comic that shows a web of Python environments and "
+"tools and installations. At the bottom is says - My python environment "
+"has become so degraded that my laptop has been declared a superfund site."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:125
+msgid ""
+"Installing Python and Python packages from different repositories can "
+"lead to environment conflicts where a version of on package doesn't work "
+"with a version of another package. To keep your environments clean and "
+"working, it's best to install packages from the same repository. So use "
+"pip to install everything. Or use conda. If you can, try to avoid "
+"installing package from both pip and conda into the same environment."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:133
+msgid "Managing Python package dependency conflicts"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:135
+msgid ""
+"Python environments can encounter conflicts because Python tools can be "
+"installed from different repositories. Broadly speaking, Python "
+"environments have a smaller chance of dependency conflicts when the tools"
+" are installed from the same package repository. Thus environments that "
+"contain packages installed from both pip and conda are more likely to "
+"yield dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:142
+msgid ""
+"Similarly installing packages from the default anaconda channel mixed "
+"with the conda-forge channel can also lead to dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:144
+msgid ""
+"Many install packages directly from conda `defaults` channel. However, "
+"because this channel is managed by Anaconda, the packages available on it"
+" are limited to those that Anaconda decides should be core to a stable "
+"installation. The conda-forge channel was created to complement the "
+"`defaults` channel. It allows anyone to submit a package to be published "
+"in the channel . Thus, `conda-forge` channel ensures that a broad suite "
+"of user-developed community packages can be installed from conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:148
+msgid ""
+"Take-aways: If you can, publish on both PyPI and conda-forge to "
+"accommodate more users of your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:150
+msgid ""
+"The take-away here for maintainers is that if you anticipate users "
+"wanting to use conda to manage their local environments (which many do), "
+"you should consider publishing to both PyPI and the conda-forge channel "
+"(_more on that below_)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:155
+msgid "Additional resources"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:157
+msgid ""
+"[learn more about why conda-forge was created, here](https://conda-"
+"forge.org/docs/user/introduction.html)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:159
+msgid ""
+"[To learn more about conda terminology, check out their "
+"glossary.](https://docs.conda.io/projects/conda/en/latest/glossary.html )"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:165
+msgid "How to submit to conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:167
+msgid ""
+"While pyOpenSci doesn't require you to add your package to conda-forge, "
+"we encourage you to consider doing so!"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:170
+msgid ""
+"Once your package is on PyPI, the process to add your package to conda-"
+"forge is straight forward to do. [You can follow the detailed steps "
+"provided by the conda-forge maintainer team.](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:174
+msgid "Click here for a tutorial on adding your package to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:181
+msgid "If you want a step by step tutorial, click here."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:183
+msgid ""
+"Once your package is added, you will have a feedstock repository on "
+"GitHub with your packages name"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:186
+msgid ""
+"[Here is an example conda-forge feedstock for the pyOpenSci approved "
+"package - movingpandas](https://github.com/conda-forge/movingpandas-"
+"feedstock)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:189
+msgid "Maintaining your conda-forge package repository"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:191
+msgid ""
+"Once your package is on the conda-forge channel, maintaining it is "
+"simple. Every time that you push a new version of your package to PyPI, "
+"it will kick off a continuous integration build that updates your package"
+" in the conda-forge repository. Once that build is complete, you will get"
+" a notification to review the update."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:197
+msgid ""
+"You can merge the pull request for that update once you are happy with "
+"it. A ready-to-merge PR usually means ensuring that your project's "
+"dependencies (known as runtime requirements) listed in the updated YAML "
+"file found in the pull request match the PyPI metadata of the new "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:2
+msgid "Use a pyproject.toml file for your package configuration & metadata"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:4
+msgid "pyproject.toml takeaways"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:6
+msgid ""
+"There are only two tables that are required for an installable Python "
+"package: **[build-system]** and **[project]**. The **[project]** table "
+"stores your package's metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:7
+msgid ""
+"There are two _required_ fields in the **[project]** table: **name=** and"
+" **version=**."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:8
+msgid ""
+"Add metadata to the classifiers section of your `pyproject.toml` file to "
+"make it easier for users to find your project on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:9
+msgid ""
+"When you are adding classifiers to the [project] table, only use valid "
+"values from [PyPI’s classifier page](https://PyPI.org/classifiers/). An "
+"invalid value here will raise an error when you build your package or "
+"publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:10
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However fields need to be placed within the correct table sections. For "
+"example `requires =` always need to be associated with the **[build-"
+"system]** table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:16
+msgid "when these are published, remove this todo"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:25
+msgid ""
+"Need help creating your pyproject.toml file? This tutorial will walk you"
+" through the process."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:39
+msgid ""
+"Click here if need help migrating from setup.py/setup.cfg to "
+"pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:50
+msgid "About the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:52
+msgid ""
+"Every modern Python package should include a `pyproject.toml` file. For "
+"pure Python packages, this file replaces the `setup.py` and/or "
+"`setup.cfg` file to describe project metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:54
+msgid ""
+"If your project isn’t pure Python, you might still require a `setup.py` "
+"file to build the non-Python extensions. However, a `pyproject.toml` file"
+" should still be used to store your project’s metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:56
+msgid "Tutorial"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:59
+msgid ""
+"If you are migrating from a **setup.py** or **setup.cfg** file, and want "
+"help, [check out this tutorial.](migrate-pyproj) [specify build "
+"requirements and metadata is called a "
+"**pyproject.toml**](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:64
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:66
+msgid ""
+"The **pyproject.toml** file is written in [TOML (Tom's Obvious, Minimal "
+"Language) format](https://toml.io/en/). TOML is an easy-to-read structure"
+" based on key/value pairs. Each section in the **pyproject.toml** file "
+"contains a `[table identifier]`. Below that table identifier are "
+"key/value pairs that support configuration for that particular table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:70
+msgid "Below `[build-system]` is considered a table in the toml language."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:71
+msgid "Within the `build-system` table, `requires =` is a key."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:72
+msgid ""
+"The associated value for `requires` is an array containing the value "
+"`\"hatchling\"`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:80
+msgid "How the pyproject.toml is used when you build a package"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:84
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let’s have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:86
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:82
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:91
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:87
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:96
+msgid "Benefits of using a pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:98
+msgid ""
+"Including your package's metadata in a separate human-readable "
+"**pyproject.toml** format also allows someone to view the project's "
+"metadata in a GitHub repository."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:101
+msgid "Setup.py is still useful for complex package builds"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:105
+msgid ""
+"Using **setup.py** to manage package builds and metadata [can cause "
+"problems with package "
+"development](https://blog.ganssle.io/articles/2021/10/setup-py-"
+"deprecated.html). In some cases where a Python package build is complex, "
+"a **setup.py** file may be required. While this guide will not cover "
+"complex builds, we will provide resources working with complex builds in "
+"the future."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:111
+msgid "Optional vs. required pyproject.toml file fields"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:113
+msgid ""
+"When you create your `pyproject.toml` file, there are numerous metadata "
+"fields that you can use. Below we suggest specific fields to get you "
+"started that support publication on PyPI and users finding your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:115
+msgid ""
+"[An overview of all of the project metadata elements can be found "
+"here.](https://packaging.python.org/en/latest/specifications/core-"
+"metadata/#project-url-multiple-use)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:117
+msgid "Required fields for the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:119
+msgid ""
+"As mentioned above, your `pyproject.toml` file needs to have a **`name`**"
+" and **`version`** field in order to properly build your package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:121
+msgid "`name`: This is the name of your project provided as a string"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:122
+msgid ""
+"`version`: This is the version of your project. If you are using a SCM "
+"tool for versioning (using git tags to determine versions), then the "
+"version may be dynamic (more on that below)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:124
+msgid "Optional fields to include in the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:126
+msgid ""
+"We strongly suggest that you also add the metadata keys below as they "
+"will help users finding your package on PyPI. These fields will make it "
+"clear how your package is structured, what platforms you support and what"
+" dependencies your package requires."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:131
+msgid "**Description:** this is a short one-line description of your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:132
+msgid ""
+"**Readme:** A link to your README.md file is used for the long long-"
+"description. This information will be published on your packages PyPI "
+"landing page."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:133
+msgid ""
+"**Requires-python** (used by pip): this is a field that is used by pip. "
+"Here you tell the installer whether you are using Python 2.x or 3.x. Most"
+" projects will be using 3.x."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:134
+msgid "**License:** the license you are using"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:135
+msgid ""
+"**Authors:** these are the original authors of the package. Sometimes the"
+" authors are different from the maintainers. Other times they might be "
+"the same."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:136
+msgid ""
+"**Maintainers:** you can choose to populate this or not. You can populate"
+" this using a list with a sub element for each author or maintainer name,"
+" email"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:144
+msgid ""
+"**project.dependencies:** The dependency group is optional because not "
+"all packages require dependencies. However, if your project has specific "
+"dependencies, include this section in your `pyproject.toml`. Dependencies"
+" declared in the pyproject.toml file will be installed by uv or pip when "
+"your project is installed."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:146
+msgid ""
+"**project.optional-dependencies:** Optional or feature dependencies will "
+"be installed if someone runs `python -m pip install "
+"projectname[feature]`. Use this array to declare dependencies that add "
+"specific features to your package that are not installed by default when "
+"a user runs `uv sync` or `python -m pip install packagename`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:147
+msgid ""
+"**dependency-groups:** Dependency groups organize packages and tools that"
+" a contributor or developer would need to work on your package. These "
+"dependencies may include tools for building and running tests, linters, "
+"and code formatters. This is an optional but highly suggested way to "
+"organize and install dependencies. This section can replace a "
+"requirements.txt file. [Learn more about adding these to your package in "
+"the PyPA guide "
+"here.](https://packaging.python.org/en/latest/specifications/dependency-"
+"groups/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:148
+msgid ""
+"**keywords:** These are the keywords that will appear on your PyPI "
+"landing page. Think of them as words that people might use to search for "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:149
+msgid ""
+"**classifiers:** The classifiers section of your metadata is also "
+"important for the landing page of your package in PyPI and for filtering "
+"of packages in PyPI. A list of [all options for classifiers can be found "
+"here](https://PyPI.org/classifiers/). Some of the classifiers that you "
+"should consider including"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:150
+msgid "Development Status"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:151
+msgid "Intended Audience"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:152
+msgid "Topic"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:153
+msgid "Programming language"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:155
+msgid "Advanced options in the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:157
+msgid ""
+"**`[project.scripts]` (Entry points):** Entry points are optional. If you"
+" have a command line tool that runs a specific script hosted in your "
+"package, you may include an entry point to call that script directly at "
+"the command line (rather than at the Python shell)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:159
+msgid ""
+"Here is an example of[a package that has entry point "
+"script](https://github.com/pyOpenSci/pyosMeta/blob/main/pyproject.toml#L60)s."
+" Notice that there are several core scripts defined in that package that "
+"perform sets of tasks. The pyOpenSci is using those scripts to process "
+"their metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:160
+msgid ""
+"Use **Dynamic Fields** If you have fields that are dynamically populated."
+" For example, you may wish to automatically update your package's version"
+" using Git tags (SCM/version control-based versioning). Example: "
+"**dynamic = [\"version\"]**"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:162
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Add dependencies to your pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:164
+msgid ""
+"The `pyproject.toml` file is a modern replacement for the "
+"`requirements.txt` file, which has been traditionally used to store "
+"development dependencies and also configuration for tools such as pytest,"
+" black, and others."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:166
+msgid ""
+"To add development dependencies to your build, add a `[dependency-"
+"groups]` array to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:168
+msgid "Then specify dependency groups as follows:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:176
+msgid "Following the above example, you install dependencies like this:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:178
+msgid "`python -m pip install -e .[tests]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:180
+msgid "pip install --group test _# requires pip 25.1 or greater_"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:182
+msgid ""
+"The above will install both your package in editable mode and all of the "
+"dependencies declared in the tests section of your `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:184
+msgid "To install all dependencies and also your package, you'd use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:186
+msgid "`python -m pip install -e .[tests,lint,docs]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:188
+msgid "Recursive dependencies"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:192
+msgid ""
+"You can also setup sets of recursive dependencies. [See this blog post "
+"for more.](https://hynek.me/articles/python-recursive-optional-"
+"dependencies/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:195
+msgid "Example pyproject.toml for building using hatchling"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:197
+msgid ""
+"Below is an example build configuration for a Python project. This "
+"example package setup uses **hatchling** to build the [package's sdist "
+"and wheels](python-package-distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:205
+msgid "Notice that dependencies are specified in this file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:207
+msgid "Example pyproject.toml for building using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:209
+msgid ""
+"The package metadata including authors, keywords, etc is also easy to "
+"read. Below you can see the same TOML file that uses a different build "
+"system (setuptools). Notice how simple it is to swap out the tools needed"
+" to build this package!"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:213
+msgid "In this example package setup you use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:215
+msgid ""
+"**setuptools** to build the [package's sdist and wheels](python-package-"
+"distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:216
+msgid ""
+"**setuptools_scm** to manage package version updates using version "
+"control tags"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:218
+msgid ""
+"In the example below `[build-system]` is the first table of values. It "
+"has two keys that specify the build backend API and containing package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:221
+msgid "`requires =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:222
+msgid "`build-back-end =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:229
+msgid ""
+"[Click here to read about our packaging build tools including PDM, "
+"setuptools, Poetry and Hatch.](/package-structure-code/python-package-"
+"build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:1
+msgid "Python Packaging Tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:4
+msgid "Tools for building your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:6
+msgid ""
+"There are a several different build tools that you can use to [create "
+"your Python package's _sdist_ and _wheel_ distributions](python-package-"
+"distribution-files-sdist-wheel). Below, we discuss the features, benefits"
+" and limitations of the most commonly used Python packaging tools. We "
+"focus on pure-python packages in this guide. However, we also highlight "
+"tools that currently support packages with C/C++ and other language "
+"extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:14
+msgid ""
+"Decision tree diagram showing the various front and back end packaging "
+"tools. You can decide what packaging tool to use by thinking about what "
+"features you need. PDM and Hatch are currently the most flexible tools "
+"as they also using different build back-ends. As such currently PDM and "
+"Hatch are the tools we think beginners might appreciate most with Poetry "
+"being a close second. Poetry is nice for pure Python projects."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:16
+msgid ""
+"Diagram showing the different front end build tools available to use in "
+"the Python package ecosystem that you can select from. We selected tools "
+"to include in this diagram based upon the PyPI survey which helped us "
+"understand the most populate tools in the ecosystem. Each tool has "
+"different features as highlighted below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:19
+msgid ""
+"If you want to know more about Python packages that have extensions "
+"written in other languages, [check out the page on complex package builds"
+".](complex-python-package-builds)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:22
+msgid "Tools that we review here"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:24
+msgid ""
+"In this section we have selected tools that were returned as the most "
+"popular packaging tools in the PyPA survey. You will learn more about the"
+" following tools on this page:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:28
+msgid ""
+"[Twine](https://twine.readthedocs.io/en/stable/), [Build](https://pypa-"
+"build.readthedocs.io/en/stable/) + "
+"[setuptools](https://setuptools.pypa.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:29
+msgid "[Flit](https://flit.pypa.io/en/stable/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:30
+msgid "[Hatch](https://hatch.pypa.io/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:31
+msgid "[PDM](https://pdm-project.org/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:32
+msgid "[Poetry](https://python-poetry.org/docs/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:35
+msgid "Summary of tools Hatch vs. PDM vs. Poetry (and setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:37
+msgid "If you are looking for a quick summary, read below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:39
+msgid ""
+"In general, any modern tool that you select from this page will be great "
+"to build your package. Selecting a tool comes down to the features that "
+"you are looking for in your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:40
+msgid ""
+"We suggest that beginners start with a modern workflow tool like PDM as "
+"opposed to navigating the complexities of setuptools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:41
+msgid ""
+"If you are going to use Poetry (it is the most popular tool and does have"
+" the best documentation) beware of the upper bounds dependency additions "
+"and consider overriding dependencies when you add them. If you do that "
+"Poetry will work well for pure-python builds! Poetry also has an active "
+"discord where you can ask questions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:43
+msgid "Below are some features that Hatch and PDM offer that Poetry does not."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:45
+msgid "PDM:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:47
+msgid ""
+"Supports other back-ends making it ideal for builds that are not pure "
+"Python. This means PDM is a great option for both pure python and more "
+"complex Python builds as it supports meson-python and other build "
+"backends."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:48
+msgid "Offers flexibility in dependency management which we like"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:49
+msgid "Offers lock files if you need them"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:51
+msgid "Hatch:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:53
+msgid ""
+"Offers matrix environment management that allows you to run tests across "
+"Python versions. If this feature is important to you, then Hatch is a "
+"clear winner."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:54
+msgid ""
+"Offers a Nox / Make file like tool to streamline your build workflow. If "
+"you are looking to reduce the number of tools in your workflow, Hatch "
+"might be for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:57
+msgid "Build front-end vs. build back-end tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:59
+msgid ""
+"To better understand your options, when it comes to building a Python "
+"package, it's important to first understand the difference between a "
+"build tool front-end and build back-end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:64
+msgid "Build back-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:66
+msgid ""
+"Most packaging tools have a back-end build tool that builds you package "
+"and creates associated [(sdist and wheel) distribution files](python-"
+"package-distribution-files-sdist-wheel). Some tools, such as **Flit**, "
+"only support pure-Python package builds. A pure-Python build refers to a "
+"package build that does not have extensions that are written in another "
+"programming language (such as `C` or `C++`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:73
+msgid ""
+"Other packages that have C and C++ extensions (or that wrap other "
+"languages such as fortran) require additional code compilation steps when"
+" built. Back-ends such as **setuptools.build**, **meson.build** and "
+"**scikit-build** support complex builds with custom steps. If your build "
+"is particularly complex (i.e. you have more than a few `C`/`C++` "
+"extensions), then we suggest you use **meson.build** or **scikit-build**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:79
+msgid "Python package build front-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:81
+msgid ""
+"A packaging front-end tool refers to a tool that makes it easier for you "
+"to perform common packaging tasks using similar commands. These tasks "
+"include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:84
+msgid ""
+"[Build your packages (create the sdist and wheel distributions)](python-"
+"package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:85
+msgid ""
+"Installing your package in a development mode (so it updates when you "
+"update your code)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:86
+msgid "Publishing to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:87
+msgid "Running tests"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:88
+msgid "Building documentation"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:89
+msgid ""
+"Managing an environment or multiple environments in which you need to run"
+" tests and develop your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:91
+msgid ""
+"There are several Python packaging tools that you can use for pure Python"
+" builds. Each front-end tool discussed below supports a slightly "
+"different set of Python packaging tasks."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:95
+msgid ""
+"For instance, you can use the packaging tools **Flit**, **Hatch** or "
+"**PDM** to both build and publish your package to PyPI. However while "
+"**Hatch** and **PDM** support versioning and environment management, "
+"**Flit** does not. If you want a tool that supports dependency locking, "
+"you can use **PDM** or **Poetry** but not **Hatch**. If you only need to "
+"build your package's sdist and wheel distribution files, then you can "
+"stick with PyPA's Build. You'd then use Twine to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:102
+msgid ""
+"If you are using **Setuptools**, there is no default user-friendly build "
+"front-end that performs multiple tasks. You will need to use **build** to"
+" build your package and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:105
+msgid "Example build steps that can be simplified using a front-end tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:107
+msgid ""
+"Below, you can see how a build tool streamlines your packaging "
+"experience. Example to build your package with **Hatch**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:117
+msgid "Example build steps using the **setuptools** back-end and **build**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:127
+msgid "Choosing a build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:129
+msgid ""
+"Most front-end packaging tools have their own back-end build tool. The "
+"build tool creates your package's (sdist and wheel) distribution files. "
+"For pure Python packages, the main difference between the different build"
+" back-ends discussed below is:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:134
+msgid ""
+"How configurable they are - for example, do they allow you to add build "
+"steps that support non python extensions?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:135
+msgid ""
+"How much you need to configure them to ensure the correct files are "
+"included in your sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:137
+msgid "Build back-end support for non pure-python packages"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:139
+msgid ""
+"It is important to note that some build back-ends, such as **Flit-core**,"
+" only support pure Python builds. Other back-ends support C and C++ "
+"extensions as follows:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:142
+msgid "setuptools supports builds using C / C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:143
+msgid ""
+"Hatchling (hatch's back-end) supports C / C++ extensions via plugins that"
+" the developer creates to customize a build"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:144
+msgid "PDM's back-end supports C / C++ extensions by using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:145
+msgid ""
+"Poetry's back-end supports C/C++ extensions however this functionality is"
+" currently undocumented. As such we don't recommend using Poetry for "
+"complex or non pure Python builds until it is documented."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:147
+msgid ""
+"While we won't discuss more complex builds below, we will identify which "
+"tools have documented support for C / C++ extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:150
+msgid "An ecosystem of Python build tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:152
+msgid ""
+"Below we introduce several of the most commonly used Python packaging "
+"build front-end tools. We highlight the features that each tool offers as"
+" a way to help you decide what tool might be best for your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:156
+msgid "We do not suggest using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:159
+msgid ""
+"We suggest that you pick one of the modern tools listed above rather than"
+" setuptools because setuptools will require some additional knowledge to "
+"set up correctly."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:163
+msgid ""
+"We review setuptools as a back-end because it is still popular. However "
+"it is not the most user friendly option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:167
+msgid ""
+"The most commonly used tools in the ecosystem are setuptools back-end "
+"(with build) and Poetry (a front end tool with numerous features and "
+"excellent documentation)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:173
+msgid ""
+"Graph showing the results of the 2022 PyPA survey of Python packaging "
+"tools. On the x axis is percent response and on the y axis are the tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:175
+msgid ""
+"The Python developers survey results (n=>8,000 PyPI users) show "
+"setuptools and poetry as the most commonly used Python packaging tools. "
+"The core tools that we've seen being used in the scientific community are"
+" included here. [You can view the full survey results by clicking "
+"here.](https://drive.google.com/file/d/1U5d5SiXLVkzDpS0i1dJIA4Hu5Qg704T9/view)"
+" NOTE: this data represent maintainers across domains and is likely "
+"heavily represented by those in web development. So this represents a "
+"snapshot across the broader Python ecosystem."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:178
+msgid "Chose a build workflow tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:180
+msgid "The tools that we review below include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:182
+msgid "Twine, Build + setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:183
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:294
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:184
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:336
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:185
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:233
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:186
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:380
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:188
+msgid ""
+"When you are selecting a tool, you might consider this general workflow "
+"of questions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:191
+msgid ""
+"**Is your tool pure python? Yes?** You can use any tool that you wish! "
+"Pick the tool that has the features that you want to use in your build "
+"workflow. We suggest:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:193
+msgid "Flit, Hatch, PDM or Poetry (read below for more)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:195
+msgid ""
+"**Does your tool have a few C or C++ extensions?** Great, we suggest "
+"using **PDM** for the time being. It is the only tool in the list below "
+"that has both documented workflow to support such extensions and support "
+"for other back-ends in the case that build hooks are not enough for your "
+"workflow. PDM supports other back-ends such as scikit-build and meson-"
+"python that will allow you to fully customize your package's build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:199
+msgid ""
+"NOTE: You can also use Hatch for non pure python builds. Hatch, similar "
+"to PDM, allows you to write your own build hooks or plugins to support "
+"custom build steps. But currently, hatch does not support other build "
+"back ends. Many of the core scientific packages are moving to meson-"
+"python to build their packages. Thus, we appreciate that PDM can work "
+"with meson-python specifically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:201
+msgid "Python packaging tools summary"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:203
+msgid ""
+"Below, we summarize features offered by the most popular build front end "
+"tools. It is important to keep in mind that these front-end tools remove "
+"the need to use other core tools in your workflow. For example if you use"
+" setuptools, you will need to also use Build and Twine to build your "
+"package and publish to PyPI. But if you use Poetry, Hatch or PDM you can "
+"do all of those things using the same tool (e.g. `hatch build`, `hatch "
+"publish` or `pdm build`, `pdm publish`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:206
+msgid ""
+"Note that because setuptools does not offer a front-end interface, it is "
+"not included in the table."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:210
+msgid "Package tool features table"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Feature"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Default Build Back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Flit-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Poetry-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Use Other Build Backends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✖"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "✅"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Dependency management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Version Control based versioning (using `git tags`)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Environment Management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "More than one maintainer? (bus factor)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:227
+msgid "Notes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:229
+msgid "_Hatch plans to support dependency management in the future_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:230
+msgid ""
+"Poetry supports semantic versioning. Thus, it will support version "
+"bumping following commit messages if you use a tool such as Python "
+"Semantic Release"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:235
+msgid ""
+"[PDM is a Python packaging and dependency management tool](https://pdm-"
+"project.org/latest/). PDM supports builds for pure Python projects. It "
+"also provides multiple layers of support for projects that have C and C++"
+" extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:239
+msgid "PDM support for C and C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:241
+msgid ""
+"PDM supports using the PDM-back-end and setuptools at the same time. This"
+" means that you can run setuptools to compile and build C extensions. "
+"PDM's build back-end receives the compiled extension files (.so, .pyd) "
+"and packages them with the pure Python files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:247
+msgid "PDM features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Notes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you setup PDM it allows you to select one of several build back ends"
+" including: PDM-core, flit-core and hatchling. PDM also can work with "
+"Meson-Python which supports move complex python builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Dependency specifications"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has flexible support for managing dependencies. PDM defaults to "
+"using an open bound (e.g. `requests >=1.2`) approach to dependencies. "
+"However you can [customize how you want to add dependencies in case you "
+"prefer another approach such as that of Poetry which uses an upper bound "
+"limit](https://pdm-project.org/en/latest/usage/dependency/#about-update-"
+"strategy).**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Environment lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM and Poetry are currently the only tools that create environment lock "
+"files. Lock files are often most useful to developers creating web apps "
+"where locking the environment is critical for consistent user experience."
+" For community-used packages, you will likely never want to use a lock "
+"file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Environment management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM provides environment management support. It supports Python virtual "
+"environments, conda and a local `__pypackages__` environment which is a "
+"newer option in the Python ecosystem. No extensions are needed for this "
+"support."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Select your environment type on install"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you run `PDM init`, PDM will discover environments that are already "
+"on your system and allow you to select one to use for your project."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version Control based versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has a setuptools_scm like tool built into it which allows you to use "
+"dynamic versioning that rely on git tags."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Follows current packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Install your package in editable mode"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Build your sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"Similar to all of the other tools PDM builds your packages sdist and "
+"wheel files for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:267
+msgid "PDM vs. Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:268
+msgid ""
+"The functionality of PDM is similar to Poetry. However, PDM also offers "
+"additional, documented support for C extensions and version control based"
+" versioning. As such, PDM is preferred for those working on non pure-"
+"Python packages."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:272
+msgid ""
+"If you are deciding between the Poetry and PDM, a smaller difference is "
+"the default way that dependencies are added to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:274
+msgid ""
+"Poetry by default follows strict semantic versioning adding dependencies "
+"to your pyproject.toml file [using an upper bounds constraint "
+"(`^`)](https://python-poetry.org/docs/dependency-specification/#version-"
+"constraints). Upper bounds lock means that Poetry will never bump a "
+"dependency to the next major version (i.e. from 1.2 to 2.0). However, you"
+" can tell Poetry to use an open bound approach by explicitly adding the "
+"package like this: `poetry add requests >= 1.2` rather than just using "
+"`poetry add requests` which will result in a upper bound locked (ie Upper"
+" bound locks means that requests 2.0 could never be installed even if it "
+"came out and your package could benefit from it)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:275
+msgid ""
+"PDM defaults to open-bounds (`>=`) dependency additions which is the "
+"preferred approach in the scientific python ecosystem. However, PDM also "
+"allows you to specify the way dependencies are added by default. As such,"
+" you can also specify upper-bounds (`^`) using PDM if require that "
+"approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:277
+msgid ""
+"Finally there are some nuanced differences in how both tools create lock "
+"files which we will not go into detail about here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:280
+msgid "Challenges with PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:282
+msgid ""
+"PDM is a full-featured packaging tool. However it is not without "
+"challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:284
+msgid ""
+"Its documentation can be confusing, especially if you are new to "
+"packaging. For example, PDM doesn't provide an end to end beginning "
+"workflow in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:286
+msgid ""
+"PDM also only has one maintainer currently. We consider individual "
+"maintainer teams to be a potential risk. If the maintainer finds they no "
+"longer have time to work on the project, it leaves users with a gap in "
+"support. Hatch and Flit also have single maintainer teams."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:291
+msgid ""
+"[You can view an example of a package that uses PDM "
+"here](https://github.com/pyOpenSci/examplePy/tree/main/example4_pdm). The"
+" README file for this directly provides you with an overview of what the "
+"PDM command line interface looks like when you use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:296
+msgid ""
+"[Flit is a no-frills, streamlined packaging "
+"tool](https://flit.pypa.io/en/stable/) that supports modern Python "
+"packaging standards. Flit is a great choice if you are building a basic "
+"package to use in a local workflow that doesn't require any advanced "
+"features. And if your package structure is already created. More on that "
+"below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:300
+msgid "Flit features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Publish to PyPI and test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Helps you add metadata to your **pyproject.toml** file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit does support adding metadata to your **pyproject.toml** file "
+"following modern packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports installing your package in editable mode.**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit can be used to build your packages sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:314
+msgid ""
+"NOTE: _If you are using the most current version of pip, it supports both"
+" a symlink approach `flit install -s` and `python -m pip install -e .`_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:316
+msgid "Learn more about flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:318
+msgid "[Why use flit?](https://flit.pypa.io/en/stable/rationale.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:321
+msgid "Why you might not want to use Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:323
+msgid ""
+"Because Flit is no frills, it is best for basic, quick builds. If you are"
+" a beginner you may want to select Hatch or PDM which will offer you more"
+" support in common operations."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:327
+msgid "You may NOT want to use flit if:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:329
+msgid ""
+"You want to setup more advanced version tracking and management (using "
+"version control for version bumping)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:330
+msgid ""
+"You want a tool that handles dependency versions (use PDM or Poetry "
+"instead)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:331
+msgid "You have a project that is not pure Python (Use Hatch, PDM or setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:332
+msgid "You want environment management (use PDM, Hatch or Poetry)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:338
+msgid ""
+"[**Hatch**](https://hatch.pypa.io/latest/), similar to Poetry and PDM, "
+"provides a unified command line interface. To separate Hatch from Poetry "
+"and PDM, it also provides an environment manager for testing that will "
+"make it easier for you to run tests locally across different versions of "
+"Python. It also offers a nox / makefile like feature that allows you to "
+"create custom build workflows such as building your documentation "
+"locally. This means that you could potentially drop a tool like **Make** "
+"or **Nox** from your workflow and use Hatch instead."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:345
+msgid "Hatch features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch is used with the backend Hatchling by default, but allows you to "
+"use another backend by switching the declaration in pyproject.toml."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Currently you have to add dependencies manually with Hatch. However a "
+"feature to support dependencies management may be added in a future "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports Python virtual environments. If you wish to use other "
+"types of environments such as Conda, you will need to [install a plugin "
+"such as hatch-conda for conda support](https://github.com/OldGrumpyViking"
+"/hatch-conda)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch offers `hatch_vcs` which is a plugin that uses setuptools_scm to "
+"support versioning using git tags. The workflow with `hatch_vcs` is the "
+"same as that with `setuptools_scm`."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch will install your package into any of its environments by default "
+"in editable mode. You can install your package in editable mode manually "
+"using `python -m pip install -e .` Hatch mentions [editable "
+"installs](https://hatch.pypa.io/latest/config/build/#dev-mode) but refers"
+" to pip in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch will build the sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨Matrix environment creation to support testing across Python versions✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"The matrix environment creation is a feature that is unique to Hatch in "
+"the packaging ecosystem. This feature is useful if you wish to test your "
+"package locally across Python versions (instead of using a tool such as "
+"tox)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"✨[Nox / MAKEFILE like "
+"functionality](https://hatch.pypa.io/latest/environment/#selection)✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"This feature is also unique to Hatch. This functionality allows you to "
+"create workflows in the **pyproject.toml** configuration to do things "
+"like serve docs locally and clean your package build directory. This "
+"means you may have one less tool in your build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨A flexible build backend: **hatchling**✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"**The hatchling build backend offered by the maintainer of Hatch allows "
+"developers to easily build plugins to support custom build steps when "
+"packaging."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:367
+msgid ""
+"_There is some argument about this approach placing a burden on "
+"maintainers to create a custom build system. But others appreciate the "
+"flexibility. The Hatch build hook approach is also comparable with the "
+"features offered by PDM._"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:369
+msgid "Why you might not want to use Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:371
+msgid ""
+"There are a few features that hatch is missing that may be important for "
+"some. These include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:374
+msgid ""
+"Hatch doesn't support adding dependencies. You will have to add them "
+"manually."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:375
+msgid "Hatch won't by default recognize Conda environments without a plugin."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:376
+msgid ""
+"Similar to PDM, Hatch's documentation can difficult to work through, "
+"particularly if you are just getting started with creating a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:377
+msgid "Hatch, similar to PDM and Flit currently only has one maintainer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:382
+msgid ""
+"[Poetry is a full-featured build tool.](https://python-poetry.org/) It is"
+" also the second most popular front-end packaging tool (based upon the "
+"PyPA survey). Poetry is user-friendly and has clean and easy-to-read "
+"documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:387
+msgid ""
+"While some have used Poetry for Python builds with C/C++ extensions, this"
+" support is currently undocumented. Thus, we don't recommend using Poetry"
+" for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:391
+msgid "Poetry features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry helps you add dependencies to your `pyproject.toml` metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Dependency specification"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to be specific about version of dependencies that you "
+"add to your package's pyproject.toml file. However, it's default upper "
+"bound approach can be problematic for some packages (We suggest you "
+"override the default setting when adding dependencies). Read below for "
+"more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to either use its built in environment or you can "
+"select the environment type that you want to use for managing your "
+"package. [Read more about its built in environment management "
+"options](https://python-poetry.org/docs/basic-usage/#using-your-virtual-"
+"environment)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry creates a **poetry.lock** file that you can use if you need a lock"
+" file for your build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"The plugin [Poetry dynamic versioning](https://github.com/mtkennerly"
+"/poetry-dynamic-versioning) supports versioning using git tags with "
+"Poetry."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Since version 2.0, Poetry supports most current project metadata "
+"standards. However, not all standards are supported, and it also supports"
+" the legacy Poetry format. Read below for more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry will build your sdist and wheel distributions using `poetry build`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:413
+msgid "Challenges with Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:415
+msgid "Some challenges of Poetry include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:417
+msgid ""
+"Poetry has its own concept of grouped dependencies (`poetry add "
+"--group=GROUP_NAME DEPENDENCY`). Dependencies added as grouped "
+"dependencies are not optional and there is no Python standard for this "
+"type of dependency. This should not be confused with \"optional\" "
+"dependencies (`poetry add --optional=GROUP_NAME DEPENDENCY`), which is "
+"standardised and lets you group your dependencies into several optional "
+"groups."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:418
+msgid ""
+"While Poetry supports \"development\" dependencies (i.e. dependencies you"
+" use for development but not running the code, such as `pytest`), Poetry "
+"does not yet follow the standardised format for specifying such "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:419
+msgid ""
+"Poetry, by default, pins dependencies using an \"upper bound\" limit "
+"(which is specified with the `^` symbol in the legacy format). However, "
+"this behavior can be over-written by specifying the dependency when you "
+"use `poetry add` as follows: `poetry add \"requests>=2.1\"` See breakout "
+"below for more discussion on issues surrounding upper-bounds pinning."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:421
+msgid ""
+"Poetry is a popular packaging tool and introduced many very useful "
+"features. However, if you decide to use it, then use caution when adding "
+"dependencies as Poetry's approach to pinning can be problematic for many "
+"builds. If you use Poetry, we strongly suggest that you override the "
+"default upper bound dependency option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:426
+msgid "Challenges with Poetry dependency pinning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:429
+msgid ""
+"By default, Poetry pins dependencies using `^` by default. This `^` "
+"symbol means that there is an \"upper bound\" to the dependency. Thus "
+"poetry won't bump a dependency version to a new major version. Thus, if "
+"your package uses a dependency that is at version 1.2.3, Poetry will "
+"never bump the dependency to 2.0 even if there is a new major version of "
+"the package. Poetry will instead bump up to 1.9.x."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:435
+msgid ""
+"Poetry does this because it adheres to strict semantic versioning which "
+"states that a major version bump (from 1.0 to 2.0 for example) means "
+"there are breaking changes in the tool. However, not all tools follow "
+"strict semantic versioning. [This approach has been found to be "
+"problematic by many of our core scientific "
+"packages.](https://iscinumpy.dev/post/bound-version-constraints/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:440
+msgid ""
+"This approach also won't support others ways of versioning tools, for "
+"instance, some tools use [calver](https://calver.org/) which creates new "
+"versions based on the date."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:445
+msgid "Using Setuptools back-end for Python packaging with Build front-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:447
+msgid ""
+"[Setuptools](https://setuptools.pypa.io/en/latest/) is the most mature "
+"Python packaging build tool with [development dating back to 2009 and "
+"earlier](https://setuptools.pypa.io/en/latest/history.html#). Setuptools "
+"also has the largest number of community users (according to the PyPA "
+"survey). Setuptools does not offer a user front-end like Flit, Poetry and"
+" Hatch offer. As such you will need to use other tools such as **build** "
+"to create your package distributions and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:455
+msgid ""
+"While setuptools is the most commonly used tool, we encourage package "
+"maintainers to consider using a more modern tool for packaging such as "
+"Poetry, Hatch or PDM."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:458
+msgid ""
+"We discuss setuptools here because it's commonly found in the ecosystem "
+"and contributors may benefit from understanding it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:461
+msgid "Setuptools features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:463
+msgid "Some of features of setuptools include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:465
+msgid "Fully customizable build workflow"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:466
+msgid "Many scientific Python packages use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:467
+msgid ""
+"It offers version control based package versioning using "
+"**setuptools_scm**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:468
+msgid "It supports modern packaging using **pyproject.toml** for metadata"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:469
+msgid "Supports backwards compatibly for older packaging approaches."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:471
+msgid "Challenges using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:475
+msgid "Setuptools has a few challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:477
+msgid ""
+"Setuptools does not support interactive features such as auto / tab "
+"completion by default if you are working in an IDE like VSCODE and using "
+"an editable install for development. [See notes here about pylance "
+"support](https://github.com/microsoft/pylance-"
+"release/blob/main/TROUBLESHOOTING.md#editable-install-modules-not-found)."
+" In comparison, tools such as flit, hatch, PDM support interactive "
+"features such as tab / auto completion when using an IDE like VSCODE or "
+"pycharm (as long as your version of pip is current!)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:478
+msgid ""
+"Because **setuptools** has to maintain backwards compatibility across a "
+"range of packages, it is not as flexible in its adoption of modern Python"
+" packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:481
+msgid ""
+"The above-mentioned backwards compatibility makes for a more complex "
+"code-base."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:482
+msgid ""
+"Your experience as a user will be less streamlined and simple using "
+"setuptools compared to other tools discussed on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:484
+msgid ""
+"There are also some problematic default settings that users should be "
+"aware of when using setuptools. For instance:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:487
+msgid ""
+"setuptools will build a project without a name or version if you are not "
+"using a **pyproject.toml** file to store metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:489
+msgid ""
+"setuptools also will include all of the files in your package repository "
+"if you do not explicitly tell it to exclude files using a **MANIFEST.in**"
+" file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:1
+msgid "Learn about Building a Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:8
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires an source distribution on PyPI in order to "
+"build your package on conda-forge. You do not need to rebuild your "
+"package to publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:11
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"a conda channel). The build process organizes your code and metadata into"
+" a distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:14
+msgid "What is building a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:16
+msgid ""
+"To [publish your Python package](publish-python-package-pypi-conda) and "
+"make it easy for anyone to install, you first need to build it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:18
+msgid "But, what does it mean to build a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:20
+msgid ""
+"[As shown in the figure above](#pypi-conda-channels), when you build your"
+" Python package, you convert the source files into something called a "
+"distribution package. A distribution package contains your source code "
+"and metadata about the package, in the format required by the Python "
+"Package Index, so that it can be installed by tools like pip."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:23
+msgid ""
+"The term package used to mean many different things in Python and other "
+"languages. On this page, we adapt the convention of the [Python Packaging"
+" Authority](https://www.pypa.io/en/latest/) and refer to the product of "
+"the build step as a **distribution package**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:27
+msgid ""
+"This process of organizing and formatting your code, documentation, tests"
+" and metadata into a format that both pip and PyPI can use, is called a "
+"build step."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:31
+msgid "Project metadata and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:33
+msgid ""
+"The metadata that both build tools and PyPI uses to describe and "
+"understand your package is generally stored in a [pyproject.toml file"
+"](pyproject-toml-python-package-metadata). This metadata is used for "
+"several purposes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:35
+msgid ""
+"It helps whatever tool you use to build your package (pip, [pypa's "
+"Build](https://pypi.org/project/build/) or an end-to-end tool such as "
+"poetry, PDM or Hatch) understand how to build your package. Information "
+"it provides to your build tool includes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:37
+msgid ""
+"The `[build-system]` table in your pyproject.toml file tells pip what "
+"[build backend tool](build_backends) you wish to use for creating your "
+"sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:45
+msgid ""
+"And the dependencies section of your project table tells the build tool "
+"and PyPI what dependencies your project requires."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:54
+msgid ""
+"When the build tool creates your package distribution file (the file that"
+" you publish on PyPI), it also creates a METADATA file which PyPI can "
+"read and use to help users find your package. For example:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:56
+msgid ""
+"The `classifiers = ` section of your `[project]` table in the "
+"pyproject.toml file provides information that users on PyPI can use to "
+"filter for packages that address different topics or that support "
+"specific versions of python."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:72
+msgid "What happened to setup.py and setup.cfg for metadata?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:75
+msgid ""
+"Project metadata used to be stored in either a setup.py file or a "
+"setup.cfg file. The current recommended practice for storing package "
+"metadata is to use a pyproject.toml file. [Learn more about the "
+"pyproject.toml file here.](pyproject-toml-python-package-metadata)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:78
+msgid "An example - xclim"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:80
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let's have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:93
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:95
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:100
+msgid ""
+"This screenshot shows the metadata on PyPI for the xclim package. On it "
+"you can see the name of the license, the author and maintainer names "
+"keywords associated with the package and the base python version it "
+"requires which is 3.8."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:102
+msgid "PyPI screenshot showing metadata for the xclim package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:109
+msgid ""
+"Here you see the maintainer metadata as it is displayed on PyPI. For "
+"xclim there are three maintainers listed with their profile pictures and "
+"github user names to the right."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:111
+msgid ""
+"Maintainer names and GitHub usernames for the xclim package as they are "
+"displayed on PyPI. This information is recorded in your pyproject.toml "
+"and then processed by your build tool and stored in your packages sdist "
+"and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:114
+msgid "How to create the distribution format that PyPI and Pip expects?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:116
+msgid ""
+"You could in theory create your own scripts to organize your code the way"
+" PyPI wants it to be. However, just like there are packages that handle "
+"known structures such as Pandas for data frames and Numpy for arrays, "
+"there are packages and tools that help you create package build "
+"distribution files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:120
+msgid ""
+"There are a suite of packaging tools that can either help you with the "
+"entire packaging process or just one step of the process. For instance "
+"setuptools is a commonly used build back end that can be used to create "
+"your sdist and wheel. Whereas tools like Hatch, PDM, Poetry and flit help"
+" with other parts of the packaging process."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:126
+msgid ""
+"While this can cause some confusion and complexity in the packaging "
+"ecosystem - for the most part, each tool provides the same distribution "
+"output (with minor differences that most users may not care about). Learn"
+" more about those tools on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:132
+msgid ""
+"Below, you will learn about the two distribution files that PyPI expects "
+"you to publish: sdist and wheel. You will learn about their structure and"
+" what files belong in each."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:135
+msgid ""
+"There are two core distribution files that you need to create to publish "
+"your Python package to PyPI source distribution (often called an sdist) "
+"and wheel. The sdist contains the raw source code for your package. The "
+"wheel (.whl) contains the built / compiled files that can be directly "
+"installed onto anyones' computer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:141
+msgid "Learn more about both distributions below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:144
+msgid ""
+"If your package is a pure python package with no additional build / "
+"compilation steps then the sdist and wheel distributions will have "
+"similar content. However if your package has extensions in other "
+"languages or is more complex in its build, the two distributions will be "
+"very different."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:149
+msgid ""
+"Also note that we are not discussing conda build workflows in this "
+"section. [You can learn more about conda builds "
+"here.](https://docs.conda.io/projects/conda-build/en/latest/user-"
+"guide/tutorials/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:154
+msgid "What is a source distribution (sdist)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:156
+msgid ""
+"**Source files** are the unbuilt files needed to build your package. "
+"These are the \"raw / as-is\" files that you store on GitHub or whatever "
+"platform you use to manage your code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:160
+msgid ""
+"Source Distributions (**S** + **Dist**) are referred to as sdist. As the "
+"name implies, a SDIST contains the source code; it has not been built or "
+"compiled in any way. Thus, when a user installs your source distribution "
+"using pip, pip needs to run a build step first. For this reason, you "
+"could define a source distribution as a compressed archive that contains "
+"everything required to build a wheel (except for project dependencies) "
+"without network access."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:164
+msgid ""
+"Sdist is normally stored as a `.tar.gz` archive (often called a "
+"\"tarball\"). Thus, when a user installs your source distribution using "
+"pip, pip needs to run a build step first."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:166
+msgid "Below is an example sdist for the stravalib Python package:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:218
+msgid "GitHub archive vs sdist"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:220
+msgid ""
+"When you make a release on GitHub, it creates a `git archive` that "
+"contains all of the files in your GitHub repository. While these files "
+"are similar to an sdist, these two archives are not the same. The sdist "
+"contains a few other items including a metadata directory and if you use "
+"`setuptools_scm` or `hatch_vcs` the sdist may also contain a file that "
+"stores the version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:228
+msgid "What is a Python wheel (whl):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:230
+msgid ""
+"A wheel file is a ZIP-format archive whose filename follows a specific "
+"format (below) and has the extension `.whl`. The `.whl` archive contains "
+"a specific set of files, including metadata that are generated from your "
+"project's pyproject.toml file. The pyproject.toml and other files that "
+"may be included in source distributions are not included in wheels "
+"because it is a built distribution."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:237
+msgid ""
+"The wheel (.whl) is your built binary distribution. **Binary files** are "
+"the built / compiled source files. These files are ready to be installed."
+" A wheel (**.whl**) is a **zip** file containing all of the files needed "
+"to directly install your package. All of the files in a wheel are "
+"binaries - this means that code is already compiled / built. Wheels are "
+"thus faster to install - particularly if you have a package that requires"
+" build steps."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:239
+msgid ""
+"The wheel does not contain any of your package's configuration files such"
+" as **setup.cfg** or **pyproject.toml**. This distribution is already "
+"built so it's ready to install."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:243
+msgid ""
+"Because it is built, the wheel file will be faster to install for pure "
+"Python projects and can lead to consistent installs across machines."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:251
+msgid ""
+"Wheels are also useful in the case that a package needs a **setup.py** "
+"file to support a more complex build. In this case, because the files in "
+"the wheel bundle are pre built, the user installing doesn't have to worry"
+" about malicious code injections when it is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:258
+msgid "The filename of a wheel contains important metadata about your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:260
+msgid "Example: **stravalib-1.1.0.post2-py3-none.whl**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:262
+msgid "name: stravalib"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:263
+msgid "version: 1.1.0"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:264
+msgid ""
+"build-number: 2 (post2) [(read more about post "
+"here)](https://peps.python.org/pep-0440/#post-release-separators)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:265
+msgid "py3: supports Python 3.x"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:266
+msgid "none: is not operating system specific (runs on windows, mac, linux)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:267
+msgid "any: runs on any computer processor / architecture"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:269
+msgid "What a wheel file looks like when unpacked (unzipped):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:303
+msgid "[Read more about the wheel format here](https://pythonwheels.com/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:1
+msgid "Python Package Structure & Layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:3
+msgid ""
+"There are two different layouts that you will commonly see within the "
+"Python packaging ecosystem: src and flat layouts. Both layouts have "
+"advantages for different groups of maintainers."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:8
+msgid ""
+"We strongly suggest, but do not require, that you use the **src/** layout"
+" (discussed below) for creating your Python package. This layout is also "
+"recommended in the [PyPA packaging guide "
+"tutorial](https://packaging.python.org/en/latest/tutorials/packaging-"
+"projects/)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:12
+msgid "pyOpenSci will never require a specific package structure for peer review"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:15
+msgid ""
+"We understand that it would take significant effort for existing "
+"maintainers to move to a new layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:18
+msgid ""
+"The overview on this page presents recommendations that we think are best"
+" for someone getting started with Python packaging or someone who's "
+"package has a simple build and might be open to moving to a more fail-"
+"proof approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:22
+msgid "Other resources you can check out:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:24
+msgid ""
+"[PyPA's overview of src vs flat "
+"layouts](https://packaging.python.org/en/latest/discussions/src-layout-"
+"vs-flat-layout/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:27
+msgid ""
+"You can use tools like Hatch to quickly create a modern Python package "
+"structure. Check out our quickstart tutorial:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:29
+msgid ""
+"Want to learn how to create the structure to build your package? Click "
+"here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:38
+msgid "What is the Python package source layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:40
+msgid "An example of the **src/package** layout structure is below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:62
+msgid "Note the location of the following directories in the example above:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:64
+msgid ""
+"**docs/:** Discussed in our docs chapter, this directory contains your "
+"user-facing documentation website. In a **src/** layout docs/ are "
+"normally included at the same directory level as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:65
+msgid ""
+"**tests/** This directory contains the tests for your project code. In a "
+"**src/** layout, tests are normally included at the same directory level "
+"as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:66
+msgid ""
+"**src/package/**: this is the directory that contains the code for your "
+"Python project. \"Package\" is normally your project's name."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:68
+msgid ""
+"Also in the above example, notice that all of the core documentation "
+"files that pyOpenSci requires live in the root of your project directory."
+" These files include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:72
+msgid "CHANGELOG.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:73
+msgid "CODE_OF_CONDUCT.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:74
+msgid "CONTRIBUTING.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:75
+msgid "LICENSE.txt"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:76
+msgid "README.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:80
+msgid "Click here to read about our packaging documentation requirements."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:87
+msgid "Example scientific packages that use **src/package** layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:89
+msgid "[Sourmash](https://github.com/sourmash-bio/sourmash)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:90
+msgid "[bokeh](https://github.com/bokeh/bokeh)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:91
+msgid "[openscm](https://github.com/openscm/openscm-runner)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:92
+msgid "[awkward](https://github.com/scikit-hep/awkward)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:93
+msgid "[poliastro](https://github.com/poliastro/poliastro/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:98
+msgid "The src layout and testing"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:100
+msgid ""
+"The benefit of using the **src/package** layout is that it ensures tests "
+"are run against the installed version of your package rather than the "
+"files in your package working directory. If you run your tests on your "
+"files rather than the installed version of your package, you may be "
+"missing issues that users encounter when your package is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:106
+msgid ""
+"If `tests/` are outside the **src/package** directory, they aren't "
+"included in the package's [wheel](python-wheel). This makes your package "
+"size slightly smaller, which places a smaller storage burden on PyPI, and"
+" makes them faster to fetch."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:108
+msgid ""
+"[Read more about reasons to use the **src/package** "
+"layout](https://hynek.me/articles/testing-packaging/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:110
+msgid "How Python discovers and prioritizes importing modules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:112
+msgid ""
+"By default, Python adds a module in your current working directory to the"
+" front of the Python module search path."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:114
+msgid ""
+"This means that if you run your tests in your package's working "
+"directory, using a flat layout, `/package/module.py`, Python will "
+"discover `package/module.py` file before it discovers the installed "
+"package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:116
+msgid ""
+"However, if your package lives in a src/ directory structure "
+"**src/package**, then it won't be added to the Python path by default. "
+"This means that when you import your package, Python will be forced to "
+"search the active environment (which has your package installed)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:118
+msgid ""
+"Note: Python versions 3.11 and above have a path setting that can be "
+"adjusted to ensure the priority is to use installed packages first (e.g.,"
+" `PYTHONSAFEPATH`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:121
+msgid "Don't include tests in your package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:123
+msgid ""
+"Writing [tests](tests-intro) for your package is important; however, we "
+"do not recommend including tests as part of your [package wheel](python-"
+"wheel) by default. However, not including tests in your package "
+"distribution will make it harder for people other than yourself to test "
+"whether your package runs properly on their system. If you have a small "
+"test suite (Python files + data), and think your users may want to run "
+"tests locally on their systems, you can include tests by moving the "
+"`tests/` directory into the **src/package** directory (see example "
+"below)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:132
+msgid ""
+"Including the **tests/** directory in your **src/package** directory "
+"ensures that tests will be included in your package's [wheel](python-"
+"wheel)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:134
+msgid ""
+"Be sure to read the [pytest documentation for more about including tests "
+"in your package "
+"distribution](https://docs.pytest.org/en/7.2.x/explanation/goodpractices.html#choosing-a"
+"-test-layout-import-rules)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:136
+msgid "Challenges with including tests and data in a package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:139
+msgid ""
+"Tests, especially when accompanied by test data, can create a few small "
+"challenges, including:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:141
+msgid ""
+"Take up space in your distribution, which will build up over time as "
+"storage space on PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:142
+msgid "Large file sizes can also slow down package installation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:144
+msgid ""
+"However, in some cases, particularly in the scientific Python ecosystem, "
+"you may need to include tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:147
+msgid "**Don't include test suite datasets in your package**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:149
+msgid ""
+"If you include your tests in your package distribution, we strongly "
+"discourage you from including data in your test suite directory. Rather, "
+"host your test data in a repository such as Figshare or Zenodo. Use a "
+"tool such as [Pooch](https://www.fatiando.org/pooch/latest/) to access "
+"the data when you (or a user) runs tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:155
+msgid ""
+"For more information about Python package tests, see the [tests section "
+"of our guide](tests-intro)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:157
+msgid ""
+"The **src/package** layout is semantically more clear. Code is always "
+"found in the **src/package** directory, `tests/` and `docs/`are in the "
+"root directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:161
+msgid ""
+"If your package tests require data, do NOT include that data within your "
+"package structure. Including data in your package structure increases the"
+" size of your distribution files. This places a maintenance toll on "
+"repositories like PyPI and Anaconda.org that have to deal with thousands "
+"of package uploads."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:167
+msgid "Click here for a quickstart tutorial on creating your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:176
+msgid "What is the flat Python package layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:178
+msgid "Many scientific packages use the **flat-layout** given:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:180
+msgid ""
+"This layout is used by many core scientific Python packages such as "
+"NumPy, SciPy, and Matplotlib."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:181
+msgid ""
+"Many Python tools depend upon tools in other languages and/or complex "
+"builds with compilation steps. Many maintainers prefer features of the "
+"flat layout for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:185
+msgid ""
+"While we suggest that you use the **src/package** layout discussed above,"
+" it's important to also understand the flat layout, especially if you "
+"plan to contribute to a package that uses this layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:188
+msgid "Why most scientific Python packages do not use src/ layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:191
+msgid ""
+"Migrating larger scientific packages that already use a flat layout would"
+" consume significant time and resources."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:193
+msgid ""
+"However, the advantages of using the **src/package** layout for a "
+"beginner are significant. As such, we recommend that you use the "
+"**src/package** layout if you are creating a new package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:196
+msgid ""
+"Numerous packages in the ecosystem [have had to move to a **src/package**"
+" layout](https://github.com/scikit-build/cmake-python-"
+"distributions/pull/145)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:200
+msgid "What does the flat layout structure look like?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:202
+msgid "The flat layout's primary characteristics are:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:204
+msgid ""
+"The source code for your package lives in a directory with your package's"
+" name in the root of your directory"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:206
+msgid ""
+"Often the `tests/` directory also lives within that same `package` "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:208
+msgid ""
+"Below you can see the recommended structure of a scientific Python "
+"package using the flat layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:230
+msgid "Benefits of using the flat layout in your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:232
+msgid ""
+"There are some benefits to the scientific community in using the flat "
+"layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:234
+msgid ""
+"This structure has historically been used across the ecosystem and "
+"packages using it are unlikely to change."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:236
+msgid ""
+"You can import the package directly from the root directory. For some "
+"this is engrained in their respective workflows. However, for a beginner "
+"the danger of doing this is that you are not developing and testing "
+"against the installed version of your package. Rather, you are working "
+"directly with the flat files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:242
+msgid "Core scientific Python packages that use the flat layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:245
+msgid "[numpy](https://github.com/numpy/numpy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:246
+msgid "[scipy](https://github.com/scipy/scipy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:247
+msgid "[pandas](https://github.com/pandas-dev/pandas)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:248
+msgid "[xarray](https://github.com/pydata/xarray)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:249
+msgid "[Jupyter-core](https://github.com/jupyter/jupyter_core)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:250
+msgid "[Jupyter notebook](https://github.com/jupyter/notebook)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:251
+msgid "[scikit-learn](https://github.com/scikit-learn/scikit-learn)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:253
+msgid ""
+"It would be a significant maintenance cost and burden to move all of "
+"these packages to a different layout. The potential benefits of the "
+"source layout for these tools are not worth the maintenance investment."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:258
+msgid "Multiple packages in a src/ folder"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:261
+msgid ""
+"In some more advanced cases, you may have more than one package in your "
+"**src/** directory. See [Black's GitHub "
+"repo](https://github.com/psf/black/tree/main/src) for an example of this."
+" However, for most beginners you will likely only have one sub-directory "
+"in your **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:1
+msgid "Creating New Versions of Your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:6
+msgid "Key Takeways"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:8
+msgid ""
+"Follow [semantic versioning guidelines (SemVer) "
+"rules](https://semver.org/) when bumping (increasing) your Python's "
+"package version; for example a major version bump (version 1.0 --> 2.0) "
+"equates to breaking changes in your package's code for a user."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:9
+msgid ""
+"You may want to consider using a plugin like hatch_vsc for managing "
+"versions of your package - if you want to have a GitHub only release "
+"workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:10
+msgid ""
+"Otherwise most major package build tools such as Hatch, Flit and PDM have"
+" a version feature that will help you update your package's version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:11
+msgid "Avoid updating your packages version number manually by hand in your code!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:14
+msgid ""
+"pyOpenSci recommends that you follow the [Python PEP "
+"440](https://peps.python.org/pep-0440) which recommends using [semantic "
+"versioning guidelines](https://www.python.org/dev/peps/pep-0440"
+"/#semantic-versioning) when assigning release values to new versions of "
+"your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:18
+msgid ""
+"[Semantic versioning](https://semver.org/) is an approach to updating "
+"package versions that considers the type and extent of a change that you "
+"are making to the package code. Being consistent with how and when you "
+"update your package versions is important as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:23
+msgid ""
+"It helps your users (which might include other developers that depend on "
+"your package) understand the extent of changes to a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:24
+msgid ""
+"It helps your development team make decisions about when to bump a "
+"package version based on standard rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:26
+msgid ""
+"Consistent version increases following semver rules mean that values of "
+"your package version explain the extent of the changes made in the code "
+"base from version to version. Thus your package version numbers become "
+"\"expressive\" in the same way that naming code variables well can [make "
+"code expressive](https://medium.com/@daniel.oliver.king/writing-"
+"expressive-code-b69ef7a5a2fa)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:28
+msgid "A note about versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:29
+msgid ""
+"In some cases even small version changes can turn a package update into a"
+" breaking change for some users. What is also important is that you "
+"document how you version your code and if you can, also document your "
+"deprecation policy for code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:38
+msgid "SemVer rules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:40
+msgid "Following SemVer, your bump your package version to a:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:42
+msgid "patch (1.1.1 --> 1.1.**2**)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:43
+msgid "minor (1.1.1 --> 1.**2**.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:44
+msgid "major (1.1.1 --> **2**.1.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:46
+msgid "version number change based on the following rules:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:48
+msgid "Given a version number MAJOR.MINOR.PATCH, increment the:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:50
+msgid "**MAJOR version** when you make incompatible API changes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:51
+msgid ""
+"**MINOR version** when you add functionality in a backwards compatible "
+"manner"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:52
+msgid ""
+"**PATCH version** when you make backwards compatible bug fixes Additional"
+" labels for pre-release and build metadata are available as extensions to"
+" the MAJOR.MINOR.PATCH format."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:57
+msgid ""
+"Some people prefer to use [calver](https://calver.org/index.html) for "
+"versioning. It may be a simpler-to-use system given it relies upon date "
+"values associated with released versions. However, calver does not "
+"provide a user with a sense of when a new version might break an existing"
+" build. As such we still suggest semver."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:60
+msgid ""
+"pyOpenSci will never require semver in a peer review as long as a package"
+" has a reasonable approach to versioning!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:64
+msgid "Avoid manually updating Python package version numbers if you can"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:66
+msgid ""
+"Often times you may want to have your package version value in multiple "
+"locations. One example of this is that it might be both an attribute in "
+"your package **version** and also called in your documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:71
+msgid ""
+"We recommend that you avoid manual updates of your package version number"
+" to avoid human-error. It is better practice to keep your version number "
+"in one location."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:75
+msgid ""
+"If you can't implement a single location version, then consider using a "
+"tool like hatch, PDM or bump2version that will update the version values "
+"for you - throughout your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:79
+msgid ""
+"Below we discuss some tools that you can use to manage updating Python "
+"package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:85
+msgid "Tools to manage versions for your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:87
+msgid ""
+"There are a handful of tools that are widely used in the scientific "
+"ecosystem that you can use to manage your package versions. Some of these"
+" tools are built into or work with your chosen [packaging build tools "
+"that discussed in this chapter.](python-package-build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:93
+msgid "Below, we provide an overview of these tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:99
+msgid ""
+"There are three general groups of tools that you can use to manage "
+"package versions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:102
+msgid ""
+"**semantic release tools:** These tools will automagically determine what"
+" type of version bump to use using the text in your commit messages. "
+"Below we discuss [Python Semantic Release](https://python-semantic-"
+"release.readthedocs.io/en/latest/) as a Python tool that implements a "
+"semantic versioning approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:104
+msgid ""
+"**Manual incremental bump tools:** Tools like "
+"[Hatch](https://hatch.pypa.io/latest/version/) offer version bumping "
+"within your package. Normally this is implemented at the command link for"
+" instance `hatch version major` would bump your project from 0.x to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:105
+msgid ""
+"**Version Control System tools:** Finally there are tools that rely on "
+"your version control system to track versions. These tools often are "
+"plugins to your package build tool (ex: setuptools build or hatchling). "
+"We discuss this option below assuming that you are using **.git tags** "
+"and **GitHub** to manage your package repository."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:107
+msgid "Semantic release, vs version control based vs manual version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:109
+msgid ""
+"Generally semantic release and version control system tools can be setup "
+"to run automatically on GitHub using GitHub Actions. This means that you "
+"can create a workflow where a GitHub release and associated new version "
+"tag is used to trigger an automated build that:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:115
+msgid "Builds your package and updates the version following the new tag"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:116
+msgid "Tests the build and publishes to test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:117
+msgid "Publishes the package to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:120
+msgid ""
+"Bumping a package version refers to the step of increasing the package "
+"version after a set number of changes have been made to it. For example, "
+"you might bump from version 0.8 to 0.9 of a package or from 0.9 to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:124
+msgid ""
+"Using semantic versioning, there are three main \"levels\" of versions "
+"that you might consider:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:127
+msgid "Major, minor and patch. These are described in more detail below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:130
+msgid "Tools for bumping Python package versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:132
+msgid ""
+"In this section we discuss the following tools for managing your Python "
+"package's version:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:135
+msgid "hatch &"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:136
+msgid "hatch_vcs plugin for hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:137
+msgid "setuptools-scm"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:138
+msgid "python-semantic-version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:140
+msgid "Tool 1: Hatch and other build tools that offer incremental versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:142
+msgid ""
+"Many of the modern build tool front end tools offer version support that "
+"follow semantic versioning rules. These tools are different from Python "
+"Semantic Version in that they do not require specific commit messages to "
+"implement version. Rather, they allow you to update the version at the "
+"command line using commands such as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:148
+msgid "`tool-name version update major`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:149
+msgid "`tool-name version update minor`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:151
+msgid ""
+"[Hatch](https://hatch.pypa.io/latest/version/), for instance offers "
+"`hatch version minor` which will modify the version of your package "
+"incrementally. With **Hatch** the version value will be found in your "
+"`pyproject.toml` file. "
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:154
+msgid "Hatch (or other tools like PDM) pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:156
+msgid "Easy to use version updates locally using a single tool!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:158
+msgid "Hatch (or other tools like PDM) cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:160
+msgid ""
+"There will be some setup involved to ensure package version is updated "
+"throughout your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:162
+msgid "Tool 2: Hatch_vcs & hatchling build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:164
+msgid ""
+"[hatch_vcs](https://github.com/ofek/hatch-vcs) is a versioning tool that "
+"allows you to manage package versions using **git tags**. Hatch_vcs "
+"creates a **\\_version.py** file in your package ecosystem that keeps "
+"track of the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:169
+msgid ""
+"Hatch keeps track of your package's version in a `_version.py` file. "
+"Storing the version in a single file managed by Hatch provides your "
+"package with a \"single source of truth\" value for the version number. "
+"This in turn eliminates potential error associated with manually updating"
+" your package's version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:175
+msgid ""
+"When you (or your CI system) build your package, hatch checks the current"
+" tag number for your package. If it has increased, it will update the "
+"**\\_version.py** file with the new value."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:178
+msgid ""
+"Thus, when you create a new tag or a new release with a tag and build "
+"your package, Hatch will access the new tag value and use it to update "
+"your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:181
+msgid ""
+"To use **hatch_vcs** you will need to use the **hatchling** build back "
+"end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:184
+msgid ""
+"Hatchling can also be used with any of the modern build tools including "
+"**Flit** and **PDM** if you prefer those for your day to day workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:189
+msgid "Hatch example setup in your pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:198
+msgid ""
+"**Hatch_vcs** supports a fully automated package release and build, and "
+"push to PyPI workflow on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:208
+msgid ""
+"If you use **setuptools_scm**, then you might find **hatch_vcs** and "
+"**hatchling** to be the modern equivalent to your current setuptools / "
+"build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:211
+msgid "hatch_vcs pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:213
+msgid "Hatch supports modern Python packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:214
+#: ../../package-structure-code/python-package-versions.md:240
+msgid "It creates a single-source file that contains your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:215
+#: ../../package-structure-code/python-package-versions.md:241
+msgid "You never manually update the package version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:216
+#: ../../package-structure-code/python-package-versions.md:242
+msgid ""
+"You can automate writing the version anywhere in your package including "
+"your documentation!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:217
+#: ../../package-structure-code/python-package-versions.md:243
+msgid ""
+"It supports a purely GitHub based release workflow. This simplifies "
+"maintenance workflows."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:218
+#: ../../package-structure-code/python-package-versions.md:244
+msgid ""
+"Version number is updated in your package via a hidden `_version.py` "
+"file. There is no manual configuration updates required."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:219
+#: ../../package-structure-code/python-package-versions.md:245
+msgid ""
+"While we like detailed commit messages (See Python Semantic Version "
+"below), we know that sometimes when maintaining a package specific "
+"guidelines around commit messages can be hard to apply and manage."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:221
+msgid "hatch_vcs cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:223
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub. But you could locally develop a build"
+" to \"bump\" tag versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:226
+msgid "Tool 3: setuptools-scm versioning using git tags"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:228
+msgid ""
+"[`Setuptools_scm`](https://github.com/pypa/setuptools-scm/) is an "
+"extension that you can use with setuptools to manage package versions. "
+"**Setuptools_scm** operates the same way that **hatch_vcs** (discussed "
+"above) does. It stores a version in a **\\_version.py** file and relies "
+"on (**git**) tags to determine the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:234
+msgid ""
+"If you are using **setuptools** as your primary build tool, then "
+"`*setuptools-scm` is a good choice as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:238
+msgid "setuptools_scm Pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:246
+msgid "**setuptools** is still the most commonly used Python packaging build tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:248
+msgid "setuptools_scm cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:250
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:251
+msgid "Not well documented"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:252
+msgid ""
+"Because setuptools will always have to support backwards compatibility it"
+" will always be slower in adopting modern Python packaging conventions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:254
+msgid ""
+"As such you might consider using a more modern tool such as **hatch_vcs**"
+" and **hatchling** to build your package and manage package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:266
+msgid ""
+"Tool 4: [Python semantic release](https://python-semantic-"
+"release.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:268
+msgid ""
+"Python semantic release uses a commit message workflow that updates the "
+"version of your package based on keywords found in your commit messages. "
+"As the name implies, Python Semantic Release follows semver release "
+"rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:273
+msgid ""
+"With Python Semantic Release, versions are triggered using specific "
+"language found in a git commit message."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:276
+msgid ""
+"For example, the words `fix(attribute_warning):` trigger Python Semantic "
+"Release to implement a **patch** version bump. For instance if your "
+"package was at version 1.1.0 and you made the commit below with the words"
+" fix(text-here), Python Semantic Release would bump your package to "
+"version 1.1.1."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:286
+msgid ""
+"Similarly a feature (`feat()`) triggers a minor version bump. For example"
+" from version 1.1 to version 1.2"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:294
+msgid ""
+"You can find a thoughtful discussion of python semantic version [in this "
+"Python package guide](https://py-pkgs.org/07-releasing-versioning"
+"#automatic-version-bumping). Note that the guide hasn't been updated "
+"since 2020 and will potentially be updated in the future! But for now, "
+"some of the commands are dated but the content is still excellent."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:297
+msgid "Python Semantic Release pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:299
+msgid "Follows semver versioning closely"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:300
+msgid ""
+"Enforces maintainers using descriptive commit messages which can simplify"
+" troubleshooting and ensure a cleaner and more self-describing git "
+"history."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:302
+msgid "Python Semantic Release cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:304
+msgid ""
+"Requires very specific commit language to work. In practice some "
+"maintainers and contributors may not be able to maintain that level of "
+"specificity in commit messages (NOTE: there are bots that will check git "
+"commit messages in a repo)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:305
+msgid ""
+"Release happens at the command line. This makes is harder to implement a "
+"GitHub based release workflow as the wrong commit message could trigger a"
+" release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:306
+msgid ""
+"The version number is manually updated in a configuration file such as "
+"`pyproject.toml` vs. in a package **\\_version.py** file."
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/tests.po b/locales/el/LC_MESSAGES/tests.po
new file mode 100644
index 000000000..8dee74b4f
--- /dev/null
+++ b/locales/el/LC_MESSAGES/tests.po
@@ -0,0 +1,1600 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tests/code-cov.md:1
+msgid "Code coverage for your Python package test suite"
+msgstr "Κάλυψη κώδικα για τη σουίτα δοκιμών του πακέτου Python σας"
+
+#: ../../tests/code-cov.md:3
+msgid ""
+"Code coverage measures how much of your package's code runs during "
+"testing. Achieving high coverage can help ensure the reliability of your "
+"codebase, but it’s not a guarantee of quality. Below, we outline key "
+"considerations for using code coverage effectively."
+msgstr ""
+"Η κάλυψη κώδικα μετρά πόσος από τον κώδικα του πακέτου σας εκτελείται "
+"κατά τη διάρκεια των δοκιμών. Η επίτευξη υψηλής κάλυψης μπορεί "
+"να βοηθήσει στη διασφάλιση της αξιοπιστίας της βάσης κώδικα του πακέτου σας, "
+"αλλά δεν αποτελεί εγγύηση ποιότητας. Παρακάτω παρουσιάζονται τα βασικά "
+"σημεία τα οποία πρέπει να λαμβάνονται υπόψη για την αποτελεσματική χρήση "
+"της κάλυψης κώδικα."
+
+#: ../../tests/code-cov.md:8
+msgid "Why aim for high code coverage?"
+msgstr ""
+
+#: ../../tests/code-cov.md:10
+msgid ""
+"A good practice is to ensure that every line of your code runs at least "
+"once during your test suite. This helps you:"
+msgstr ""
+
+#: ../../tests/code-cov.md:13
+msgid ""
+"**Identify untested parts:** Parts of your codebase that are not covered "
+"by tests."
+msgstr ""
+
+#: ../../tests/code-cov.md:15
+msgid "**Catch bugs:** Bugs that might otherwise go unnoticed."
+msgstr ""
+
+#: ../../tests/code-cov.md:16
+msgid "**Build confidence:** Confidence in your software's stability."
+msgstr ""
+
+#: ../../tests/code-cov.md:18
+msgid "Limitations of code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:20
+msgid "While high code coverage is valuable, it has its limits:"
+msgstr ""
+
+#: ../../tests/code-cov.md:22
+msgid ""
+"**Difficult-to-test code:** Some parts of your code might be challenging "
+"to test, either due to complexity or limited resources."
+msgstr ""
+
+#: ../../tests/code-cov.md:24
+msgid ""
+"**Missed edge cases:** Running all lines of code doesn't guarantee that "
+"edge cases are handled correctly."
+msgstr ""
+
+#: ../../tests/code-cov.md:27
+msgid ""
+"Ultimately, you should focus on how your package will be used and ensure "
+"your tests cover those scenarios adequately."
+msgstr ""
+
+#: ../../tests/code-cov.md:30
+msgid "Tools for analyzing Python package code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:32
+msgid ""
+"Some common services for analyzing code coverage are "
+"[codecov.io](https://about.codecov.io/) and "
+"[coveralls.io](https://coveralls.io/). These projects are free for open "
+"source tools and provide dashboards that show how much of your codebase "
+"is covered during your tests. We recommend setting up an account (on "
+"either CodeCov or Coveralls) and using it to keep track of your code "
+"coverage."
+msgstr ""
+
+#: ../../tests/code-cov.md:39
+#, python-format
+msgid ""
+"Screenshot of the code cov service - showing test coverage for the "
+"stravalib package. This image shows a list of package modules and the "
+"associated number of lines and % lines covered by tests. At the top of "
+"the image, you can see what branch is being evaluated and the path to the"
+" repository."
+msgstr ""
+
+#: ../../tests/code-cov.md:44
+msgid ""
+"The CodeCov platform is a useful tool if you wish to track code coverage "
+"visually. Using it, you can get the same summary information that you can"
+" get with the **pytest-cov** extension. You can also see what lines are "
+"covered by your tests and which are not. Code coverage is useful for "
+"evaluating [unit tests](test-types.md#unit-tests) and/or how much of your"
+" package code is \"covered\". It, however, will not evaluate things like "
+"[integration tests](test-types.md#integration-tests) and [end-to-end "
+"workflows](test-types.md)."
+msgstr ""
+
+#: ../../tests/code-cov.md:56
+msgid "Typing & MyPy coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:57
+msgid "You can also create and upload typing reports to CodeCov."
+msgstr ""
+
+#: ../../tests/code-cov.md:60
+msgid "Exporting Local Coverage Reports"
+msgstr ""
+
+#: ../../tests/code-cov.md:62
+msgid ""
+"In addition to using services like CodeCov or Coveralls, you can generate"
+" local coverage reports directly using the **coverage.py** tool. This can"
+" be especially useful if you want to create reports in Markdown or HTML "
+"format for offline use or documentation."
+msgstr ""
+
+#: ../../tests/code-cov.md:67
+msgid "To generate a coverage report in **Markdown** format, run:"
+msgstr ""
+
+#: ../../tests/code-cov.md:73
+msgid ""
+"This command will produce a Markdown-formatted coverage summary that you "
+"can include in project documentation or share with your team."
+msgstr ""
+
+#: ../../tests/code-cov.md:76
+msgid ""
+"To generate an HTML report that provides a detailed, interactive view of "
+"which lines are covered, use:"
+msgstr ""
+
+#: ../../tests/code-cov.md:83
+msgid ""
+"The generated HTML report will be saved in a directory named `htmlcov` by"
+" default. Open the `index.html` file in your browser to explore your "
+"coverage results."
+msgstr ""
+
+#: ../../tests/code-cov.md:87
+msgid ""
+"These local reports are an excellent way to quickly review coverage "
+"without setting up an external service."
+msgstr ""
+
+#: ../../tests/code-cov.md:90 ../../tests/run-tests-nox.md:168
+#: ../../tests/run-tests.md:332 ../../tests/test-types.md:346
+#: ../../tests/write-tests.md:136
+msgid "Next steps"
+msgstr ""
+
+#: ../../tests/code-cov.md:92
+msgid ""
+"Writing meaningful tests is the foundation of useful coverage. See [Write"
+" tests](write-tests.md) and [Test types](test-types.md) to learn more "
+"about developing better test suites. Learn how to run your tests both "
+"[locally](run-tests.md) and in [continuous integration](tests-ci.md)."
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Intro"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Write tests"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Test types"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests locally"
+msgstr ""
+
+#: ../../tests/index.md:70 ../../tests/run-tests-nox.md:7
+msgid "Run tests with Nox"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests online (using CI)"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Code coverage"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Create & Run Tests"
+msgstr ""
+
+#: ../../tests/index.md:2
+msgid "Tests and data for your Python package"
+msgstr ""
+
+#: ../../tests/index.md:4
+msgid ""
+"Adding tests to your package provides a set of checks that ensure that "
+"its functioning how you expect it to."
+msgstr ""
+
+#: ../../tests/index.md:7
+msgid ""
+"In this section, you will learn about the importance of writing tests for"
+" your Python package, different [types of tests that you should consider"
+"](test-types) and how you can set up infrastructure to run your tests "
+"both [locally](run-tests) and [on GitHub](tests-ci)."
+msgstr ""
+
+#: ../../tests/index.md:16
+msgid "✨ Why write tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:21
+msgid ""
+"Learn about the importance of writing tests for your Python package and "
+"how they help you and potential contributors."
+msgstr ""
+
+#: ../../tests/index.md:25
+msgid "✨ Types of tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:30
+msgid ""
+"Get to know the three test types: unit, integration, and end-to-end "
+"tests. Learn when and how to use each."
+msgstr ""
+
+#: ../../tests/index.md:34
+msgid "✨ Run tests locally ✨"
+msgstr ""
+
+#: ../../tests/index.md:39
+msgid ""
+"Learn about testing tools like pytest, nox, and tox to run tests across "
+"different Python versions on your computer. And explore examples of using"
+" Hatch with UV as a task runner to run tests across Python versions."
+msgstr ""
+
+#: ../../tests/index.md:43
+msgid "✨ Run tests locally (using nox) ✨"
+msgstr ""
+
+#: ../../tests/index.md:48
+msgid ""
+"Nox is a python powered task runner that can be used to run tests. Learn "
+"how to use nox to run tests."
+msgstr ""
+
+#: ../../tests/index.md:51
+msgid "✨ Run tests online (using CI) ✨"
+msgstr ""
+
+#: ../../tests/index.md:56
+msgid ""
+"Set up continuous integration with GitHub Actions to run tests across "
+"Python versions and operating systems."
+msgstr ""
+
+#: ../../tests/index.md:60
+msgid "✨ Code coverage ✨"
+msgstr ""
+
+#: ../../tests/index.md:65
+msgid ""
+"Measure how much of your package code runs during tests. Learn to "
+"generate local reports and visualize coverage online."
+msgstr ""
+
+#: ../../tests/run-tests.md:7
+msgid "Run tests for your Python package"
+msgstr ""
+
+#: ../../tests/run-tests.md:9
+msgid ""
+"Running your tests across different Python versions and operating systems"
+" is critical to ensuring your package works for your users. Your users "
+"may be running different versions of Python and operating systems than "
+"you are."
+msgstr ""
+
+#: ../../tests/run-tests.md:13
+msgid ""
+"This page teaches you how to run tests locally in isolated environments "
+"and across multiple Python versions. You'll learn about two main "
+"automation tools: [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/en/stable/index.html). In the next "
+"lesson, you will learn about running your tests online in [continuous "
+"integration (CI)](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:20
+msgid "Why run tests across multiple environments?"
+msgstr ""
+
+#: ../../tests/run-tests.md:22
+msgid ""
+"When you develop a package on your computer, it works in one specific "
+"environment: your Python version, your operating system, and your "
+"installed dependencies. Your users, however, will run your code in many "
+"different environments. By running your tests across multiple Python "
+"versions and operating systems, you catch compatibility issues before "
+"users do."
+msgstr ""
+
+#: ../../tests/run-tests.md:28
+msgid ""
+"Additionally, running tests in isolated environments ensures that your "
+"tests pass because of your code, not because of unexpected dependencies "
+"installed on your computer. This gives you confidence that your package "
+"will work when others install it."
+msgstr ""
+
+#: ../../tests/run-tests.md:33
+msgid ""
+"On this page, you will learn about the tools that you can use to both run"
+" tests in isolated environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:37
+msgid "**Related pages:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:39
+msgid "[Write tests](write-tests.md) for best practices on writing test suites"
+msgstr ""
+
+#: ../../tests/run-tests.md:41
+msgid ""
+"[Test types](test-types.md) to understand unit, integration, and end-to-"
+"end tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:43
+msgid "[Run tests online with CI](tests-ci.md) for GitHub Actions setup"
+msgstr ""
+
+#: ../../tests/run-tests.md:44
+msgid "[Code coverage](code-cov.md) to measure how much code your tests cover"
+msgstr ""
+
+#: ../../tests/run-tests.md:48
+msgid "Tools to run your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:50
+msgid ""
+"There are three categories of tools that will make it easier to setup and"
+" run your tests in various environments:"
+msgstr ""
+
+#: ../../tests/run-tests.md:53
+msgid ""
+"**Testing framework (pytest):** Provides the syntax and tools for writing"
+" and running your tests. Learn more from the [pytest "
+"documentation](https://docs.pytest.org/). Below you will learn about "
+"pytest, the most commonly used testing framework in the scientific Python"
+" ecosystem. Testing frameworks are essential for running tests, but they "
+"don't provide an easy way to run tests across Python versions or in "
+"isolated environments—that's where automation tools come in."
+msgstr ""
+
+#: ../../tests/run-tests.md:61
+msgid ""
+"**Automation tools (Nox, Tox, Hatch):** Allow you to run tests in "
+"isolated environments and across multiple Python versions with a single "
+"command. We focus on [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/) below. These tools create virtual "
+"environments automatically and ensure your tests run consistently. "
+"However, they typically only test on your local operating system."
+msgstr ""
+
+#: ../../tests/run-tests.md:69
+msgid ""
+"**Continuous Integration (CI):** Runs your tests online across different "
+"operating systems (Windows, Mac, and Linux) and Python versions. CI "
+"integrates with platforms like GitHub Actions to automatically test every"
+" pull request and code change."
+msgstr ""
+
+#: ../../tests/run-tests.md:74
+msgid "[Learn about CI here](ci-cd)."
+msgstr ""
+
+#: ../../tests/run-tests.md:76
+msgid "Quick comparison: what each tool does"
+msgstr ""
+
+#: ../../tests/run-tests.md:78
+msgid "**Testing Framework (pytest):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:80
+msgid "Runs your tests locally in your current Python environment"
+msgstr ""
+
+#: ../../tests/run-tests.md:81
+msgid "Provides the core syntax for writing tests (assertions, fixtures, etc.)"
+msgstr ""
+
+#: ../../tests/run-tests.md:83
+msgid "Can be extended with plugins (like pytest-cov for coverage)"
+msgstr ""
+
+#: ../../tests/run-tests.md:85
+msgid "**Automation Tools (Nox, Tox, Hatch):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:87
+msgid "Run tests locally across multiple Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:88
+msgid "Create and manage isolated virtual environments automatically"
+msgstr ""
+
+#: ../../tests/run-tests.md:89
+msgid "Can automate other tasks like building documentation"
+msgstr ""
+
+#: ../../tests/run-tests.md:90
+msgid "Make it easy to reproduce test environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:92
+msgid "**Continuous Integration (GitHub Actions):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:94
+msgid "Runs tests online automatically for every pull request"
+msgstr ""
+
+#: ../../tests/run-tests.md:95
+msgid "Tests across different operating systems (Windows, Mac, Linux)"
+msgstr ""
+
+#: ../../tests/run-tests.md:96
+msgid "Tests across multiple Python versions in parallel"
+msgstr ""
+
+#: ../../tests/run-tests.md:97
+msgid "Can automate deployments, releases, and other workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:99
+msgid "What testing framework / package should I use to run tests?"
+msgstr ""
+
+#: ../../tests/run-tests.md:101
+msgid ""
+"We recommend using `Pytest` to build and run your package tests. Pytest "
+"is the most common testing tool used in the Python ecosystem."
+msgstr ""
+
+#: ../../tests/run-tests.md:103
+msgid ""
+"[The Pytest package](https://docs.pytest.org/en/latest/) also has a "
+"number of extensions that can be used to add functionality such as:"
+msgstr ""
+
+#: ../../tests/run-tests.md:106
+msgid ""
+"[pytest-cov](https://pytest-cov.readthedocs.io/en/latest/) allows you to "
+"analyze the code coverage of your package during your tests, and "
+"generates a report that you can [upload to "
+"codecov](https://about.codecov.io/)."
+msgstr ""
+
+#: ../../tests/run-tests.md:108 ../../tests/tests-ci.md:7
+msgid "Todo"
+msgstr ""
+
+#: ../../tests/run-tests.md:109
+msgid "Learn more about code coverage here. (add link)"
+msgstr ""
+
+#: ../../tests/run-tests.md:113
+msgid ""
+"Your editor or IDE may add additional convenience for running tests, "
+"setting breakpoints, and toggling the `–no-cov` flag. Check your editor's"
+" documentation for more information."
+msgstr ""
+
+#: ../../tests/run-tests.md:116
+msgid "Run tests using pytest"
+msgstr ""
+
+#: ../../tests/run-tests.md:118
+msgid "If you are using **pytest**, you can run your tests locally by calling:"
+msgstr ""
+
+#: ../../tests/run-tests.md:121
+msgid "`pytest`"
+msgstr ""
+
+#: ../../tests/run-tests.md:123
+msgid ""
+"Or if you want to run a specific test file - let's call this file "
+"\"`test_module.py`\" - you can run:"
+msgstr ""
+
+#: ../../tests/run-tests.md:125
+msgid "`pytest test_module.py`"
+msgstr ""
+
+#: ../../tests/run-tests.md:127
+msgid ""
+"Learn more about pytest [here](https://docs.pytest.org/en/stable/getting-"
+"started.html)."
+msgstr ""
+
+#: ../../tests/run-tests.md:129
+msgid ""
+"Running pytest on your computer is going to run your tests in whatever "
+"Python environment you currently have activated. This means that tests "
+"will be run on a single version of Python and only on the operating "
+"system that you are running locally."
+msgstr ""
+
+#: ../../tests/run-tests.md:134
+msgid ""
+"An automation tool can simplify the process of running tests in various "
+"Python environments."
+msgstr ""
+
+#: ../../tests/run-tests.md:137
+msgid "Tests across operating systems"
+msgstr ""
+
+#: ../../tests/run-tests.md:138
+msgid ""
+"If you want to run your tests on different operating systems you can use "
+"continuous integration. [Learn more here](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:141
+msgid "Tools to automate running your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:143
+msgid ""
+"To run tests on various Python versions or in various specific "
+"environments with a single command, you can use an automation tool such "
+"as `nox` or `tox`. Both `nox` and `tox` can create an isolated virtual "
+"environments. This allows you to easily run your tests in multiple "
+"environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:146
+msgid ""
+"We will focus on Hatch on this page as Hatch is the default tool that we "
+"use in our [tutorials](create-pure-python-package) and for our [Python "
+"package template](https://github.com/pyOpenSci/pyos-package-template)."
+msgstr ""
+
+#: ../../tests/run-tests.md:149
+msgid ""
+"If you are not a hatch fan, then [Nox](https://nox.thea.codes/) is an "
+"alternative tool that we cover in the next lesson. `nox` is a Python-"
+"based automation tool that builds upon the features of both `make` and "
+"`tox`. `nox` is designed to simplify and streamline testing and "
+"development workflows. Everything that you do with `nox` can be "
+"implemented using a Python-based interface. You will learn more about "
+"using nox [here](run-tests-nox)."
+msgstr ""
+
+#: ../../tests/run-tests.md:151
+msgid "Other automation tools you'll see in the wild"
+msgstr ""
+
+#: ../../tests/run-tests.md:154
+msgid ""
+"**[Tox](https://tox.wiki/en/latest/index.html#useful-links)** is an "
+"automation tool that supports common steps such as building "
+"documentation, running tests across various versions of Python, and more."
+msgstr ""
+
+#: ../../tests/run-tests.md:159
+msgid ""
+"**[Make](https://www.gnu.org/software/make/manual/make.html)** is a build"
+" automation tool that some developers use for running tests due to its "
+"versatility. However, Make's unique syntax can be challenging to learn, "
+"and it won't manage environments for you like Hatch and Nox do."
+msgstr ""
+
+#: ../../tests/run-tests.md:166
+msgid "Run tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:168
+msgid ""
+"**Hatch** is a modern Python packaging and environment manager that "
+"integrates test running capabilities directly into your `pyproject.toml`."
+" Unlike Nox (which uses a separate `noxfile.py`), Hatch keeps all your "
+"project configuration in one place, making it ideal if you're already "
+"using Hatch for packaging workflows."
+msgstr ""
+
+#: ../../tests/run-tests.md:174
+msgid "Why Hatch for testing?"
+msgstr ""
+
+#: ../../tests/run-tests.md:176
+msgid "Configuration lives in `pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:178
+msgid "Integrates seamlessly with Hatch's packaging and build workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:179
+msgid "No separate Python file needed (unlike Nox)"
+msgstr ""
+
+#: ../../tests/run-tests.md:180
+msgid "Easy to share standardized test environments across your team"
+msgstr ""
+
+#: ../../tests/run-tests.md:182
+msgid "Setting up Hatch environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:184
+msgid ""
+"Hatch environments are defined in your `pyproject.toml`. Rather than "
+"duplicating dependencies, use `dependency-groups` to reference your test "
+"dependencies:"
+msgstr ""
+
+#: ../../tests/run-tests.md:205
+msgid ""
+"This approach keeps your test dependencies in one place and avoids "
+"duplication. For a complete example, see our [packaging template "
+"tutorial](https://www.pyopensci.org/tutorials/create-python-package.html)"
+" which shows a full `pyproject.toml` configuration."
+msgstr ""
+
+#: ../../tests/run-tests.md:210
+msgid "Running tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:212
+msgid ""
+"Once you've defined your test environment, you can run tests with simple "
+"commands:"
+msgstr ""
+
+#: ../../tests/run-tests.md:215
+msgid "**List available environments:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:221
+msgid "**Run pytest in the test environment:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:228
+msgid "Testing across Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:230
+msgid ""
+"To test across multiple Python versions, define a matrix in your "
+"`pyproject.toml`:"
+msgstr ""
+
+#: ../../tests/run-tests.md:249
+msgid "Then run all versions with a single command:"
+msgstr ""
+
+#: ../../tests/run-tests.md:255
+msgid ""
+"Hatch will automatically run your tests on Python 3.10, 3.11, and 3.12. "
+"If you only want to test a specific Python version:"
+msgstr ""
+
+#: ../../tests/run-tests.md:262
+msgid "Using Hatch in GitHub Actions"
+msgstr ""
+
+#: ../../tests/run-tests.md:264
+msgid "Hatch integrates well with CI/CD. Here's a minimal GitHub Actions setup:"
+msgstr ""
+
+#: ../../tests/run-tests.md:288
+msgid ""
+"Since all of your test dependencies are declared in the `dependency-"
+"group` table of your `pyproject.toml`, your CI environment is "
+"reproducible and consistent with the environments that you are using for "
+"local testing."
+msgstr ""
+
+#: ../../tests/run-tests.md:292
+msgid "Nox vs Hatch: choosing the right tool"
+msgstr ""
+
+#: ../../tests/run-tests.md:294
+msgid ""
+"Both Hatch and Nox are excellent automation tools / task runners for "
+"running tests across Python versions. Here's how they compare to help you"
+" decide which fits your workflow:"
+msgstr ""
+
+#: ../../tests/run-tests.md:298
+msgid "Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:300
+msgid ""
+"**Configuration:** Hatch uses a `declarative` configuration approach. You"
+" tell it what goes into an environment and that empowers Hatch to create "
+"the environment for you. All configuration settings live in your "
+"`pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:302
+msgid ""
+"**Integration:** Hatch is package management tool that also has an "
+"integrated automation / task runner. Using Hatch means you are using the "
+"same tool for all of your packaging and automation needs."
+msgstr ""
+
+#: ../../tests/run-tests.md:303
+msgid ""
+"**Learning curve:** Easier if you prefer declarative configuration over a"
+" code based workflow"
+msgstr ""
+
+#: ../../tests/run-tests.md:304
+msgid ""
+"**packaging scope** Hatch is better for simpler workflows that focus on "
+"testing and packaging. If you have more complex builds or are creating a "
+"non pure python package you might prefer Nox. The scientific Python "
+"development guide has more details on this."
+msgstr ""
+
+#: ../../tests/run-tests.md:305
+msgid ""
+"**Best for:** Teams using Hatch for packaging, or those who want "
+"standardized configuration in one place"
+msgstr ""
+
+#: ../../tests/run-tests.md:308
+msgid "Nox"
+msgstr ""
+
+#: ../../tests/run-tests.md:310
+msgid "**Configuration:** Python-driven via `noxfile.py` for maximum flexibility"
+msgstr ""
+
+#: ../../tests/run-tests.md:311
+msgid "**Customization:** Great for complex workflows that need custom logic"
+msgstr ""
+
+#: ../../tests/run-tests.md:312
+msgid ""
+"**Learning curve:** Easier if you already know Python and want flexible "
+"session control"
+msgstr ""
+
+#: ../../tests/run-tests.md:314
+msgid ""
+"**Best for:** Complex automation needs, building docs alongside tests, or"
+" workflows that don't fit the standard model"
+msgstr ""
+
+#: ../../tests/run-tests.md:317
+msgid "What we recommend"
+msgstr ""
+
+#: ../../tests/run-tests.md:319
+msgid ""
+"**If you're using Hatch for packaging:** Use Hatch for testing too. You "
+"get everything in one place and one consistent tool."
+msgstr ""
+
+#: ../../tests/run-tests.md:322
+msgid ""
+"**If you need maximum flexibility:** Choose Nox. Its Python-driven "
+"approach lets you implement almost any workflow."
+msgstr ""
+
+#: ../../tests/run-tests.md:325
+msgid ""
+"**If you're just starting out:** Start with Hatch. It's simpler to set up"
+" and understand, and you can always switch to Nox later if you need to."
+msgstr ""
+
+#: ../../tests/run-tests.md:328
+msgid ""
+"**Both tools are good choices.** For a more comprehensive guide to using"
+" Nox, see [Run tests with Nox](run-tests-nox.md) and the [Scientific "
+"Python testing guide](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests.md:334
+msgid ""
+"Now that you understand how to run tests locally across Python versions, "
+"you can learn about [running tests automatically in GitHub Actions with "
+"continuous integration](tests-ci). You can also review [test types](test-"
+"types) and [write tests](write-tests) for your package."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:9
+msgid ""
+"**Nox** is a Python-based automation tool for running tests across "
+"multiple Python versions and managing isolated test environments. If you "
+"prefer Python-driven configuration over TOML, or need complex automation "
+"workflows, Nox is an excellent choice."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:14
+msgid ""
+"For more information about Nox, see the [official Nox "
+"documentation](https://nox.thea.codes/) or the [Scientific Python guide "
+"to testing](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:18
+msgid "Why Nox?"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:20
+msgid "**Nox** is a great automation tool because it:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:22
+msgid "Is Python-based, making it accessible if you already know Python"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:23
+msgid "Will create isolated environments to run workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:24
+msgid "Supports complex, custom automation beyond standard testing"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:25
+msgid "Is flexible and powerful for intricate build and test scenarios"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:27
+msgid ""
+"`nox` simplifies creating and managing testing environments. With `nox`, "
+"you can set up virtual environments and run tests across Python versions "
+"using the environment manager of your choice with a single command."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:31
+msgid "Set up Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:33
+msgid ""
+"To get started with Nox, you create a `noxfile.py` file at the root of "
+"your project directory. You then define commands using Python functions."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:37
+msgid "Nox installations"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:39
+msgid ""
+"When you install and use Nox to run tests across different Python "
+"versions, Nox will create and manage individual `venv` environments for "
+"each Python version that you specify in the Nox function. Nox will manage"
+" each environment on its own."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:45
+msgid ""
+"Nox can also be used for other development tasks such as building "
+"documentation, creating your package distribution, and testing "
+"installations across both PyPI-related environments (e.g., venv, "
+"virtualenv) and `conda` (e.g., `conda-forge`)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:50
+msgid "Test environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:52
+msgid ""
+"By default, `nox` uses Python's built-in `venv` environment manager. A "
+"virtual environment (`venv`) is a self-contained Python environment that "
+"allows you to isolate and manage dependencies for different Python "
+"projects. It helps ensure that project-specific libraries and packages do"
+" not interfere with each other, promoting a clean and organized "
+"development environment."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:58
+msgid "Nox with venv environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:60
+msgid ""
+"Below is an example of setting up Nox to run tests using `venv`, which is"
+" the built-in environment manager that comes with base Python."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:63
+msgid ""
+"Note that the example below assumes that you have setup your "
+"`pyproject.toml` to declare test dependencies using `project.optional-"
+"dependencies`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:83
+msgid ""
+"With this setup, you can use `session.install(\".[tests]\")` to install "
+"your test dependencies. Notice that below one single Nox session allows "
+"you to run your tests on 4 different Python environments (Python 3.9, "
+"3.10, 3.11, and 3.12)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:89
+msgid ""
+"For this to run you will need to have python3.9, python3.10, python3.11, "
+"and python3.12 installed on your computer. Otherwise nox will skip "
+"running tests for whatever versions are missing."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:107
+msgid ""
+"Above you create a Nox session in the form of a function with a "
+"`@nox.session` decorator. Notice that within the decorator you declare "
+"the versions of Python that you wish to run."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:111
+msgid ""
+"To run the above, you'd execute the following command, specifying which "
+"session with `--session` (sometimes shortened to `-s`). Your function "
+"above is called `test`, therefore the session name is `test`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:119
+msgid "Nox with conda / mamba"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:121
+msgid ""
+"Below is an example for setting up Nox to use mamba (or conda) for your "
+"environment manager. Unlike venv, conda can automatically install the "
+"various versions of Python that you need. You won't need to install all "
+"four Python versions if you use conda/mamba, like you do with `venv`."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:127
+msgid ""
+"For `conda` to work with `nox`, you will need to ensure that either "
+"`conda` or `mamba` is installed on your computer."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:150
+msgid "To run the above session you'd use:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:156
+msgid "Hatch vs Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:158
+msgid ""
+"If you're trying to decide between Hatch and Nox, see the [comparison and"
+" recommendations on the main testing page](run-tests.md)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:161
+msgid "In summary"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:163
+msgid ""
+"**Choose Hatch** if you're already using Hatch for packaging and want "
+"everything in one place"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:165
+msgid ""
+"**Choose Nox** if you need maximum flexibility, prefer Python-driven "
+"configuration, or need complex automation workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:170
+msgid ""
+"Now that you understand how to run tests locally with Nox, you can learn "
+"about [running tests automatically with continuous integration](tests-ci)"
+" or [running tests with Hatch](run-tests.md)."
+msgstr ""
+
+#: ../../tests/test-types.md:1
+msgid "Test Types for Python packages"
+msgstr ""
+
+#: ../../tests/test-types.md:3
+msgid "Three types of tests: unit, integration, and functional tests"
+msgstr ""
+
+#: ../../tests/test-types.md:5
+msgid ""
+"There are different types of tests that you want to consider when "
+"creating your test suite:"
+msgstr ""
+
+#: ../../tests/test-types.md:8 ../../tests/test-types.md:15
+msgid "Unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:9 ../../tests/test-types.md:93
+msgid "Integration tests"
+msgstr ""
+
+#: ../../tests/test-types.md:10
+msgid "End-to-end (also known as functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:12
+msgid ""
+"Each type of test has a different purpose. Here, you will learn about all"
+" three types of tests by working through simple examples."
+msgstr ""
+
+#: ../../tests/test-types.md:17
+msgid ""
+"A unit test involves testing individual components or units of code in "
+"isolation to ensure that they work correctly. The goal of unit testing is"
+" to verify that each part of the software, typically at the function or "
+"method level, performs its intended task correctly."
+msgstr ""
+
+#: ../../tests/test-types.md:22
+msgid ""
+"Unit tests can be compared to examining each piece of your puzzle to "
+"ensure parts or subsections of it are not broken. If all of the pieces of"
+" that section of your puzzle don't fit together, you will never complete "
+"it. Similarly, when working with code, tests ensure that each function, "
+"attribute, class, and method works properly when isolated."
+msgstr ""
+
+#: ../../tests/test-types.md:28
+msgid ""
+"**Unit test example:** Suppose you have a function that adds two numbers "
+"together. A unit test for that function ensures that when provided with "
+"two numbers, it returns the correct sum. This is a unit test because it "
+"checks a single unit (function) in isolation."
+msgstr ""
+
+#: ../../tests/test-types.md:54
+msgid ""
+"Example unit test for the above function. You'd run this test using the "
+"`pytest` command in your **tests/** directory."
+msgstr ""
+
+#: ../../tests/test-types.md:76
+msgid ""
+"Notice that the tests above don't just test one case where numbers are "
+"added together. Instead, they test multiple scenarios: adding positive "
+"numbers, adding a negative number, and adding zero. This helps ensure "
+"that the `add_numbers` function behaves correctly in different situations"
+" and is the beginning of thinking about programming defensively."
+msgstr ""
+
+#: ../../tests/test-types.md:83
+msgid ""
+"You can run this test from your terminal using `pytest "
+"tests/test_math_utils.py`."
+msgstr ""
+
+#: ../../tests/test-types.md:86 ../../tests/test-types.md:215
+msgid ""
+"image of puzzle pieces that all fit together nicely. The puzzle pieces "
+"are colorful - purple, green and teal."
+msgstr ""
+
+#: ../../tests/test-types.md:90
+msgid ""
+"Your unit tests should ensure each part of your code works as expected on"
+" its own."
+msgstr ""
+
+#: ../../tests/test-types.md:95
+msgid ""
+"Integration tests involve testing how parts of your package work together"
+" or integrate. Integration tests can be compared to connecting a bunch of"
+" puzzle pieces together to form a whole picture. Integration tests focus "
+"on how different pieces of your code fit and work together."
+msgstr ""
+
+#: ../../tests/test-types.md:100
+msgid ""
+"For example, suppose you have functions that convert temperatures and "
+"calculate statistics. An integration test would ensure that these "
+"functions work together correctly in a workflow where you convert "
+"temperatures and then analyze them."
+msgstr ""
+
+#: ../../tests/test-types.md:178
+msgid ""
+"Here's an integration test that checks how the conversion and statistics "
+"functions work together:"
+msgstr ""
+
+#: ../../tests/test-types.md:204
+msgid ""
+"This integration test verifies that the conversion and averaging "
+"functions work together as expected in a real workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:207
+msgid ""
+"image of two puzzle pieces with some missing parts. The puzzle pieces are"
+" purple teal yellow and blue. The shapes of each piece don’t fit "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:212
+msgid ""
+"If puzzle pieces have missing ends, they can’t work together with other "
+"elements in the puzzle. The same is true with individual functions, "
+"methods and classes in your software. The code needs to work both "
+"individually and together to perform certain sets of tasks."
+msgstr ""
+
+#: ../../tests/test-types.md:220
+msgid ""
+"Your integration tests should ensure that parts of your code that are "
+"expected to work together, do so as expected."
+msgstr ""
+
+#: ../../tests/test-types.md:224
+msgid "End-to-end (functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:226
+msgid ""
+"End-to-end tests (also referred to as functional tests) in Python are "
+"like comprehensive checklists for your software. They simulate real user "
+"workflows to make sure the code base supports real-life applications and "
+"use-cases from start to finish. These tests help catch issues that might "
+"not show up in smaller tests and ensure your entire application behaves "
+"correctly. Think of them as a way to give your software a final check "
+"before it's put into action, making sure it's ready to deliver a smooth "
+"user experience."
+msgstr ""
+
+#: ../../tests/test-types.md:235
+msgid "Image of a completed puzzle showing a daisy"
+msgstr ""
+
+#: ../../tests/test-types.md:240
+msgid ""
+"End-to-end or functional tests represent an entire workflow that your "
+"package supports."
+msgstr ""
+
+#: ../../tests/test-types.md:244
+msgid ""
+"**End-to-end test example:** Let's say your package opens and "
+"processes/converts temperature data from Celsius to Fahrenheit and then "
+"calculates the average temperature. An end-to-end test would simulate "
+"this entire workflow, ensuring that the package correctly handles the "
+"input temperature data and returns a summary average value. An end-to-end"
+" test would provide sample data, run the entire workflow, and verify that"
+" the final output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:274
+msgid ""
+"This end-to-end test exercises the entire user workflow: providing sample"
+" data, converting and averaging it, and verifying the output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:278
+msgid ""
+"End-to-end tests also verify how a program runs from start to finish. A "
+"tutorial that you add to your documentation and run in CI is another "
+"example of an end-to-end test. For example, a Jupyter (`.ipynb`) notebook"
+" or `.md` file with embedded code that demonstrates a complete user "
+"workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:285
+msgid ""
+"For scientific packages, creating short tutorials that highlight core "
+"workflows that your package supports, that are run when your "
+"documentation is built, could also serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:290
+msgid "When to use which test type"
+msgstr ""
+
+#: ../../tests/test-types.md:292
+msgid ""
+"If you’re new to testing, start with unit tests. They are the simplest to"
+" write, fastest to run, and easiest to debug. As your package grows, you "
+"can then add integration and end-to-end tests where they add the most "
+"value."
+msgstr ""
+
+#: ../../tests/test-types.md:294
+msgid "Start by writing unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:296
+msgid "Are you testing a single function, method, or class in isolation?"
+msgstr ""
+
+#: ../../tests/test-types.md:298
+msgid "→ Yes: Write a [unit test](test-types.md#unit-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:300
+msgid "Example: Check that add_numbers(2, 3) returns 5"
+msgstr ""
+
+#: ../../tests/test-types.md:301
+msgid "Unit tests don’t rely on other parts of your code"
+msgstr ""
+
+#: ../../tests/test-types.md:302
+msgid "These tests form the foundation of your test suite"
+msgstr ""
+
+#: ../../tests/test-types.md:303
+msgid "If something breaks, unit tests make it easy to find where"
+msgstr ""
+
+#: ../../tests/test-types.md:305
+msgid "Add integration tests next"
+msgstr ""
+
+#: ../../tests/test-types.md:307
+msgid "Are you testing how multiple components work together?"
+msgstr ""
+
+#: ../../tests/test-types.md:309
+msgid "→ **Yes:** Write [integration tests](test-types.md#integration-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:311
+msgid "Example: Converting temperatures and then computing their average"
+msgstr ""
+
+#: ../../tests/test-types.md:312
+msgid "Integration tests assume individual pieces already work"
+msgstr ""
+
+#: ../../tests/test-types.md:313
+msgid "These tests verify that components interact correctly"
+msgstr ""
+
+#: ../../tests/test-types.md:315
+msgid "Use end-to-end tests for core workflows"
+msgstr ""
+
+#: ../../tests/test-types.md:317
+msgid "Are you testing a complete, realistic user workflow from start to finish?"
+msgstr ""
+
+#: ../../tests/test-types.md:319
+msgid ""
+"→ **Yes:** Use an [end-to-end test](test-types.md#end-to-end-functional-"
+"tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:321
+msgid "Example: Run a full data-processing workflow a user would follow"
+msgstr ""
+
+#: ../../tests/test-types.md:322
+msgid "These tests often mirror examples in your documentation"
+msgstr ""
+
+#: ../../tests/test-types.md:323
+msgid "Use them sparingly for the most important workflows."
+msgstr ""
+
+#: ../../tests/test-types.md:324
+msgid "Tutorials run during documentation builds can serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:326
+msgid "Comparing unit, integration, and end-to-end tests"
+msgstr ""
+
+#: ../../tests/test-types.md:328
+msgid ""
+"Unit tests, integration tests, and end-to-end tests have complementary "
+"advantages and disadvantages. The fine-grained nature of unit tests makes"
+" them well-suited for isolating where errors are occurring. However, unit"
+" tests are not useful for verifying that different sections of code work "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:334
+msgid ""
+"Integration and end-to-end tests verify that different portions of the "
+"program work together, but are less valuable for immediately isolating "
+"exactly where errors are occurring."
+msgstr ""
+
+#: ../../tests/test-types.md:338
+msgid "Tests don't have to be perfect"
+msgstr ""
+
+#: ../../tests/test-types.md:339
+msgid ""
+"It is important to note that you don't need to spend energy worrying "
+"about the specifics of test types. When you begin to work on your test "
+"suite, consider what your package does and how you may need to test parts"
+" of it. Being familiar with different test types provides a framework to "
+"help you think about writing tests and how they can complement each "
+"other."
+msgstr ""
+
+#: ../../tests/test-types.md:348
+msgid ""
+"Now that you understand test types, learn how to [write effective tests"
+"](write-tests) for your package. Then explore how to [run tests locally"
+"](run-tests) and in [continuous integration](tests-ci). You can also "
+"learn about tracking test coverage using tools like [CodeCov](code-cov)."
+msgstr ""
+
+#: ../../tests/tests-ci.md:1
+msgid "Run tests with Continuous Integration"
+msgstr ""
+
+#: ../../tests/tests-ci.md:3
+msgid ""
+"Running your [test suite locally](run-tests) is useful as you develop "
+"code and also test new features or changes to the code base. However, you"
+" also will want to setup Continuous Integration (CI) to run your tests "
+"online. CI allows you to run all of your tests in the cloud. While you "
+"may only be able to run tests locally on a specific operating system, "
+"using CI you can specify tests to run both on various versions of Python "
+"and across different operating systems."
+msgstr ""
+
+#: ../../tests/tests-ci.md:5
+msgid ""
+"CI can also be triggered for pull requests and pushes to your repository."
+" This means that every pull request that you, your maintainer team or a "
+"contributor submit, can be tested. In the end CI testing ensures your "
+"code continues to run as expected even as changes are made to the code "
+"base."
+msgstr ""
+
+#: ../../tests/tests-ci.md:9
+msgid ""
+"Learn more about Continuous Integration and how it can be used, here. "
+"(add link)"
+msgstr ""
+
+#: ../../tests/tests-ci.md:13
+msgid "CI & pull requests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:15
+msgid ""
+"CI is invaluable if you have outside people contributing to your "
+"software. You can setup CI to run on all pull requests submitted to your "
+"repository. CI can make your repository more friendly to new potential "
+"contributors. It allows users to contribute code, documentation fixes and"
+" more without having to create development environments, run tests and "
+"build documentation locally."
+msgstr ""
+
+#: ../../tests/tests-ci.md:22
+msgid "Example GitHub Actions that runs tests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:24
+msgid ""
+"Below is an example GitHub Actions that runs tests using nox across both "
+"Windows, Mac and Linux and on Python versions 3.9-3.11."
+msgstr ""
+
+#: ../../tests/tests-ci.md:28
+msgid ""
+"To work properly, this file should be located in a root directory of your"
+" GitHub repository:"
+msgstr ""
+
+#: ../../tests/write-tests.md:1
+msgid "Write tests for your Python package"
+msgstr ""
+
+#: ../../tests/write-tests.md:3
+msgid ""
+"**Writing code** that tests your package code, also known as test suites,"
+" is important for you as a maintainer, your users, and package "
+"contributors. Test suites consist of sets of functions, methods, and "
+"classes that are written with the intention of making sure a specific "
+"part of your code works as you expected it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:9
+msgid "Why write tests for your package?"
+msgstr ""
+
+#: ../../tests/write-tests.md:11
+msgid ""
+"Tests act as a safety net for code changes. They help you identify and "
+"fix bugs before they affect users. Tests also instill confidence that "
+"code changes from contributors won't break existing functionality."
+msgstr ""
+
+#: ../../tests/write-tests.md:15
+msgid "Writing tests for your Python package is important because:"
+msgstr ""
+
+#: ../../tests/write-tests.md:17
+msgid ""
+"**Catch mistakes:** Tests are a safety net. When you make changes or add "
+"new features to your package, tests can quickly tell you if you "
+"accidentally broke something that was working fine before."
+msgstr ""
+
+#: ../../tests/write-tests.md:20
+msgid ""
+"**Save time:** Imagine you have a magic button that can automatically "
+"check if your package is still working properly. Tests are like that "
+"magic button! They can run all those checks for you, saving you time."
+msgstr ""
+
+#: ../../tests/write-tests.md:23
+msgid ""
+"**Easier collaboration:** If you're working with others or have outside "
+"contributors, tests help everyone stay on the same page. Your tests "
+"explain how your package is supposed to work, making it easier for others"
+" to understand and contribute to your project."
+msgstr ""
+
+#: ../../tests/write-tests.md:27
+msgid ""
+"**Fearless refactoring:** Refactoring means making improvements to your "
+"code structure without changing its behavior. Tests empower you to make "
+"these changes; if you break something, test failures will let you know."
+msgstr ""
+
+#: ../../tests/write-tests.md:30
+msgid ""
+"**Documentation:** Tests serve as technical examples of how to use your "
+"package. This can be helpful for new technical contributors who want to "
+"contribute code to your package. They can look at your tests to "
+"understand how parts of your code functionality fits together."
+msgstr ""
+
+#: ../../tests/write-tests.md:34
+msgid ""
+"**Long-term ease of maintenance:** As your package evolves, tests ensure "
+"that your code continues to behave as expected, even as you make changes "
+"over time. Thus you are helping your future self when writing tests."
+msgstr ""
+
+#: ../../tests/write-tests.md:38
+msgid ""
+"**Easier pull request reviews:** By running your tests in a CI framework "
+"such as GitHub Actions, each time you or a contributor makes a change to "
+"your code-base, you can catch issues and things that may have changed in "
+"your code base. This ensures that your software behaves the way you "
+"expect it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:44
+msgid "Tests for user edge cases"
+msgstr ""
+
+#: ../../tests/write-tests.md:46
+msgid ""
+"Edge cases refer to unexpected or \"outlier\" ways that some users may "
+"use your package. Tests enable you to address various edge cases that "
+"could impair your package's functionality. For example, what occurs if a "
+"function expects a pandas `dataframe` but a user supplies a numpy "
+"`array`? Does your code gracefully handle this situation, providing clear"
+" feedback, or does it leave users frustrated by an unexplained failure?"
+msgstr ""
+
+#: ../../tests/write-tests.md:55
+msgid ""
+"For a good introduction to testing, see [this Software Carpentry "
+"lesson](https://swcarpentry.github.io/python-novice-"
+"inflammation/10-defensive.html)"
+msgstr ""
+
+#: ../../tests/write-tests.md:59
+msgid "Test examples"
+msgstr ""
+
+#: ../../tests/write-tests.md:62
+msgid "Let's say you have a Python function that adds two numbers together."
+msgstr ""
+
+#: ../../tests/write-tests.md:84
+msgid ""
+"A test to ensure that function runs as you might expect when provided "
+"with different numbers might look like this:"
+msgstr ""
+
+#: ../../tests/write-tests.md:103
+msgid "🧩🐍 How do you know what type of tests to write?"
+msgstr ""
+
+#: ../../tests/write-tests.md:105
+msgid "As you begin to write tests for your package, you should consider:"
+msgstr ""
+
+#: ../../tests/write-tests.md:107
+msgid ""
+"there are [three types of tests Test Types for Python Packages](test-"
+"types.md) that can help guide your development."
+msgstr ""
+
+#: ../../tests/write-tests.md:108
+msgid ""
+"your tests should consider how a user might use (and misuse!) your "
+"package."
+msgstr ""
+
+#: ../../tests/write-tests.md:111
+msgid ""
+"This section has been adapted from [a presentation by Nick "
+"Murphy](https://zenodo.org/records/8185113)."
+msgstr ""
+
+#: ../../tests/write-tests.md:115
+msgid "But, what should you be testing in your package? Below are a few examples:"
+msgstr ""
+
+#: ../../tests/write-tests.md:118
+msgid ""
+"**Test some typical cases:** Test that the package functions as you "
+"expect it to when users use it. For instance, if your package is supposed"
+" to add two numbers, test that the outcome value of adding those two "
+"numbers is correct."
+msgstr ""
+
+#: ../../tests/write-tests.md:123
+msgid ""
+"**Test special cases:** Sometimes there are special or outlier cases. For"
+" instance, if a function performs a specific calculation that may become "
+"problematic closer to the value of 0, test it with the input of both 0 "
+"and nearby values."
+msgstr ""
+
+#: ../../tests/write-tests.md:128
+msgid ""
+"**Test at and near expected boundaries:** If a function requires a value "
+"that is greater than or equal to 1, make sure that the function still "
+"works with the values 1 and 0.999, as well as 1.001 (values close to the "
+"constraint). Make sure that the function fails gracefully when given "
+"unexpected values and that the user can easily understand why it failed "
+"by providing a useful error message."
+msgstr ""
+
+#: ../../tests/write-tests.md:138
+msgid ""
+"Now that you understand what and why to test, explore the [three types of"
+" tests](test-types.md) (unit, integration, and end-to-end) to determine "
+"which style of tests best fits your package. Then, learn how to [run your"
+" tests locally](run-tests.md) and [in continuous integration](tests-"
+"ci.md). Finally, track your progress with [code coverage](code-cov.md) "
+"metrics."
+msgstr ""
diff --git a/locales/el/LC_MESSAGES/tutorials.po b/locales/el/LC_MESSAGES/tutorials.po
new file mode 100644
index 000000000..b013f93dc
--- /dev/null
+++ b/locales/el/LC_MESSAGES/tutorials.po
@@ -0,0 +1,6886 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: el\n"
+"Language-Team: el \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tutorials/add-license-coc.md:6
+msgid "Add a `LICENSE` & `CODE_OF_CONDUCT` to your Python package"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:8
+msgid "In the [previous lesson](add-readme) you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:10
+msgid ""
+" "
+"Created a basic `README.md` file for your scientific Python package"
+msgstr ""
+"Δημιουργούμε ένα αρχείο `README.md` για το επιστημονικό Python package"
+
+#: ../../tutorials/add-license-coc.md:12
+msgid ""
+" "
+"Learned about the core components that are useful to have in a `README` "
+"file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:14 ../../tutorials/add-readme.md:15
+msgid "Learning objectives"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:17 ../../tutorials/add-readme.md:17
+#: ../../tutorials/pyproject-toml.md:30
+msgid "In this lesson you will learn:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:19
+msgid ""
+"How to select a license and add a `LICENSE` file to your package "
+"repository, with a focus on the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:20
+msgid "How to add a `CODE_OF_CONDUCT` file to your package repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:21
+msgid ""
+"How you can use the Contributors Covenant website to add generic language"
+" as a starting place for your `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:24
+msgid "What is a license?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:26
+msgid ""
+"A license contains legal language about how users can use and reuse your "
+"software. To set the `LICENSE` for your project, you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:28
+msgid ""
+"Create a `LICENSE` file in your project directory that specifies the "
+"license that you choose for your package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:29
+msgid ""
+"Describe your choice of license in your `pyproject.toml` data where "
+"metadata are set."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:31
+msgid ""
+"By adding this metadata to your [pyproject.toml](pyproject-toml) file, "
+"the choice of license will be included in your package's metadata which "
+"is used to populate your package's PyPI landing page. The `LICENSE` file "
+"is also used in your GitHub repository's landing page interface, and "
+"makes its way into your distributions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:36
+msgid "What license should you use?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:38
+msgid ""
+"We suggest that you use a permissive license that accommodates the other "
+"most commonly used licenses in the scientific Python ecosystem (MIT[^mit]"
+" and BSD-3-Clause[^bsd3]). If you are unsure, use MIT given it's the "
+"generally recommended license on "
+"[choosealicense.com](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:41
+msgid "Licenses for the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:42
+msgid ""
+"[We discuss licenses for the scientific Python ecosystem in more detail "
+"here in our guidebook.](../documentation/repository-files/license-files)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:45
+msgid "Where should the `LICENSE` file live"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:47
+msgid ""
+"Your `LICENSE` file should be placed at the root of your package's "
+"repository. When you add the `LICENSE` at the root, GitHub will "
+"automagically discover it and provide users with a direct link to your "
+"`LICENSE` file within your GitHub repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:53
+msgid ""
+"Image showing the GitHub repository for SunPy an accepted pyOpenSci "
+"package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:55
+msgid ""
+"Notice at the top of the README portion of the GitHub landing page, there"
+" are three tabs directly linking to the `README` file which is visible, "
+"the `CODE_OF_CONDUCT` file and one that specifies the license that SunPy "
+"uses. These files are discovered by GitHub because they are placed in the"
+" root of the project directory using standard naming conventions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:62
+msgid "How to add a `LICENSE` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:64
+msgid "There are several ways to add a `LICENSE` file:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:66
+msgid ""
+"When you create a new repository on GitHub, it will ask you if you wish "
+"to add a `LICENSE` file at that time. If you select yes, it will create "
+"the file for you."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:67
+msgid ""
+"You can add a `LICENSE` through the GitHub gui following the [ instructions "
+"here](https://docs.github.com/en/communities/setting-up-your-project-for-"
+"healthy-contributions/adding-a-license-to-a-repository)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:68
+msgid "You can add the file manually as we are doing in this lesson."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:71
+msgid "If you completed the past lessons including"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:73
+msgid "[Making your code installable](create-python-package.md) and"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:74
+msgid "[publishing your package to PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:76
+msgid ""
+"then you already have a `LICENSE` file containing text for the MIT "
+"license in your Python package. Thus you can skip to the next section of "
+"this tutorial which walks you through adding a `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:78
+msgid ""
+"If you don't yet have a `LICENSE` file in your directory, then continue "
+"reading."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:81
+msgid "How to add a `LICENSE` to your package - the manual way"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:83
+msgid ""
+"If you don't already have a `LICENSE` file, and you are not yet using a "
+"platform such as GitHub or GitLab, then you can create a `LICENSE` file "
+"by"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:85
+msgid "Create a new file called `LICENSE`. If you are using shell you can type:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:92
+msgid "Go to [choosealicense.com](https://choosealicense.com/)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:93
+msgid "Select permissive license"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:94
+msgid ""
+"It will suggest that you use the [MIT "
+"license](https://choosealicense.com/licenses/mit/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:95
+msgid ""
+"Copy the license text that it provides into your `LICENSE` file that you "
+"created above."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:96
+msgid "Save your file. You're all done!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:98
+msgid "An overview of licenses in the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:101
+msgid ""
+"In the pyOpenSci [packaging guidebook](../documentation/repository-files"
+"/license-files), we provide an overview of licenses in the scientific "
+"Python ecosystem. We review why license files are important, which ones "
+"are most commonly used for scientific software and how to select the "
+"correct license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:103
+msgid ""
+"If you want a broad overview of why licenses are important for protecting"
+" open source software, [check out this blog post that overviews the legal"
+" side of things.](https://opensource.guide/legal/#just-give-me-the-tldr-"
+"on-what-i-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Instructions for adding a `LICENSE` file within the GitHub interface"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add license: new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:114
+msgid ""
+"When you create a new GitHub repository you can add a `LICENSE` file "
+"through the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:119
+msgid ""
+"Screenshot of the create new repository interface that GitHub provides. "
+"The elements of this are the owner and repository name for the new repo. "
+"Below that you can add a description of the repository. Below that you "
+"can set it to be public or private. At the bottom of the interface there "
+"is an Add a README checkbox where it will add a blank readme file for "
+"you. At the very bottom there is a line to add a .gitignore file and "
+"another to choose a license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:121
+msgid ""
+"Image showing the GitHub interface that allows you to add a `LICENSE` and"
+" `README` file when you create a new repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add `LICENSE`: Existing GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:127
+msgid ""
+"If you already have a GitHub repository for your package, then you can "
+"add a `LICENSE` using the GitHub interface by adding a new file to the "
+"repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:129
+msgid ""
+"Follow the instructions to select and add a license to your repository on"
+" the [GitHub LICENSE page](https://docs.github.com/en/communities"
+"/setting-up-your-project-for-healthy-contributions/adding-a-license-"
+"to-a-repository) ."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:130
+msgid ""
+"Once you have added your `LICENSE` file, be sure to sync your git local "
+"repository with the repository on GitHub.com. This means running `git "
+"pull` to update your local branch."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:133
+msgid ""
+"Image showing what the LICENSE file looks like in the GItHub interface. "
+"At the top you can see the actual license which in this image is BSD "
+"3-clause New or revised license. Then there is some text describing both "
+"what the license is and the associated permissions for that specific "
+"license. At the bottom of the image, the actual text for the license is "
+"shown in the LICENSE file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:135
+msgid ""
+"You can view a summary of the `LICENSE` chosen on your project's GitHub "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:142
+msgid ""
+"Now you know how to add a `LICENSE` to your project. Next, you'll learn "
+"about the `CODE_OF_CONDUCT.md` file and how to add it to your package "
+"directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:147
+msgid "What is a code of conduct file?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:149
+#, python-brace-format
+msgid ""
+"A `CODE_OF_CONDUCT` file is a {term}`Code of conduct` used to establish "
+"guidelines for how people in your community interact."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:152
+msgid ""
+"This file is critical to supporting your community as it grows. The "
+"`CODE_OF_CONDUCT`:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:155
+msgid ""
+"Establishes guidelines for how users and contributors interact with each "
+"other and you in your software repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:156
+msgid "Identifies negative behaviors that you don't want in your interactions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:158
+msgid ""
+"You can use your code of conduct as a tool that can be referenced when "
+"moderating challenging conversations."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:160
+msgid "What to put in your `CODE_OF_CONDUCT` file"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:162
+msgid ""
+"If you are unsure of what language to add to your `CODE_OF_CONDUCT` file,"
+" we suggest that you adopt the [contributor covenant "
+"language](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/) as a starting place."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid "Contributor Covenant"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:167
+msgid ""
+"The `CODE_OF_CONDUCT.md` should be placed at the root of your project "
+"directory, similar to the `LICENSE` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:169
+msgid "How to add a `CODE_OF_CONDUCT` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:171
+msgid ""
+"Add a `CODE_OF_CONDUCT.md` file to the root of your repository if it "
+"doesn't already exist."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:177
+msgid ""
+"Visit the [contributor covenant website](https://www.contributor-"
+"covenant.org/) and add [the markdown version of their code of "
+"conduct](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/code_of_conduct.md) to your "
+"`CODE_OF_CONDUCT.md` file. Be sure to fill in any placeholder "
+"information. Read the text closely to ensure you both understand it and "
+"also agree with its contents!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:179
+msgid "That's it - you've now added a code of conduct to your package directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:181
+msgid "Additional Code of Conduct resources"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:184
+msgid ""
+"[ Guide: `CODE_OF_CONDUCT.md` "
+"files](https://docs.github.com/en/communities/setting-up-your-project-"
+"for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:185
+msgid ""
+"[pyOpenSci package guide `CODE_OF_CONDUCT.md` "
+"overview](https://www.pyopensci.org/python-package-guide/documentation"
+"/repository-files/code-of-conduct-file.html)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:188 ../../tutorials/add-readme.md:240
+#: ../../tutorials/publish-conda-forge.md:475
+#: ../../tutorials/pyproject-toml.md:699
+msgid " Wrap up"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:190
+msgid "In this lesson and the [last lesson](add-readme), you have added a:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:192
+msgid "`README` file;"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:193
+msgid "`LICENSE` file and a"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:194
+msgid "`CODE_OF_CONDUCT` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:196
+msgid ""
+"These are fundamental files needed for every scientific Python package "
+"repository. These files help users understand how to use your package and"
+" interact with package maintainers."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:200
+#: ../../tutorials/create-python-package.md:455
+msgid "In the upcoming lessons, you will:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:202
+msgid ""
+"[Add more metadata to your `pyproject.toml` file](pyproject-toml) to "
+"support building and publishing your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:203
+msgid ""
+"Publish a new version of your Python package to the test PyPI to preview "
+"the updated metadata landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:208
+#: ../../tutorials/create-python-package.md:550
+#: ../../tutorials/publish-conda-forge.md:487
+#: ../../tutorials/publish-pypi.md:419
+#: ../../tutorials/trusted-publishing.md:347
+msgid "Footnotes"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:210
+msgid "https://opensource.org/license/mit/"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:211
+msgid "https://opensource.org/license/bsd-3-clause/"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:6
+#, python-brace-format
+msgid "Add a {term}`README` file to your {term}`Python package`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:8
+msgid "In the previous lessons you learned:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:10
+msgid "[What a Python package is](intro.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:11
+msgid "[How to make your code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:12
+msgid "[How to publish your package to (test) PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:13
+msgid "[How to publish your package to conda-forge](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:19
+msgid "How to add a **README.md** file to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:20
+msgid "What the core elements of a **README.md** file are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:23
+msgid "What is a README file?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:25
+#, python-brace-format
+msgid ""
+"The `README.md` file is the project's {term}`README` and is located at "
+"the root of your project directory. It helps a user understand:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:29
+msgid "You package's name"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:30
+msgid ""
+"What the package does. Your README file should clearly state the "
+"problem(s) that your software is designed to solve and its target "
+"audience."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:31
+msgid "The current development \"state\" of the package (through badges)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:32
+msgid "How to get started with using your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:33
+msgid "How to contribute to your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:34
+msgid "How to cite your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:36
+msgid ""
+"Your **README.md** file is important as it is often the first thing that "
+"someone sees before they install your package. The README file is also "
+"used to populate your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:38
+msgid ""
+"Note that there is no specific content structure for README files. "
+"However, this tutorial outlines the sections that we suggest that you "
+"include in your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:42
+msgid "Create a README.md file for your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:44
+msgid "It's time to add a `README.md` file to your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:46
+msgid "Step 0: Create a README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:47
+msgid ""
+"To get started, if you don't already have a README.md file in your "
+"project directory, create one."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:50
+msgid "If you created your project directory from"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:52
+msgid "a GitHub repository online"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:53
+msgid "using `hatch init`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:55
+msgid "Then you may already have a README.MD file in your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:61
+msgid "Step 1: Add the name of your package as the README title"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:63
+msgid "At the top of the `README.md` file, add the name of your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:65
+msgid ""
+"If you are using markdown it should be a header 1 (H1) tag which is "
+"denoted with a single `#` sign."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:67
+msgid "`# Package-title-here`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:69
+msgid "Step 2: add badges to the top of your README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:71
+msgid ""
+"It's common for maintainers to add badges to the top of their README "
+"files. Badges allow you and your package users to track things like:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:73
+msgid "Broken documentation and test builds."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:74
+msgid "Versions of your package that are on PyPI and conda."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:75
+msgid ""
+"Whether your package has been reviewed and vetted by an organization such"
+" as pyOpenSci and/or JOSS."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:77
+msgid ""
+"If you have already published your package to pypi.org you can use "
+"[shields.io to create a package version badge](https://shields.io/badges"
+"/py-pi-version). This badge will dynamically update as you release new "
+"versions of your package to PyPI."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:79
+msgid ""
+"If not, you can leave the top empty for now and add badges to your README"
+" at a later point as they make sense."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:81
+msgid "Step 3: Add a description of what your package does"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:83
+msgid ""
+"Below the badges (if you have them), add a section of text that provides "
+"an easy-to-understand overview of what your package does."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:87
+msgid "Keep this section short."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:88
+msgid "Try to avoid jargon."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:89
+msgid ""
+"Define technical terms that you use to make the description accessible to"
+" more people."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:91
+msgid ""
+"Remember that the more people understand what your package does, the more"
+" people will use it."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:93
+msgid "Step 4: Add package installation instructions"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:95
+msgid "Next, add instructions that tell users how to install your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:97
+#, python-brace-format
+msgid ""
+"For example, can they use {term}`pip` to install your package? `python -m"
+" pip install packagename`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:100
+msgid "or conda?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:102
+msgid "`conda install -c conda-forge packagename`."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:104
+msgid ""
+"If you haven't yet published your package to pypi.org then you can skip "
+"this section and come back and add these instructions later."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:108
+msgid "Step 5: Any additional setup"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:110
+msgid ""
+"In some cases, your package users may need to manually install other "
+"tools in order to use your package. If that is the case, be sure to add a"
+" section on additional setup to your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:115
+msgid ""
+"Here, briefly document (or link to documentation for) any additional "
+"setup that is required to use your package. This might include:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:119
+msgid "authentication information, if it is applicable to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:120
+msgid "additional tool installations, such as GDAL."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:123
+msgid ""
+"Many packages won't need an additional setup section in their README. In "
+"that case you can always skip this section."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:128
+msgid "Step 6: Add a get started section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:130
+msgid ""
+"Next add a get-started section. Within this section, add a small code "
+"example that demonstrates importing and using some of the functionality "
+"in your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:133
+msgid "Provide a fully functional code snippet if possible"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:136
+msgid ""
+"It is important to try to make the code examples that you provide your "
+"users as useful as possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:138
+msgid ""
+"Be sure to provide a copy/paste code example that will work as-is when "
+"pasted into a Jupyter Notebook or .py file if that is possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:140
+msgid ""
+"If there are tokens and other steps needed to run your package, be sure "
+"to be clear about what those steps are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:143
+msgid "For the pyosPackage, a short get started demo might look like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:151
+msgid ""
+"Or it could simply be a link to a getting started tutorial that you have "
+"created. If you don't have this yet, you can leave it empty for the time "
+"being."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:154
+msgid ""
+"This would also be a great place to add links to tutorials that help "
+"users understand how to use your package for common workflows."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:159
+msgid "Step 7: Community section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:161
+msgid ""
+"The community section of your README file is a place to include "
+"information for users who may want to engage with your project. This "
+"engagement will likely happen on a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:163
+msgid ""
+"In the community section, you will add links to your contributing guide "
+"and `CODE_OF_CONDUCT.md`. You will create a code of conduct file in the "
+"[next lesson](add-license-coc)."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:167
+msgid ""
+"As your package grows you may also have a link to a development guide "
+"that contributors and your maintainer team will follow. The development "
+"guide outlines how to perform maintenance tasks such as:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:170
+msgid "running tests"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:171
+msgid "making package releases"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:172
+msgid "building documentation"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:173
+msgid "and more."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:177
+msgid "Step 8: Citation information"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:179
+msgid ""
+"Finally it is important to let users know how to cite your package. You "
+"can communicate citation information in a few different ways."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:182
+msgid ""
+"You can use a tool such as zenodo to create a DOI and associated citation"
+" information for your package if it is hosted on a platform such as "
+"GitHub. [Check out this short tutorial that covers setting that "
+"up.](https://coderefinery.github.io/github-without-command-line/doi/)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:186
+msgid ""
+"Alternatively if you send your package through a peer review process such"
+" as the [one lead by pyOpenSci](https://www.pyopensci.org/about-peer-"
+"review/index.html). After being accepted by pyOpenSci, if your package is"
+" in scope, you can be accepted by the Journal of Open Source Software and"
+" get a cross-ref DOI through [our partnership with the Journal of Open "
+"Source Software.](https://www.pyopensci.org/about-peer-review/index.html)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:190
+msgid "The finished README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:192
+msgid "Your finished `README.md` file should look something like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:242
+msgid ""
+"It's important to consider the information that a new user or contributor"
+" might need when creating your `README.md` file. While there is no "
+"perfect template, above is a set of recommendations as you are just "
+"getting started. You may find the need for other elements to be added to "
+"this file as you further develop your package and as a community begins "
+"to use your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:248
+msgid ""
+"In the [next lesson](add-license-coc.md), you will add a LICENSE file to "
+"your Python package. A license file is critical as it tells users how "
+"they legally can (and can't) use your package. It also:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:252
+msgid "Builds trust with your users"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:253
+msgid "Discourages misuse of your package and associated code"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:63
+msgid "Command Line Reference Guide"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:9
+msgid ""
+"**What these tables are:** These tables summarize the command line inputs"
+" (e.g., `pipx install hatch`, `hatch build` or `python -m build`) "
+"necessary to complete all steps in the package creation process, from "
+"installing [Hatch](get-to-know-hatch) to publishing the package on [PyPI"
+"](publish-pypi) and conda-forge."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:14
+#, python-brace-format
+msgid ""
+"**What these tables are not:** These tables do not cover the manual or "
+"non-automated steps (e.g., create a PyPI account, create a {term}`API "
+"token`) you have to complete throughout the package creation process."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:18
+msgid ""
+"**Operating system note:** The current iteration of this guide has been "
+"tested on the Windows OS only. Many commands are Windows-specific. OS-"
+"specific commands are indicated with parentheses after the description of"
+" the command, e.g., [COMMAND_DESCRIPTION] (Windows). Corresponding "
+"commands for macOS and Linux will be added in the future."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:21
+msgid "Environment Setup"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:43
+msgid "Package Development"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:62
+msgid "Package Publishing"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:81
+msgid "Versions and Environments"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:7
+msgid "Create a pure Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:9
+#: ../../tutorials/develop-python-package-hatch.md:9
+msgid "About this lesson"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:13
+#, python-brace-format
+msgid ""
+"This lesson uses the pyOpenSci Python package copier template to create a"
+" {term}`Python package` quickly. Your package will be installable both "
+"locally and remotely from a website such as GitHub (or GitLab) into a "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:18
+#: ../../tutorials/setup-py-to-pyproject-toml.md:23
+msgid "In this lesson, you will learn:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:20
+msgid ""
+"How to make your code installable into any Python environment, both "
+"locally and from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:21
+msgid ""
+"How to update a [pyproject.toml file](pyproject-toml), which contains the"
+" metadata needed to build, install, and publish your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:23
+#, python-brace-format
+msgid ""
+"How to declare a {term}`Build backend` which will be used to [build"
+"](build-package) and install your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:25
+msgid "How to install your package in editable mode for interactive development"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:28
+msgid "**What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:30
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have "
+"[Copier](https://copier.readthedocs.io/en/stable/) and [Hatch installed"
+"](get-to-know-hatch) to complete the lesson successfully."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:35
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the Carpentries shell lesson[^shell-lesson]. Windows users will"
+" likely need to configure a tool such as "
+"[gitbash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:41
+msgid ""
+"This diagram has two smaller boxes with arrows pointing to the right to a"
+" Python environment. The small boxes read your-package and pip install "
+"package. The environment box on the right reads - your Python "
+"environment. It them lists your-package along with a few other core "
+"packages such as Matplotlib, NumPy, Pandas, Xarray and GeoPandas."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:43
+msgid ""
+"In a [previous lesson, you learned what a Python package is](intro). "
+"Creating a Python package allows you to install your code into any Python"
+" environment on your computer. You can then import it into workflows in "
+"the same way that you might import a package such as Pandas or GeoPandas."
+" If you push your code to GitHub or GitLab, you can also install it "
+"directly from there. [Scroll to the bottom of the page to learn more "
+"about the basic elements of a Python package.](package-overview)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:49
+msgid "Create your Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:51
+msgid ""
+"Below, you will create a pure Python package using the [pyOpenSci copier "
+"template](https://github.com/pyOpenSci/pyos-package-template). Our "
+"template uses Hatch as the default packaging tool. At the bottom of this "
+"lesson, you'll learn more about the basics of the Python package "
+"directory structure, and associated key files (`__init__.py` and "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:53
+msgid "Step 1: Set Up the Package Directory Structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:55
+msgid "Open your shell or preferred terminal."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:56
+msgid ""
+"Use the shell `cd` command to navigate in your shell to the location "
+"where you'd like your package to live. Our template will create the "
+"package directory structure for you"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:57
+msgid "Choose a name for your package. The name should:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:58
+msgid "Have no spaces (*Required*)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:59
+msgid ""
+"Use all lowercase characters (*Recommended*). For this tutorial, we will "
+"use `pyospackage`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:60
+msgid ""
+"Only use letters and the characters _ or - in the name. This means that "
+"the name `pyos*package` is not an acceptable name. However, the names "
+"`pyos_package` or `pyos-package` are both OK."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:62
+msgid ""
+"In your terminal, **run the command below**. This will begin a series of "
+"prompts that will ask you questions and help you to customize your Python"
+" package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:68
+msgid ""
+"After running the command above, the template will walk you through a "
+"series of questions."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:70
+msgid ""
+"Note that when you reach the prompt \"Do you want to answer one more "
+"question, and skip the rest, using the default values?\" you can choose "
+"Yes, but with a minimal setup to create the most basic version"
+" of your package that contains documentation, tests and a example module "
+"for you to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:72
+msgid ""
+"After this question, the template will ask you for your preferred GitHub "
+"username and will then create a package with basic tests, documentation, "
+"and GitHub configuration setup for you."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:93
+msgid ""
+"The template will then begin to copy files into the directory that used "
+"above. (`.` means current working directory.)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:101
+msgid "The final package structure will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md
+msgid "A full package with tests, docs, and GitHub infrastructure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:119
+msgid ""
+"If you use the \"bells and whistles\" default option when working through"
+" the template prompts, our template will create a complete package setup "
+"with GitHub CI actions, typing, tests, environments, and more using "
+"Hatch. If you customize the entire package, then you can select what "
+"platform you wish to host it on (GitHub vs GitLab), whether you want "
+"typing, what documentation engine you want to use, and more."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:123
+msgid "The resulting package directory looks like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:146
+msgid "The default tools that your package uses are:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:148
+msgid ""
+"[Sphinx](https://www.pyopensci.org/python-package-guide/documentation"
+"/hosting-tools/sphinx-python-package-documentation-tools.html) with the "
+"PyData Sphinx Theme for documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:149
+msgid "pytest for testing"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:150
+msgid "Hatch for environment setup"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:152
+msgid ""
+"**Full customization** If you want to customize any elements of your "
+"package setup, choose `No, I want to fully customize the template.`. "
+"This will allow you to select:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:155
+msgid "Sphinx vs [MkDocs](https://www.mkdocs.org/) vs no documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:156
+msgid "GitHub vs GitLab"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:157
+msgid "VCS versioning"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:158
+msgid "and more"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:161
+msgid "Step 2: Explore the existing module in your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:163
+#, python-brace-format
+msgid ""
+"A {term}`Module` refers to a `.py` file containing the code that you want"
+" your package to access and run. Within the `pyospackage` subdirectory, "
+"you have an `example.py` module that you can use to test out your package"
+" quickly."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:167
+msgid "Notice that the code in the example.py module, has a few features:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:169
+msgid "It has a [numpy-style docstring](numpy-docstring)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:170
+msgid "It uses [typing](type-hints)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:171
+msgid ""
+"At the top of the module, there is a docstring explaining what the module"
+" does."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:173
+msgid ""
+"Python supports different docstring formats. The most popular formats for"
+" documenting Python objects are NumPy Style Docstring[^numpydoc], Google "
+"Style Docstring[^googledoc], and the Epytext Style "
+"Docstrings[^epytextdoc]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:175
+msgid "**pyOpenSci recommends using the NumPy Docstring convention.**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:177
+msgid ""
+"[Learn more about docstrings here](api-docstrings) for an overview of "
+"both topics."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:206
+msgid "Python modules and the `__init__.py` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:210
+msgid "The word module refers to a `.py` file containing Python code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:212
+msgid ""
+"The `__init__.py` allows Python to recognize that a directory contains "
+"at least one module that may be imported and used in your code. A package"
+" can have multiple modules[^python-modules]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:217
+msgid "Step 3: Optional -- Add code to your module"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:219
+msgid ""
+"If you want, add a second function to the `example.py` module. It can be "
+"a simple function. For example, write a second function that multiplies "
+"numbers."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:222
+msgid "Step 4: Check out the metadata in your `pyproject.toml` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:224
+msgid ""
+"A [pyproject.toml](pyproject-toml) file stores metadata that provides "
+"instructions to various tools interacting with it, including [Hatch](get-"
+"to-know-hatch), which will build your package. You can also specify "
+"metadata for your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:229
+msgid ""
+"You will learn more about the `pyproject.toml` format in the [next lesson"
+" when you add additional metadata/information to this file.](pyproject-"
+"toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:232
+msgid ""
+"The metadata in your generated `pyproject.toml` is already setup for you "
+"using the information you provided the copier template above."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:234
+msgid "Brief overview of the TOML file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:237
+msgid ""
+"[The TOML format](https://toml.io/en/) consists of tables and variables. "
+"Tables are sections of information denoted by square brackets:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:239
+msgid "`[this-is-a-table]`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:241
+msgid ""
+"Tables can contain variables within them defined by a variable name and "
+"an `=` sign. For instance, a `build-system` table most often holds two "
+"(2) variables:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:244
+msgid ""
+"`requires = `, which tells a build tool what tools it needs to install "
+"prior to building your package. In this case "
+"[hatchling](https://pypi.org/project/hatchling/)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:246
+msgid ""
+"`build-backend = `, which is used to define the specific build-backend "
+"name, (in this example we are using `hatchling.build`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:255
+msgid ""
+"TOML organizes data structures, defining relationships within a "
+"configuration file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:258
+msgid "[Learn more about the pyproject.toml format here.](pyprojecttoml-metadata)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:261
+msgid ""
+"Open up the `pyproject.toml` file that Hatch created in your favorite "
+"text editor. It should look something like the example below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:262
+msgid ""
+"Make sure the package version, package name, and author name look "
+"correct. The email is optional."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:300
+msgid ""
+"At the bottom of the template-generated `pyproject.toml` file, you will "
+"see a section that defines Hatch environments. We will cover Hatch "
+"environments in a later lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:302
+msgid "The bare minimum needed in a pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:305
+msgid ""
+"The core information that you need in a `pyproject.toml` file to publish "
+"on PyPI is your **package's name** and the **version**. However, we "
+"suggest that you flesh out your metadata early on in the `pyproject.toml`"
+" file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:307
+msgid ""
+"Once you have your project metadata in the `pyproject.toml` file, you "
+"will rarely update it."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:311
+msgid "Step 5: Install your package locally"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:313
+msgid "At this point, you should have:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:315
+msgid "A project directory structure with a `pyproject.toml` file at the root"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:316
+msgid "A package directory containing an empty `__init__.py` file and"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:317
+msgid "At least one Python module (e.g. `example.py`)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:319
+msgid "You are now ready to install (and build) your Python package!"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:321
+msgid ""
+"While you can do this using Hatch, we will use pip for this lesson, so "
+"you can see how to install your tool into your preferred environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:323
+msgid ""
+"First, open your preferred shell (Windows users may use something like "
+"GitBash) and `cd` into your project directory if you are not already "
+"there."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:324
+msgid "Activate the Python environment that you wish to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:325
+msgid "Run `python -m pip install -e .`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:327
+#: ../../tutorials/create-python-package.md:560
+#: ../../tutorials/create-python-package.md:567
+#: ../../tutorials/get-to-know-hatch.md:199 ../../tutorials/intro.md:246
+#: ../../tutorials/publish-pypi.md:9 ../../tutorials/publish-pypi.md:185
+#: ../../tutorials/publish-pypi.md:358 ../../tutorials/pyproject-toml.md:744
+msgid "Todo"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:328
+msgid "Add this back in when the lesson is published"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:329
+msgid ""
+"Activate the Python environment that you wish to use. If you need help "
+"with working with virtual environments check out this lesson (add link)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:355
+msgid "What does `python -m pip install -e .` do?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:358
+msgid ""
+"`python -m pip install -e .` installs your package into the current "
+"active Python environment in **editable mode** (`-e`). Installing your "
+"package in editable mode, allows you to work on your code and then test "
+"the updates interactively in your favorite Python interface. One "
+"important caveat of editable mode is that every time you update your "
+"code, you need to restart Python."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:363
+msgid ""
+"If you wish to install the package regularly (not in editable mode) you "
+"can use:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:366
+msgid "`python -m pip install . `"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:368
+msgid "**Using `python -m` when calling `pip`**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:370
+msgid ""
+"Above, you use`python -m` to call the version of pip installed into your "
+"current active environment. `python -m` is important to ensure that you "
+"are calling the version of pip installed in your current environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:374
+msgid ""
+"IMPORTANT: pip can also be used to install packages from PyPI. However, "
+"in this case, you are telling pip to install your package from a local "
+"folder by using the `.`. You could also specify a path to the project "
+"directory on your computer instead of the `.` which tells pip to use the "
+"current working directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:377
+msgid "Look for pyospackage in your environment"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:379
+msgid ""
+"Once you have installed your package, you can view it in your current "
+"environment. If you are using `venv` or `conda`, `pip` list will return a"
+" list of packages in the current active environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:383
+msgid ""
+"Note that because `pyospackage` is installed in editable mode (`-e`), pip"
+" will show you the directory path to your project's code"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:411
+msgid "Step 6: Test out your new package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:413
+msgid ""
+"After installing your package, type “python” at the command prompt in "
+"your chosen terminal to start a Python session in your active Python "
+"environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:416
+msgid "You can now import your package and access the `add_numbers` function."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:428
+msgid "Installing packages from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:430
+msgid ""
+"If you wish to share your code without publishing to PyPI you can always "
+"install packages directly from GitHub using the syntax:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:437
+msgid "To make your package GitHub installable, you can:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:439
+msgid "Create a new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:440
+msgid ""
+"Push the contents of the project directory that you created above, to "
+"GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:441
+msgid ""
+"Finally install the package from GitHub using the command above. When you"
+" use the command above, don't forget to substitute the user, repo, and "
+"branch_or_tag with your specific values."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:443
+msgid ""
+"For instance below you install the pyospackage from the main branch of "
+"the pyOpenSci repository."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:446
+msgid "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:450
+msgid "Congratulations! You created your first Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:452
+msgid ""
+"You have now created a Python package that you can install into any "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:457
+msgid ""
+"Add a [README file](add-readme.md) and [LICENSE](add-license-coc.md) to "
+"your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:458
+msgid ""
+"[Add more metadata to your `pyproject.toml`](pyproject-toml.md) file to "
+"support PyPI publication."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:459
+msgid ""
+"[Learn how to build your package distribution](publish-pypi) files "
+"(**sdist** and **wheel**) and publish to **test PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:460
+msgid ""
+"Finally you will learn how to [publish to **conda-forge**](publish-conda-"
+"forge) from **PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:464
+msgid "About the Python package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:466
+msgid ""
+"To make your Python code installable you need to create a specific "
+"directory structure with the following elements:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:468
+msgid "A `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:469
+msgid "A specific directory structure."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:470
+msgid "Some code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:471
+msgid "An `__init__.py` file in your code directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:473
+msgid "The directory structure you'll create in this lesson will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:488
+msgid ""
+"Diagram showing the basic steps to creating an installable package. There"
+" are 4 boxes with arrows pointing towards the right. The boxes read, your"
+" code, create package structure, add metadata to pyproject.toml and pip "
+"install package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:490
+msgid ""
+"Once you have the basic items of a Python package (code, metadata and a "
+"file structure), you can `pip install` your package into any Python "
+"environment on your computer."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:493
+msgid "About the basic package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:495
+msgid "Notice a few things about the above layout:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:497
+msgid ""
+"Your package code lives within a `src/packagename` directory. We suggest "
+"that you use `src` (short for **source code**) directory as it [ensures "
+"that you are running tests on the installed version of your "
+"code](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/python-package-structure.html#the-src-layout-and-testing)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:498
+msgid ""
+"Within the `src` directory you have a package directory called "
+"`pyospackage`. Use the name of your package for that directory name. This"
+" will be the name for importing your package in Python code once "
+"installed."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:499
+msgid ""
+"In your package directory, you have an `__init__.py` file and all of your"
+" Python modules. You will learn more about the `__init__.py` file below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:500
+msgid "The `pyproject.toml` file lives at the root directory of your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:501
+msgid ""
+"The name of the root directory for the package is **pyospackage** which "
+"is the name of the package. This is not a requirement but you will often "
+"see that the GitHub / GitLab repository and the root directory name are "
+"the same as the package name."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:503
+msgid "What is an `__init__.py` file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:505
+msgid ""
+"The `__init__.py` file tells Python that a directory should be treated as"
+" a Python package. As such, a directory with an `__init__.py` file can be"
+" imported directly into Python. The `__init__.py` file does not need to "
+"contain any code in order for Python to recognize it; it can be empty."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:509
+msgid ""
+"For example, following the file structure example above which has an "
+"`__init__.py` file within it, you can run:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:515
+#: ../../tutorials/pyproject-toml.md:56
+msgid "What is a pyproject.toml file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:517
+msgid "The **pyproject.toml** file is:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:519
+msgid ""
+"Where you define your project's metadata (including its name, authors, "
+"license, etc)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:520
+msgid "Where you define dependencies (the packages that it depends on)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:521
+msgid ""
+"Used to specify and configure what build backend you want to use to "
+"[build your package](../package-structure-code/python-package-"
+"distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:523
+msgid ""
+"After the `__init__.py` and `pyproject.toml` files have been added, your "
+"package can be built and distributed as an installable Python package "
+"using tools such as pip. Note that the `pyproject.toml` file needs to "
+"have a few basic items defined for the package to be installable "
+"including:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:529
+msgid "The `build-backend` that you want to use,"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:530
+msgid "The project `name` and `version`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:532
+msgid "Why the pyproject.toml file is important"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:535
+msgid ""
+"The `pyproject.toml` file replaces some of the functionality of both the "
+"`setup.py` file and `setup.cfg` files. If you try to pip install a "
+"package with no `pyproject.toml`, you will get the following error:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:545
+msgid ""
+"If your project already has a `setup.py` file, Hatch can be used to "
+"automatically create a `pyproject.toml`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:546
+msgid ""
+"See [Using Hatch to Migrate setup.py to a pyproject.toml](setup-py-to-"
+"pyproject-toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:561
+msgid ""
+"Is it clear where to add commands? Bash vs. Python console Bash vs. Zsh "
+"is different"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:563
+msgid ""
+"ADD: note about what makes something \"package worthy\", with a common "
+"misconception being that a package should be production-ready code that's"
+" valuable to a broad audience. This may not be a pervasive misconception "
+"in Python, but a quick break-out with an explanation of what a package "
+"can consist of would be helpful."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:564
+msgid "They can use a codespace to complete this lesson too."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:568
+msgid ""
+"When this lesson exists, uncomment this admonition You will learn how to "
+"automate defining a package version using git tags in the version and "
+"release your package lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:552
+msgid "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:556
+msgid "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:555
+msgid "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:557
+msgid "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:554
+msgid ""
+"[Python module "
+"docs](https://docs.python.org/3/tutorial/modules.html#packages)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:7
+msgid "Use Hatch environments with your pure Python package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:13
+msgid ""
+"[In a previous lesson](create-pure-python-package), you learned how to "
+"create a Python package using the pyOpenSci copier template. In this "
+"lesson, you'll learn how to manage and use the Hatch environments set up "
+"by de **What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:16
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have created a package using "
+"our pyOpenSci copier template. You should also have [Hatch installed"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:20
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the [Carpentries shell lesson](https://swcarpentry.github.io"
+"/shell-novice/). Windows users will likely need to configure a tool such "
+"as [GitBash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:23
+msgid ""
+"Welcome to your shiny new package! This page will help you get started "
+"with using [Hatch](get-to-know-hatch) to run tests, build and check your "
+"package, and build your documentation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:27
+#, python-brace-format
+msgid ""
+"To begin, have a look at the [pyproject.toml](pyproject-toml) file in "
+"your package directory. This file contains the configuration for your "
+"package and is written using {term}`TOML` format. Here's the TL&DR:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:31
+msgid "Each `[]` section in the toml file is called a table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:32
+msgid "You can nest tables with double brackets like this`[[]]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:33
+msgid ""
+"Tables contain information about a certain thing that you want to "
+"configure."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:36
+msgid ""
+"You can configure Hatch to use UV by default for environment management. "
+"UV is a package manager built in Rust. It is fast and will significantly "
+"speed up environment creation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:38
+msgid ""
+"To use UV with Hatch, configure Hatch in the \"tools\" section of your "
+"`pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:46
+msgid ""
+"Using Hatch for developing, building, and maintaining your pure Python "
+"package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:48
+#, python-brace-format
+msgid ""
+"In the pyOpenSci Python package template, we have set up {term}`Hatch "
+"environment` definitions. You will notice at the bottom of the file, a "
+"[hatch environment](https://hatch.pypa.io/1.13/environment/) section, "
+"that looks like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:59
+msgid ""
+"Hatch allows you to configure and run environments and scripts similar to"
+" a workflow tool like tox or nox."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:62
+msgid ""
+"Hatch defaults to using `venv` to manage environments. However, you can "
+"configure it to use other environment tools, such as conda or mamba."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:64
+msgid ""
+"[Read the hatch documentation to learn more about environments. "
+"](https://hatch.pypa.io/1.13/tutorials/environment/basic-usage/)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:68
+msgid ""
+"Below is the Hatch environment used to build and test your package. "
+"Anytime you see: `tool.hatch.envs.test`, it tells Hatch:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:71
+msgid ""
+"\"Hey, Hatch, this is the definition for an environment.`test` is the "
+"name of the environment that I want you to create.\""
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:73
+msgid "So `tool.hatch.envs.build` will create an environment called `build`."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:75
+msgid ""
+"Below the environment \"declaration,\" you can see the definition of what"
+" should be in that environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:77
+msgid "A Hatch environment to build your package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:79
+#, python-brace-format
+msgid ""
+"Below is a Hatch environment definition that you will find in your new "
+"project's [pyproject.toml](pyproject-toml) file. It is set up to build "
+"your package's {term}`Distribution files` ({term}`Source distribution "
+"(sdist)` and {term}`Wheel (.whl)`)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:84
+#, python-brace-format
+msgid ""
+"Notice that the environment definition declares two {term}`Dependencies`:"
+" `pip` and `twine`, which the environment needs to run successfully. This"
+" declaration is similar to declaring dependencies for your package at the"
+" top of your [pyproject.toml](pyproject-toml)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:99
+msgid "Hatch will install your package in editable mode by default"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:100
+msgid ""
+"Notice the `detached = True` flag at the bottom of the environment. By "
+"default, hatch will install your package in editable mode into any "
+"environment it creates. `detached=True` tells it not to install your "
+"package into the environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:104
+msgid "Hatch scripts"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:106
+#, python-brace-format
+msgid ""
+"Hatch supports defining {term}`Script (Hatch)` commands that run in "
+"specific Hatch environments."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:109
+msgid ""
+"Above, you have defined a new environment called 'build' that Hatch will "
+"create as a virtual environment (venv). Because `detached = True` in that"
+" environment, Hatch won't install your package into it."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:111
+msgid ""
+"You can then use that environment to run \"scripts\". The definition "
+"below tells Hatch to run the following scripts in the build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:113
+msgid "`[tool.hatch.envs.build.scripts]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:115
+msgid "You define this `scripts` to run using the following syntax, where:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:117
+msgid "`tool.hatch`: Alerts Hatch that this table is for Hatch to use"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:118
+msgid "`envs.build`: Use the defined build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:119
+msgid ""
+"`scripts`: Define what scripts to run. In this case, Hatch will run shell"
+" scripts."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:122
+msgid ""
+"Below is the `build.scripts` table that defines 3 shell commands to be "
+"run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:124
+msgid "`pip check` # verifies your dependencies"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:125
+msgid "`hatch build --clean` # build your packages distribution files."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:126
+msgid ""
+"`twine check dist/*` # use twine to check that your package's sdist "
+"(source distribution) is ok."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:140
+msgid ""
+"Hatch, by default, will install your package in editable mode into any "
+"virtual environment (venv) that it creates. If `detached=True` is set, "
+"then it will skip that step."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:143
+msgid "Running the build script"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:145
+msgid "You can run the build script and build your package like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:147
+msgid "`hatch run build:check`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:149
+msgid ""
+"This step updates the build environment and then builds and checks the "
+"output distributions of your package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:151
+msgid "You can enter the build environment in your shell to check it out:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:157
+msgid "If you run `pip list` in the environment, twine will be there:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:163
+#: ../../tutorials/develop-python-package-hatch.md:221
+msgid "To leave the environment use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:169
+msgid "Hatch, testing, and matrix environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:171
+msgid ""
+"It's always helpful to run your tests on the Python versions that you "
+"expect your users to be using. In this section, you'll explore the test "
+"environment setup in the pyOpenSci template package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:173
+msgid "Below, you see the Hatch environment test table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:175
+msgid ""
+"Similar to the above build environment, the environment below defines the"
+" dependencies that Hatch needs to install into the test environment "
+"(required to run your tests)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:189
+msgid "Your test environment has a matrix associated with it"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:191
+msgid ""
+"If the environment has a matrix associated with it, that tells Hatch to "
+"run the tests across different Python versions. Below, you are running "
+"tests on versions 3.10 through 3.13."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:194
+msgid ""
+"Hatch by default will install Python [using "
+"UV](https://docs.astral.sh/uv/guides/install-python/) both when you "
+"install Hatch and also when you declare a matrix environment like the one"
+" below"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:202
+msgid ""
+"In your project, if you run `hatch shell test`, you will see the output "
+"below. This means that because there is a matrix of Python versions to "
+"choose from, you need to select the environment with the Python version "
+"you want to use."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:215
+msgid ""
+"Pick the Python test environment that you want to use and enter it, like "
+"this (this will open Python 3.13):"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:227
+msgid "Hatch scripts for tests"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:229
+msgid ""
+"In that same tests section, you will see a `tool.hatch.envs.test.scripts`"
+" section. Similar to what you saw above with the build steps, this is "
+"where the \"script\" to run your tests is defined."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:232
+msgid ""
+"Notice that below, the script has a script called `run`. And that script "
+"runs pytest with a set of arguments, including generating code coverage."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:239
+msgid "To run this script in your terminal, use the syntax:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:241
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:243
+msgid "Reminder"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:246
+msgid ""
+"`hatch run`: this calls hatch and tells it that it will be running a "
+"command"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:247
+msgid ""
+"`test:run` defines the environment you want it to run (`test`) in this "
+"case, and the script is defined as `run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:250
+msgid ""
+"If you have a matrix setup for tests, then it will both install the "
+"needed Python version using UV and run your tests in each version of the "
+"Python environment. In this case, since there are four Python versions in"
+" the environment, your tests will be run four times, once in each Python "
+"version listed in the matrix table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:280
+msgid "Build your documentation with Hatch environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:282
+msgid ""
+"Finally, you can build and serve your documentation using hatch. To build"
+" a static HTML version of the docs run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:285
+msgid "`hatch run docs:build`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:287
+msgid ""
+"To run a local server with your docs updated as you update your markdown "
+"files, run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:289
+msgid "`hatch run docs:serve`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:291
+msgid "To stop serving the docs use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:293
+msgid "mac: ctrl + c windows:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:6
+msgid "Get to Know Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:8
+msgid ""
+"Our Python packaging tutorials use Hatch. While there are [many great "
+"packaging tools](/package-structure-code/python-package-build-tools) out "
+"there, we have selected Hatch because:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:13
+msgid ""
+"It is an end-to-end tool that supports most of the steps required to "
+"create a quality Python package. Beginners will have fewer tools to learn"
+" if they use Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:16
+#, python-brace-format
+msgid ""
+"It supports different {term}`Build backend` options if you ever need to "
+"compile code in other languages."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:18
+msgid ""
+"As a community, pyOpenSci has decided that Hatch is a user-friendly tool "
+"that supports many different scientific Python use cases."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:21
+msgid ""
+"In this tutorial, you will install and get to know Hatch a bit more "
+"before starting to use it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:24
+msgid "You need two things to successfully complete this tutorial:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:26
+msgid "You need Python installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:27
+msgid "You need Hatch installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:30
+msgid ""
+"If you don't already have Python installed on your computer, Hatch will "
+"do it for you when you install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:34
+msgid "Install Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:36
+msgid ""
+"To begin, follow the operating-system-specific instructions below to "
+"install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "MAC"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:43
+msgid ""
+"Follow the instructions "
+"[here](https://hatch.pypa.io/latest/install/#installers)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:45
+msgid ""
+"Download the latest GUI installer for MAC [hatch-"
+"universal.pkg](https://github.com/pypa/hatch/releases/latest/download"
+"/hatch-universal.pkg)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:46
+msgid "Run the installer and follow the setup instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:47
+msgid "If your terminal is open, then restart it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Windows"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:53
+msgid ""
+"In your browser, download the correct `.msi` file for your system: "
+"[hatch-x64.msi](https://github.com/pypa/hatch/releases/latest/download/hatch-x64.msi)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:55
+msgid "Run your downloaded installer file and follow the on-screen instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Linux"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:61
+msgid ""
+"We suggest that you install Hatch using pipx on Linux. however, if you "
+"prefer another method, check out the [Hatch installation "
+"documentation](https://hatch.pypa.io/latest/install/) for other methods."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:75
+#, python-brace-format
+msgid ""
+"Hatch can also be installed directly using {term}`pip` or "
+"[conda](https://hatch.pypa.io/latest/install/#conda). We encourage you to"
+" follow the instructions above because we have found that the Hatch "
+"installers for Windows and Mac are the easiest and most efficient."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:80
+msgid ""
+"Our Linux users have found success installing Hatch with pipx if they "
+"already use apt install."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:83
+msgid ""
+"Both approaches (using a graphical installer on Windows/Mac and pipx) "
+"ensure that you have Hatch installed globally. A global install means "
+"that Hatch is available across all of your Python environments on your "
+"computer."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:88
+msgid "Check that hatch installed correctly"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:90
+msgid ""
+"Once you have completed the installation instructions above, you can open"
+" your terminal, and make sure that Hatch installed correctly using the "
+"command below:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:98
+msgid ""
+"*Note the version number output of `hatch --version` will likely be "
+"different from the output above in this tutorial.*"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:101
+msgid "Configure Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:103
+msgid ""
+"Once you have installed Hatch, you can customize its configuration. This "
+"includes setting the default name and setup for every package you create."
+" While this step is not required, we suggest that you do it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:107
+msgid ""
+"Hatch stores your configuration in a [`config.toml` "
+"file](https://hatch.pypa.io/latest/config/project-templates/)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:109
+msgid ""
+"While you can update the `config.toml` file through the command line, it "
+"might be easier to look at and update it in a text editor if you are "
+"using it for the first time."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:113
+msgid "Step 1: Open and Edit Your `config.toml` File"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:115
+msgid ""
+"To open the config file in your file browser, run the following command "
+"in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:118
+msgid "`hatch config explore`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:120
+msgid ""
+"This will open up a directory window that allows you to double-click on "
+"the file and open it in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:123
+msgid ""
+"You can also retrieve the location of the Hatch config file by running "
+"the following command in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:131
+msgid "Step 2 - update your email and name"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:133
+msgid ""
+"Once the file is open, update the [template] table of the `config.toml` "
+"file with your name and email. This information will be used in any "
+"[pyproject.toml](pyproject-toml) metadata files that you create using "
+"Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:144
+msgid "Step 3"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:146
+msgid "Next, set tests to false in the `[template.plugins.default]` table."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:148
+msgid ""
+"While tests are important, setting the tests configuration in Hatch to "
+"`true` will create a more complex `pyproject.toml` file. You won't need "
+"to use this feature in this beginner friendly tutorial series but we will"
+" introduce it in later tutorials."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:153
+msgid "Your `config.toml` file should look something like the one below."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:191
+msgid ""
+"Also notice that the default license option is MIT. While we will discuss"
+" license in more detail in a later lesson, the MIT license is the "
+"recommended permissive license from "
+"[choosealicense.com](https://choosealicense.com/) and as such we will use"
+" it for this tutorial series."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:197
+msgid "You are of course welcome to select another license."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:200
+msgid ""
+"I think we'd need the SPDX license options here if they want to chose "
+"bsd-3 for instance"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:203
+msgid "Step 4: Close the config file and run `hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:205
+msgid ""
+"Once you have completed the steps above run the following command in your"
+" shell."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:207
+msgid "`hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:209
+msgid ""
+"`hatch config show` will print out the contents of your `config.toml` "
+"file in your shell. Look at the values and ensure that your name, email "
+"is set. Also make sure that `tests=false`."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:213
+msgid "Hatch features"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:215
+msgid ""
+"Hatch offers a suite of features that will make creating, publishing and "
+"maintaining your Python package easier."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:218
+msgid "Comparison to other tools"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:220
+msgid ""
+"[We compared Hatch to several of the other popular packaging tools in the"
+" ecosystem including flit, pdm and poetry. Learn more here](package-"
+"features)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:223
+msgid "[More on Hatch here](hatch)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:225
+msgid "A few features that Hatch offers"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:227
+msgid ""
+"It will convert metadata stored in a `setup.py` or `setup.cfg` file to a "
+"pyproject.toml file for you (see [Migrating setup.py to pyproject.toml "
+"using Hatch](setup-py-to-pyproject-toml.md ))"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:229
+msgid ""
+"It will help you by storing configuration information for publishing to "
+"PyPI after you've entered it once."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:231
+msgid "Use `hatch -h` to see all of the available commands."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:233
+msgid "What's next"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:235
+msgid ""
+"In the next lesson you'll learn how to package and make your code "
+"installable using Hatch."
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/setup-py-to-pyproject-toml.md:36
+msgid "Get to know Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/run-python-scripts-hatch.md:8
+msgid "Run standalone Python scripts with Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34
+msgid "Python Packaging Tutorial Setup"
+msgstr ""
+
+#: ../../tutorials/intro.md:42 ../../tutorials/intro.md:89
+msgid "What is a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish using GitHub Actions and Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create and publish a Python Package"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Develop package (Hatch environments)"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add README file"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add a license & code of conduct"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Update metadata in pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Project information files & metadata"
+msgstr ""
+
+#: ../../tutorials/intro.md:63
+msgid "Reference Guides"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Migrate setup.py to a pyproject.toml using Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Hatch for Existing Packages"
+msgstr ""
+
+#: ../../tutorials/intro.md:7
+msgid "Python packaging 101"
+msgstr ""
+
+#: ../../tutorials/intro.md:9
+msgid "_A start to finish beginner-friendly tutorial_"
+msgstr ""
+
+#: ../../tutorials/intro.md:11
+#, python-brace-format
+msgid ""
+"Welcome to the pyOpenSci Python packaging tutorial series. The lessons on"
+" the upcoming pages walk you through the core steps needed to create a "
+"{term}`Python package`."
+msgstr ""
+
+#: ../../tutorials/intro.md:17
+msgid ""
+"Diagram showing the lessons in our packaging tutorial. There are 6 total "
+"- what is a Python package, make code pip installable, publish your "
+"package to PyPI, add a README and LICENSE file, add metadata for PyPI and"
+" finally publish to conda forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:19 ../../tutorials/trusted-publishing.md:258
+msgid ""
+"This lesson is the first in a series of lessons to help you get started "
+"with Python packaging."
+msgstr ""
+
+#: ../../tutorials/intro.md:22
+msgid "Who are these tutorials for?"
+msgstr ""
+
+#: ../../tutorials/intro.md:24
+msgid ""
+"The content in this tutorial series is beginner friendly and assumes that"
+" you have not created a Python package before. However, the content will "
+"still be valuable if you are interested in better understanding the steps"
+" involved in creating a Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:29
+msgid ""
+"In this series you will learn about the core elements that you need to "
+"publish your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/intro.md:32
+msgid ""
+"In the second series, you will learn about infrastructure and "
+"documentation needed to support package maintenance."
+msgstr ""
+
+#: ../../tutorials/intro.md:77 ../../tutorials/publish-conda-forge.md:22
+#: ../../tutorials/publish-pypi.md:20 ../../tutorials/pyproject-toml.md:27
+#: ../../tutorials/setup-py-to-pyproject-toml.md:20
+#: ../../tutorials/trusted-publishing.md:13
+msgid "Learning Objectives"
+msgstr ""
+
+#: ../../tutorials/intro.md:79
+msgid ""
+"This lesson introduces you to the basic components of a Python package. "
+"After reading this lesson you will:"
+msgstr ""
+
+#: ../../tutorials/intro.md:82
+msgid "Understand what a Python package is"
+msgstr ""
+
+#: ../../tutorials/intro.md:83
+msgid "Be able to list the 5 core components of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:84
+msgid ""
+"Be able to explain the difference between generalizable code and code "
+"that supports a specific scientific application"
+msgstr ""
+
+#: ../../tutorials/intro.md:91
+msgid ""
+"At a high level, you can think about a Python package as a toolbox that "
+"you can use to perform various tasks."
+msgstr ""
+
+#: ../../tutorials/intro.md:94
+#, python-brace-format
+msgid ""
+"A Python package is basically a directory with a specific file structure."
+" Within the package directory structure, there are {term}`Module` objects"
+" which are files that end in `.py` (the same extension you'd see in a "
+"Python script). These modules allow you to group and structure your "
+"Python code. Each module contains functions and classes, that you can "
+"think about as the tools in your toolbox."
+msgstr ""
+
+#: ../../tutorials/intro.md:103
+msgid ""
+"Diagram showing a sketch of a toolbox filled with different tools "
+"including a hammer and a saw."
+msgstr ""
+
+#: ../../tutorials/intro.md:105
+msgid ""
+"You can think about a package as a toolbox filled with coding tools. A "
+"tool may be a function or a class. Each tool does a specific thing well."
+msgstr ""
+
+#: ../../tutorials/intro.md:110
+msgid "Python packages are installable"
+msgstr ""
+
+#: ../../tutorials/intro.md:112
+msgid ""
+"A package is installable, which means that you can add the functionality "
+"within the package's code to any Python environment and import that "
+"functionality like you would import core scientific Python packages such "
+"as NumPy or Matplotlib."
+msgstr ""
+
+#: ../../tutorials/intro.md:121
+msgid ""
+"Installing a package into an environment makes it easier to manage and "
+"reuse your code across different projects. Structuring your code as a "
+"package is the first step you need to take so you can share the tools in "
+"the toolbox you've created and let others build with it."
+msgstr ""
+
+#: ../../tutorials/intro.md:126
+msgid "Why create a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:128
+msgid "You might create a Python package because you want to:"
+msgstr ""
+
+#: ../../tutorials/intro.md:130
+msgid ""
+"**Use your code across different projects:** At its most basic level, "
+"creating a package allows you to install your code into a Python "
+"environment. This allows you to then import functions and classes into "
+"any workflows both locally and in the cloud."
+msgstr ""
+
+#: ../../tutorials/intro.md:131
+#, python-brace-format
+msgid ""
+"**Share your code:** If you publish a package on a public repository such"
+" as PyPI or conda-forge, your package can be installed on any machine "
+"using {term}`pip` or conda with a single command."
+msgstr ""
+
+#: ../../tutorials/intro.md:134
+msgid ""
+"**Build community around your code:** Packages make it easier for "
+"multiple people to work on the same project (particularly when published "
+"on GitHub). A version control system such as git (the system used by "
+"GitHub), further makes it easier to track changes to the codebase over "
+"time. Tools such as issues and pull requests make it easier for outside "
+"users to contribute bug fixes and to establish review processes for "
+"accepting changes to the code base."
+msgstr ""
+
+#: ../../tutorials/intro.md:135
+msgid ""
+"**Organize your code:** Packages can be used to organize large code "
+"projects, dividing them into smaller, more manageable components. This "
+"structure can help with both maintaining the codebase and with making it "
+"easier to understand."
+msgstr ""
+
+#: ../../tutorials/intro.md:137
+msgid "What to consider before you create a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:139
+msgid ""
+"Creating a Python package that others use takes considerable time and "
+"effort. Before you begin, think about your goals including:"
+msgstr ""
+
+#: ../../tutorials/intro.md:142
+msgid "Who you think will use your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:143
+msgid "How people might use your package and on what data (if data are relevant)"
+msgstr ""
+
+#: ../../tutorials/intro.md:144
+msgid "Whether you have time to add things such as documentation and tests"
+msgstr ""
+
+#: ../../tutorials/intro.md:145
+msgid ""
+"How long you might be able to maintain it: remember that once people "
+"begin using your package they will depend on your maintainer team to "
+"update it, fix bugs and answer questions."
+msgstr ""
+
+#: ../../tutorials/intro.md:147
+msgid ""
+"Before creating a user-facing package, it's important to consider all of "
+"the above."
+msgstr ""
+
+#: ../../tutorials/intro.md:149
+msgid "The elements of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:153 ../../tutorials/intro.md:231
+msgid "Diagram showing .. more here if this stays."
+msgstr ""
+
+#: ../../tutorials/intro.md:155
+msgid ""
+"The elements of a Python package include code, documentation, tests, an "
+"OSI-approved license and infrastructure. Maintainers are at the core "
+"making sure everything works and is up to date while fixing bugs and "
+"addressing user concerns."
+msgstr ""
+
+#: ../../tutorials/intro.md:161
+msgid "The core elements of Python package include:"
+msgstr ""
+
+#: ../../tutorials/intro.md:163
+msgid ""
+"**Code:** Functions and classes that provide functionality for a user of "
+"your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:164
+msgid ""
+"**Documentation:** Installation instructions, tutorials, and examples "
+"that both help users get started using your package and contributors and "
+"maintainers fix bugs and maintain the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:165
+msgid ""
+"Contributor Documentation in the form of a **CONTRIBUTING.md** file is "
+"useful to help people to contribute to your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:166
+msgid ""
+"Development Documentation helps both maintainers and contributors "
+"understand how to maintain a package's infrastructure."
+msgstr ""
+
+#: ../../tutorials/intro.md:167
+msgid ""
+"**Tests:** that make sure your code works as it should and makes it "
+"easier for you and others to contribute to, modify and update the code in"
+" the future"
+msgstr ""
+
+#: ../../tutorials/intro.md:168
+msgid ""
+"**License:** An open source license, or license that is [OSI "
+"approved](https://opensource.org/license/), refers to an license that "
+"allows others to use your package. It also provides legal direction "
+"regarding how elements of the package can and can't be reused."
+msgstr ""
+
+#: ../../tutorials/intro.md:169
+msgid ""
+"**Infrastructure** that automates updates, publication workflows and runs"
+" test suites. Infrastructure includes a suite of things such as platforms"
+" like GitHub and GitLab, tools to run tests and tools locally such as nox"
+" and tox and continuous integration that automates package maintenance "
+"steps."
+msgstr ""
+
+#: ../../tutorials/intro.md:171
+msgid "What pyOpenSci looks for in a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:174
+msgid ""
+"pyOpenSci performs an [initial set of editor "
+"checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-"
+"chief-guide.html#editor-checklist-template) for any package submitted to "
+"us for peer review. You may find these checks useful as you create your "
+"package as a baseline for things that you package should have."
+msgstr ""
+
+#: ../../tutorials/intro.md:180
+msgid "Packages are more than just code - Infrastructure"
+msgstr ""
+
+#: ../../tutorials/intro.md:182
+msgid ""
+"A package in any language is more than just code. If you expect other "
+"people to use your package, besides yourself, you should consider not "
+"only writing high quality code, but also the various elements of a "
+"package that make it a useful community resource."
+msgstr ""
+
+#: ../../tutorials/intro.md:187
+msgid "Version control and storing your package on GitHub or GitLab"
+msgstr ""
+
+#: ../../tutorials/intro.md:189
+msgid ""
+"Most Python packages live in an online version control platform such as "
+"GitHub or GitLab. GitHub and GitLab both run [git](https://git-scm.com/) "
+"for version control. Having your software under version control is "
+"important because it allows you to both track changes over time while "
+"also going back in history and undoing changes in the case that a change "
+"to the code base unexpectedly breaks something."
+msgstr ""
+
+#: ../../tutorials/intro.md:194
+msgid ""
+"By publishing your package on GitHub or GitLab, you are making your code "
+"public facing. This means that others can both see your code and also "
+"make contributions using a pull request (GitHub) / merge request (GitLab)"
+" / code review workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:196
+msgid "GitHub & GitLab vs. Git"
+msgstr ""
+
+#: ../../tutorials/intro.md:199
+msgid ""
+"GitHub and GitLab are online (cloud) platforms that run `git` (version "
+"control software) on the backend. Running git locally on your computer "
+"allows you to upload (`git push`) and download (`git pull`) files to "
+"GitHub and GitLab."
+msgstr ""
+
+#: ../../tutorials/intro.md:204
+msgid "Issues or Ticket Trackers"
+msgstr ""
+
+#: ../../tutorials/intro.md:206
+msgid ""
+"GitHub and GitLab also both offer community features such as issues that "
+"allow:"
+msgstr ""
+
+#: ../../tutorials/intro.md:208
+msgid "you to communicate with your maintainers and contributor community"
+msgstr ""
+
+#: ../../tutorials/intro.md:209
+msgid "users to report bugs, ask questions and request new features"
+msgstr ""
+
+#: ../../tutorials/intro.md:210
+msgid ""
+"you to publicly keep track of enhancements and features you want to work "
+"on for your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:212
+msgid "Continuous integration and continuous deployment"
+msgstr ""
+
+#: ../../tutorials/intro.md:214
+msgid ""
+"GitHub and GitLab also provide continuous integration and continuous "
+"deployment (CI/CD). Continuous integration (CI) refers to a platform that"
+" automatically runs a specific job when a certain event occurs, whereas "
+"continuous deployment (CD) is an extension of CI that refers to not only "
+"running or building but also to publishing the final outputs somewhere."
+msgstr ""
+
+#: ../../tutorials/intro.md:216
+msgid "**An example of Continuous integration:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:218
+msgid ""
+"When someone submits a change to your code, your tests will run across "
+"different operating systems and the code will be checked for format "
+"issues."
+msgstr ""
+
+#: ../../tutorials/intro.md:220
+msgid "**An example of Continuous deployment:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:222
+msgid ""
+"When you are ready to release your package to PyPI, a continuous "
+"deployment operation might be triggered on release to publish your "
+"package to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:224
+msgid ""
+"Integrated CI/CD will help you maintain your software, ensuring that "
+"changes to the code don't break things unexpectedly. They can also help "
+"you maintain code style and format consistency for every new change to "
+"your code."
+msgstr ""
+
+#: ../../tutorials/intro.md:233
+msgid "The lifecycle of a scientific Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:236
+msgid "When should you turn your code into a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:238
+msgid ""
+"You may be wondering, what types of code should become a Python package "
+"that is both on GitHub and published to PyPI and/or conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:240
+msgid "There are a few use cases to consider:"
+msgstr ""
+
+#: ../../tutorials/intro.md:242
+msgid ""
+"**Creating a basic package for yourself:** Sometimes you want create a "
+"package for your own personal use. This might mean making your code "
+"locally pip installable and you may also want to publish it to GitHub. In"
+" that case you don't expect others to use your code, and as such you may "
+"only have documentation for you and your future self if you need to "
+"update the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:244
+msgid ""
+"An example of this type of package might be a set of functions that you "
+"write that are useful across several of your projects. It could be useful"
+" to have those functions available to all of your projects."
+msgstr ""
+
+#: ../../tutorials/intro.md:247
+msgid "LINK to pip installable lesson when it's published - it's in review now"
+msgstr ""
+
+#: ../../tutorials/intro.md:250
+msgid ""
+"**Creating a package for the community:** In other cases, you may create "
+"some code that you soon realize might also be useful to not just you, but"
+" to other people as well. In that case, you might consider both creating "
+"the package, publishing it on GitHub, and because other users may be "
+"using it, you may make use of GitHub's infrastructure including CI/CD "
+"pipelines and issue trackers. Because you want other people to use your "
+"package, you will want to also include LICENSE information, documentation"
+" for users and contributors and tests. This type of package is most often"
+" published to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:253
+msgid ""
+"For example, all of the [pyOpenSci packages](https://www.pyopensci.org"
+"/python-packages.html) are public facing with an intended audience beyond"
+" just the maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:255
+msgid "Packages that you expect others to use should be well-scoped"
+msgstr ""
+
+#: ../../tutorials/intro.md:257
+msgid ""
+"Ideally the code in your Python package is focused on a specific theme or"
+" use case. This theme is important as it's a way to scope the content of "
+"your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:259
+msgid ""
+"It can be tricky to decide when your code becomes something that might be"
+" more broadly useful to others. But one question you can ask yourself is "
+"- is your code written specifically for a single research project? Or "
+"could it have a broader application across multiple projects in your "
+"domain?"
+msgstr ""
+
+#: ../../tutorials/intro.md:261
+msgid "How does this relate to code for a research project?"
+msgstr ""
+
+#: ../../tutorials/intro.md:264
+msgid ""
+"A [Research Compendium](https://book.the-turing-way.org/reproducible-"
+"research/compendia.html) is an organized set of code, data and "
+"documentation that supports a specific research project. It aims to "
+"enhance the reproducibility and transparency of research by providing a "
+"comprehensive record of the methods, data, and analyses used in a study."
+msgstr ""
+
+#: ../../tutorials/intro.md:269
+msgid ""
+"A Python package is a collection of modules that can be used to perform a"
+" specific set of tasks. These tasks should be applicable to numerous "
+"workflows. As such a Python package is more generalizable than a Research"
+" Compendium which supports a specific project."
+msgstr ""
+
+#: ../../tutorials/intro.md:274
+msgid ""
+"[Read about `Good enough practices in scientific "
+"computing`](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510)"
+msgstr ""
+
+#: ../../tutorials/intro.md:275
+msgid ""
+"[Learn more about research compendia (also called repo-packs) in this "
+"blog post.](https://lorenabarba.com/blog/how-repro-packs-can-save-your-"
+"future-self/)"
+msgstr ""
+
+#: ../../tutorials/intro.md:278
+msgid "Below are a few examples well scoped pyOpenSci packages:"
+msgstr ""
+
+#: ../../tutorials/intro.md:280
+msgid ""
+"[Crowsetta](https://crowsetta.readthedocs.io/en/latest/): is a package "
+"designed to work with annotating animal vocalizations and bioacoustics "
+"data. This package helps scientists process different types of "
+"bioacoustic data rather than focusing on a specific individual research "
+"application associated with a user-specific research workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:281
+msgid ""
+"[Pandera](https://www.union.ai/pandera) is another more broadly used "
+"Python package. Pandera supports data testing and thus also has a broader"
+" research application."
+msgstr ""
+
+#: ../../tutorials/intro.md:283
+msgid "Matplotlib as an example"
+msgstr ""
+
+#: ../../tutorials/intro.md:285
+msgid ""
+"At the larger end of the user spectrum, Matplotlib is a great example. "
+"Matplotlib does one thing really well:"
+msgstr ""
+
+#: ../../tutorials/intro.md:288
+msgid "_It creates visual plots of data._"
+msgstr ""
+
+#: ../../tutorials/intro.md:290
+msgid ""
+"Thousands of people use Matplotlib for different plotting applications "
+"using different types of data. While few scientific packages will have "
+"the same broad application and large user base that Matplotlib has, the "
+"idea of scoping out what your package does is still important."
+msgstr ""
+
+#: ../../tutorials/intro.md:296
+msgid "Code should also be clean & readable & documented"
+msgstr ""
+
+#: ../../tutorials/intro.md:298
+msgid ""
+"The code in your package should also be clean, readable, and well "
+"documented."
+msgstr ""
+
+#: ../../tutorials/intro.md:300
+msgid ""
+"**Clean code:** Clean code refers to code that uses expressive variable "
+"names, is concise and doesn't repeat itself. You can learn about best "
+"practices for clean code in future pyOpenSci tutorials."
+msgstr ""
+
+#: ../../tutorials/intro.md:304
+msgid ""
+"**Readable code:** readable code is code written with a consistent style."
+" You can use linters and code formatters such as black and flake8 to "
+"ensure this consistency throughout your entire package. [Learn more about"
+" code formatters here.](../package-structure-code/code-style-linting-"
+"format)"
+msgstr ""
+
+#: ../../tutorials/intro.md:308
+msgid ""
+"**Documented code:** documented code is written using docstrings that "
+"help a user understand both what the functions and methods in your code "
+"do and also what the input and output elements of each function are. [You"
+" can learn more about docstrings in our guide, here.](../documentation"
+"/write-user-documentation/document-your-code-api-docstrings)"
+msgstr ""
+
+#: ../../tutorials/intro.md:312
+msgid "Making your package installable - publishing to PyPI & conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:314
+msgid "Python packages and environments"
+msgstr ""
+
+#: ../../tutorials/intro.md:316
+msgid ""
+"You can install a Python package into a Python environment in the same "
+"way you might install NumPy or Pandas. Installing your package into an "
+"environment allows you to access it from any code run with that specific "
+"Python environment activated."
+msgstr ""
+
+#: ../../tutorials/intro.md:322
+msgid ""
+"Diagram showing the steps associated with creating a package and then "
+"installing it. The first arrow says your package and the second says pip "
+"install package. The second arrow leads to a box that represents a Python"
+" environment that already has some packages installed such as Pandas and "
+"NumPy. Your package will also get installed into that same environment "
+"when you pip install it."
+msgstr ""
+
+#: ../../tutorials/intro.md:324
+msgid ""
+"You don't have to publish to PyPI to make your code installable. With the"
+" correct file structure and project metadata you can make your code "
+"installable locally on your computer and use it for projects that you are"
+" working on without having to ever publish to PyPI. Publishing to PyPI is"
+" useful when you want to make your code public-facing and share it with "
+"others."
+msgstr ""
+
+#: ../../tutorials/intro.md:331
+msgid "Publishing a package to PyPI / Conda-Forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:333
+msgid ""
+"If you want to make your package directly installable without having to "
+"download the code to your computer locally then you need to publish it in"
+" a repository such as **PyPI** or **conda-forge**."
+msgstr ""
+
+#: ../../tutorials/intro.md:337
+msgid ""
+"Learn [how to publish your package to PyPI in this tutorial.](publish-"
+"pypi.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:339
+msgid ""
+"Then you can create a conda-forge recipe using the "
+"[Grayskull](https://github.com/conda/grayskull) tool. You can then submit"
+" this recipe to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:341
+msgid ""
+"[You will learn more about the conda-forge publication process here"
+".](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:344
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:346
+msgid ""
+"In the image above, you can see the steps associated with publishing your"
+" package on PyPI and conda-forge. PyPI supports [sdist](#python-source-"
+"distribution) and [wheel](#python-wheel) files. Once you are ready to "
+"make your code publicly installable, you can publish it on PyPI. Once "
+"your code is on PyPI it is straight forward to then publish to conda-"
+"forge. You create a recipe using the Grayskull package and then you open "
+"a pr in the conda-forge recipe repository. You will learn more about this"
+" process in the [conda-forge lesson](/tutorials/publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/intro.md:350
+msgid "Yay, your package has users! Now what?"
+msgstr ""
+
+#: ../../tutorials/intro.md:352
+msgid ""
+"As the community using your package grows, you may also find yourself "
+"managing users, contributors, and others who want to interact with your "
+"package. It’s important to consider all this before you dive into "
+"development. Once you have a user base in the community, people will "
+"depend upon your code to work and will need direction regarding how to "
+"use it."
+msgstr ""
+
+#: ../../tutorials/intro.md:354
+msgid "To support your community, you'll want to add things like:"
+msgstr ""
+
+#: ../../tutorials/intro.md:356
+msgid ""
+"[a development guide that documents your maintainer workflow process "
+"](/documentation/repository-files/development-guide.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:357
+msgid ""
+"[a code of conduct to defines community interaction standards and "
+"expectations](/documentation/repository-files/code-of-conduct-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:358
+msgid ""
+"[a contributing guide that helps users understand expectations associated"
+" with making contributions to your project](/documentation/repository-"
+"files/contributing-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:360
+msgid "Support for contributors and maintainers"
+msgstr ""
+
+#: ../../tutorials/intro.md:362
+msgid ""
+"If you intend for others to use and contribute to your code, consider who"
+" will maintain it over time. You will want a **contributing and "
+"development** guide to help new potential contributors get started with "
+"contributing to your package, as well as a **code of conduct** to ensure "
+"community interactions remain healthy both for you and your contributors "
+"and maintainer team."
+msgstr ""
+
+#: ../../tutorials/intro.md:364
+msgid ""
+"The elements above are also important for future maintenance of your "
+"package. In the case that you are no long able to maintain it or simply "
+"want extra help, development, and contributing documentation will help "
+"you onboard new maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:369
+msgid "What's next?"
+msgstr ""
+
+#: ../../tutorials/intro.md:371
+msgid ""
+"In future lessons you will learn more about the infrastructure around a "
+"published Python package that makes it both easier to maintain, easier "
+"for others to contribute to and easier for other scientists to use. "
+"However, first we want to get you to your initial goal of publishing a "
+"Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:373
+msgid ""
+"In this next lesson you will learn how to create a basic installable "
+"Python package. Make your code pip installable "
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:6
+msgid "Publish your Python package that is on PyPI to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:8
+msgid "In the previous lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:10
+msgid ""
+"How to [create the most basic version of a Python package](create-python-"
+"package.md). This entailed making your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:11
+msgid "[How to publish your Python package to PyPI](publish-pypi)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:12
+msgid "How to add a `README` and `LICENSE` file to your package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:13
+msgid ""
+"How to setup your [pyproject.toml](pyproject-toml) file with all of the "
+"metadata that PyPI requires and also metadata that will be helpful for "
+"users to find your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:17
+msgid ""
+"If you have gone through all of the above lessons, you are now ready to "
+"publish your package on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:20
+msgid ""
+"**IMPORTANT:** Please do not practice publishing your package to conda-"
+"forge. You should only publish to conda-forge when you have a package on "
+"pypi.org that you plan to maintain."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:26 ../../tutorials/publish-pypi.md:24
+msgid "In this lesson you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:28
+msgid "Create a conda-forge yaml recipe for your package using Grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:29
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:30
+msgid ""
+"Maintain your conda-forge package by creating new releases for your "
+"package on PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:33
+#, python-brace-format
+msgid ""
+"Once your package is on PyPI you can then easily publish it to conda-"
+"forge using the [grayskull](https://conda.github.io/grayskull/) tool. You"
+" do not need to build the package specifically for conda, conda-forge "
+"will build from your PyPI {term}`Source distribution (sdist)` file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:41
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:43
+#, python-brace-format
+msgid ""
+"Once you have published both package distributions (the {term}`Source "
+"distribution (sdist)` and the {term}`Wheel (.whl)`) to PyPI, you can then"
+" publish to conda-forge. Conda-forge requires a source distribution on "
+"PyPI in order to build your package on conda-forge. You do not need to "
+"rebuild your package to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:50
+msgid "What is conda-forge?"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:52
+msgid ""
+"conda is an open source package and environment management tool that can "
+"be used to install tools from the different channels on Anaconda.org."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:55
+msgid ""
+"You can think about a channel as a specific location where a group of "
+"packages are stored and can be installed from using a command such as "
+"`conda install packagename`. In the case of conda channels, some of these"
+" channels such as the `defaults` channel, is managed by Anaconda (the "
+"company). Only Anaconda can decide what packages are available in the "
+"`defaults` channel. However, the conda-forge (and bioconda) channel are "
+"community-managed channels. Anyone can submit a package to these channels"
+" however they must pass a technical review in the [staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes) to be "
+"published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:58
+msgid "[Learn more about conda channels here.](#about-conda)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:62
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the Anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI and test PyPI (a "
+"testbed server for you to practice)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:64
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:67
+msgid "Why publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:69
+msgid ""
+"There are many users, especially in the scientific Python ecosystem that "
+"use conda as their primary package manager / environment tool. Thus, "
+"having packages available to these users on the conda-forge channel is "
+"useful. In some cases packages on conda-forge can minimize dependency "
+"conflicts that can occur when mixing installations using pip and conda. "
+"This is particularly important for the spatial ecosystem."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:71
+msgid "How publishing to conda-forge works"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:73
+msgid ""
+"Once you have built and published your package to PyPI, you have "
+"everything that you need to publish to conda-forge. There is no "
+"additional build step needed to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:75
+msgid ""
+"Conda-forge will build your package from the source distribution which "
+"you [published to PyPI in the previous lesson](publish-pypi) using the "
+"recipe that you will create below."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:77
+msgid "Conda-forge publication steps"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:80
+msgid ""
+"Image showing the steps associated with publishing to conda-forge. Check "
+"out the caption below for a detailed description."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:82
+msgid ""
+"The steps for publishing to conda-forge begin with publishing your Python"
+" package to PyPI. Once you have published to PyPI you can then create a "
+"yaml file recipe that can be submitted to the conda-forge staged recipes "
+"repository for review. Once that recipe is accepted, your package will "
+"get it's on repository (known as a feedstock) on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:85
+msgid "The steps to publish to conda-forge are:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:87
+msgid "Publish your Python package distribution files (sdist & wheel) to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:88
+msgid ""
+"Create a conda-forge recipe, which is a yaml file with instructions on "
+"how to build your package on conda-forge, using the grayskull[^grayskull]"
+" package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:89
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request for review. [Click here for an example "
+"submission from pyOpenSci.](https://github.com/conda-forge/staged-"
+"recipes/pull/25173)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:91
+msgid ""
+"Once someone from the conda-forge team reviews your pull request, you may"
+" need to make some changes. Eventually the pull request will be approved "
+"and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:93
+msgid ""
+"Once your recipe is accepted and merged on conda-forge, users can install"
+" your package using:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:95
+msgid "`conda install -c conda-forge your-package`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:97
+msgid ""
+"You only create the recipe once. Once the recipe is accepted and merged, "
+"you only need to maintain the repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:99
+msgid "Maintaining a conda-forge package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:101
+msgid ""
+"Once your package is on conda-forge, the repository will track release "
+"activity on the package's PyPI repository. Any time you make a new PyPI "
+"release with a new source distribution, conda-forge will build and update"
+" your conda-forge repository (also known as a feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:103
+msgid ""
+"When the update is processed, the friendly conda-forge bot will create a "
+"new pull request with an updated distribution recipe in your feedstock."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:105
+msgid ""
+"You can review that pull request and then merge it once all of the "
+"continuous integration tests pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:107
+msgid ""
+" How to Publish your package"
+" on conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:109
+msgid ""
+"It's time to add your package to the conda-forge channel. Remember that "
+"your package needs to be on PyPI before the steps below will work. And "
+"also remember that the team managing conda-forge are all volunteers."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:112
+msgid ""
+"Be sure that your package is on PyPI.org (not test.pypi.org) before you "
+"attempt to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:115
+msgid ""
+"Only submit your package to conda-forge if you intend to maintain it over"
+" time."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:118
+msgid ""
+"Note - this is a tutorial aimed to help you get your package onto conda-"
+"forge. The official conda documentation for this processed [is "
+"here](https://conda-forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:120
+msgid "Step 1: Install grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:122
+msgid ""
+"First, [install "
+"grayskull](https://conda.github.io/grayskull/user_guide.html). You can "
+"install it using either pip:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:128
+msgid "or conda"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:134
+msgid ""
+"To run this command, use the same shell / terminal that you have been "
+"using to run hatch commands in the previous tutorials."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:139
+msgid ""
+"You can also install grayskull using pipx[^pipx]. pipx is a tool that "
+"allows you to install commonly used tools that you might want to have "
+"available across multiple Python environments rather than installing the "
+"package into every Python environment that you create."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:142
+msgid "Step 2: Fork and clone the conda-forge staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:144
+msgid ""
+"Next, open your shell and `cd` to a location where you want to clone the "
+"**conda-forge/staged-recipes** repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:145
+msgid ""
+"fork and clone the [conda-forge/staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:146
+msgid ""
+"Create a new branch in your fork rather than submitting from the main "
+"branch of your fork. We suggest naming the branch your package's name."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:148
+msgid "`git checkout -b your-package-name `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:150
+msgid "In bash, `cd` into the `staged-recipes/recipes` folder"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:158
+msgid ""
+"Next, create a new branch in your `conda-forge/staged-recipes` cloned "
+"repository. You might want to make that branch the same name as your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:169
+msgid "Step 3: Create your conda-forge recipe"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:171
+msgid "Next, navigate to the recipes directory"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:173
+msgid ""
+"If you run `ls` here, you will notice there is an example directory with "
+"an example recipe for you to look at."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:185
+msgid "Next, run `grayskull pypi your-package-name` to generate a recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:229
+msgid ""
+"Grayskull will pull metadata about your package from PyPI. It does not "
+"use your local installation of the package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:230
+msgid ""
+"An internet connection is needed to run the `grayskull pypi your-package-"
+"name` step."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:233
+msgid ""
+"When you run grayskull, it will grab the latest distribution of your "
+"package from PyPI and will use that to create a new recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:235
+msgid ""
+"The recipe will be saved in a directory named after your package's name, "
+"wherever you run the command."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:237
+msgid "`recipes/packagename/meta.yaml`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:239
+msgid ""
+"At the very bottom of the grayskull output, it will also tell you where "
+"it saved the recipe file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:242
+msgid ""
+"Open the meta.yaml file. The finished `meta.yaml` file that grayskull "
+"creates should look like the example below:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:289
+msgid "Step 3b: Bug fix - add a home url to the about: section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:291
+msgid ""
+"There is currently a small bug in Grayskull where it doesn't populate the"
+" home: element of the recipe. If you don't include this, [you will "
+"receive an error message](https://github.com/conda-forge/staged-"
+"recipes/pull/25173#issuecomment-1917916528) from the friendly conda-forge"
+" linter bot."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:305
+msgid "to fix this, open your meta.yaml file in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:306
+msgid "and add a home: element to the about section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:308
+msgid "The about section will look like this after you create your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:318
+msgid ""
+"Below you add a home: element. If you have a project home page / website "
+"you can use that url. Otherwise, you can also use your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:329
+msgid "Step 4: tests for conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:331
+msgid ""
+"Next, have a look at the tests section in your **meta.yaml** file. At a "
+"minimum you should import your package or the main modules associated "
+"with your package and run `pip check`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:333
+msgid ""
+"`pip check` will ensure that your package installs properly with all of "
+"the proper dependencies."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:345
+msgid ""
+"If you have more advanced tests that you wish to run, you can add them "
+"here. However, you can also simply leave the tests section as it is."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:347
+msgid "Step 4: Submit a pull request to the staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:349
+msgid ""
+"Once you have completed all of the above, you are ready to open up a pull"
+" request in the `conda-forge/staged-recipes repository`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:351
+msgid ""
+"Submit a pull request from your fork/branch of the staged-recipes "
+"repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:352
+msgid ""
+"Remember that the conda-forge maintainers are volunteers. Be patient for "
+"someone to respond and supportive in your communication with them."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md
+msgid "Conda-forge checklist help"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:358
+msgid "Conda-forge Staged-recipes Pull Request Checklist"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:360
+msgid ""
+"When you submit your package to conda-forge, the pull request template "
+"includes a list of checks that you want to ensure you have covered."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:362
+msgid "Below we break down each element of that list."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:364
+msgid "Pull request template checklist tips"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:367
+msgid ""
+"-[x] Title of this PR is meaningful: e.g. \"Adding my_nifty_package\", "
+"not \"updated meta.yaml\"."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:369
+msgid ""
+"**Translation:** Make sure that your pull request title is specific. We "
+"suggest something like: `Add recipe for `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:372
+msgid ""
+"-[x] License file is packaged (see [here](https://github.com/conda-forge"
+"/staged-"
+"recipes/blob/5eddbd7fc9d1502169089da06c3688d9759be978/recipes/example/meta.yaml#L64-L73)"
+" for an example)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:374
+msgid ""
+"**Translation:** You should have a LICENSE file included in your "
+"package's source distribution. If you have followed the pyOpenSci "
+"tutorials then you already have a LICENSE file and are likely using the "
+"MIT license. When you run `hatch build`, it will bundle that file into "
+"the output [source distribution file (which is the tar.gz file)](python-"
+"source-distribution) that conda-forge will use to build your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:376
+msgid "[x] Source is from official source."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:378
+msgid ""
+"**Translation:** If your package is on PyPI as you learned in the "
+"[previous lesson on publishing your Python package](publish-pypi) then "
+"you are in good shape. conda-forge prefers that your distribution is "
+"published to a known repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:380
+msgid ""
+"-[x] Package does not vendor other packages. (If a package uses the "
+"source of another package, they should be separate packages or the "
+"licenses of all packages need to be packaged)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:382
+msgid ""
+"**Translation:** If the code base in your package is your own and it all "
+"shares the same LICENSE then you are in good shape. If you have code "
+"taken from other packages then you may need to declare that and include "
+"licenses for that code if it is different. If you followed these "
+"tutorials then you do not have any vendored code."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:384
+msgid ""
+"-[x] If static libraries are linked in, the license of the static library"
+" is packaged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:386
+msgid ""
+"-[x] Package does not ship static libraries. If static libraries are "
+"needed, [follow CFEP-18](https://github.com/conda-"
+"forge/cfep/blob/main/cfep-18.md)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:388
+msgid ""
+"**Translation:** A static library refers to a copy of a package built "
+"into your package. If your package is a pure Python package, then you can"
+" check that your package does not ship static libraries as this does not "
+"apply to you."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:390
+msgid ""
+"The pyOpenSci tutorials are all pure Python and as such do not use static"
+" libraries in a linked or shipped (included in the package distribution) "
+"format."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:392
+msgid ""
+"If your package has a more complex build that includes links to "
+"extensions written in other languages such as C++, then be sure to "
+"include the proper licenses for those extensions in your metadata."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:397
+msgid ""
+"If you want to learn more about static libraries, then [this "
+"overview](https://pypackaging-"
+"native.github.io/background/compilation_concepts/#shared-vs-static-"
+"libraries) might help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:400
+msgid "-[ ] Build number is 0."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:402
+msgid ""
+"**Translation:** The build number in your recipe is right below the "
+"source location of your package's source distribution. `number: 0` is "
+"what you should see in that section of your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:415
+msgid ""
+"[x] A tarball (`url`) rather than a repo (e.g. `git_url`) is used in your"
+" recipe (see [here](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html) for more details)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:417
+msgid ""
+"**Translation:** Here conda wants you to provide a link to the source "
+"distribution on PyPI rather than a link to your GitHub repository "
+"distribution. Notice above in the Source section of your recipe there is "
+"a `url:` section that provides a PyPI url that ends in tar.gz. That is a "
+"link to your source distribution that conda-forge will use."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:423
+msgid ""
+"[x] GitHub users listed in the maintainer section have posted a comment "
+"confirming they are willing to be listed there."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:425
+msgid ""
+"**Translation** Once you have submitted your recipe, be sure that all "
+"maintainers listed in your recipe respond acknowledging that they are ok "
+"with being listed as a maintainer for the conda-forge version of your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:427
+msgid ""
+"[x] When in trouble, please check our [knowledge base "
+"documentation](https://conda-"
+"forge.org/docs/maintainer/knowledge_base.html) before pinging a team."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:429
+msgid ""
+"**Translation** The conda team are volunteers who spend their time "
+"supporting our community. Please try to troubleshoot on your own first "
+"before tagging one of them for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:431
+msgid ""
+"This is also why we don't suggest you publish to conda-forge as a "
+"practice run."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:435
+msgid ""
+"Once you create your pull request, a suite of CI actions will run that "
+"build and test the build of your package. A conda-forge maintainer will "
+"work with you to get your recipe in good shape and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:439
+msgid ""
+"Image showing the 5 CI tasks that will run against your package in the "
+"GitHub interface after you'ce created a pull request."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:441
+msgid ""
+"Wait until all of the CI steps in your pull request have run. At that "
+"point your pull request is ready for review by a conda-forge maintainer."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:444
+msgid ""
+"In some cases getting all of the checks to run successfully in CI might "
+"take a bit of work. If you are struggling to get your recipe to build "
+"properly, you can ping the conda-forge maintainer team for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:446
+msgid "Please be patient and wait for them to respond."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:448
+msgid "conda-forge staged recipes and CI failures"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:451
+msgid ""
+"If your package is a pure Python package that can be installed on any "
+"type of computer (Windows, mac, linux) and has no architecture "
+"requirements (known as noarch: Python or no architecture requirements) "
+"then the conda-forge team only requires tests for Linux CI to pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:453
+msgid ""
+"So if tests for Windows and MAC OS fail, that is to be expected. In this "
+"case, don't worry about failing tests, the maintainer team can help you "
+"get your package published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:456
+msgid ""
+"Once you have submitted your recipe, you can wait for the CI build to "
+"pass. If it's not passing, and you aren't sure why, a conda-forge "
+"maintainer can likely help you figure things out."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:458
+msgid ""
+"Once your recipe is built and merged, the conda team will create a new "
+"package repository for you similar to [this one for the GemGIS "
+"package](https://github.com/conda-forge/gemgis-feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:460
+msgid ""
+" Congratulations - you "
+"have added your package to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:462
+msgid ""
+"The last part of this process is maintaining the repository. We cover "
+"that next."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:465
+msgid "Maintaining your conda-forge feedstock"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:467
+msgid ""
+"Every time you create a new release on PyPI, the conda-forge bots will "
+"recognize the release and will rebuild the newly released version of your"
+" package. This process may take a day or two to complete so be patient."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:469
+msgid ""
+"Once the conda-forge build is complete, all of the maintainers of your "
+"conda-forge feedstock will get a ping on GitHub that a new pull request "
+"has been opened."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:471
+msgid ""
+"Review the pull request. If all tests are passing, you can merge it. "
+"Shortly after merging your pull request, the conda-forge release will be "
+"available for users to install:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:473
+msgid "`conda install -c conda-forge yourpackage`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:477
+msgid "If you have walked through this entire tutorial series you will now:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:479
+msgid "Understand [what a Python package is ](intro.md)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:480
+msgid ""
+"Know how to [make your code installable](create-python-package.md) into "
+"Python environments"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:481
+msgid ""
+"Know how to create a `pyproject.toml` file, a `README` file, and a "
+"`LICENSE` and code of conduct."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:482
+msgid "Know how to [publish your package to PyPI](publish-pypi.md) and"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:483
+msgid "Know how to publish your package to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:485
+msgid ""
+"The above are the basic steps that you need to take to create and publish"
+" a Python package. In a future tutorial series we will cover that basics "
+"of maintaining your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:489
+msgid "[Grayskull blogpost](https://conda-forge.org/blog/2020/03/05/grayskull/)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:490
+msgid "[Pipx documentation](https://pipx.pypa.io/stable/)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:7
+msgid "Publish your Python package to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:11
+msgid "Make sure they add /dist to their .gitignore file. Where does that fit?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:15
+msgid "In the previous Python packaging lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:17
+msgid "What a Python package is"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:18
+msgid "How to make your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:26
+#, python-brace-format
+msgid ""
+"Build your package's {term}`Source distribution (sdist)` and {term}`Wheel"
+" (.whl)` {term}`Distribution files`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:28
+msgid "Setup an account on TestPyPI (the process is similar for PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:29
+msgid "Publish your package to TestPyPI and PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:31
+msgid ""
+"You will do all of your development work in this lesson using [Hatch"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:34
+msgid ""
+"Once your package is on PyPI you can publish it to conda-forge (which is "
+"a channel on conda) using "
+"[Grayskull](https://conda.github.io/grayskull/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:37
+msgid ""
+"You will learn how to publish to conda-forge in the [next lesson"
+"](publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:41
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. An arrow to the right takes you to a build distribution files "
+"box. Another arrow to the right takes you to a publish to PyPI box which "
+"has an arrow containing sdist and wheel that notes those files go to PyPI"
+" for hosting. From PyPI is an arrow containing sdist since you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:43
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:46
+msgid "TestPyPI vs PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:48
+msgid ""
+"There are two repositories associated with PyPI to which you can upload "
+"your Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:51
+msgid ""
+"**[TestPyPI](https://test.pypi.org):** TestPyPI is a package repository "
+"provided by PyPI that you can use for testing that your package can be "
+"uploaded, downloaded, and installed correctly. This is a great place to "
+"practice and learn how to publish a package without exposing your "
+"incomplete package on the real PyPI service."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:52
+msgid ""
+"**[PyPI](https://pypi.org):** This is the live, production PyPI "
+"repository where you can officially publish your Python package, and from"
+" which users will get your package. IMPORTANT: Only publish your package "
+"to PyPI when you are ready for it to be used by others and/or confident "
+"that it will become a package that you will maintain. PyPI is not a place"
+" to practice learning how to publish a Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:54
+msgid ""
+"The steps for publishing on TestPyPI vs. PyPI are similar with the "
+"exception of a different url. We will point out where they differ."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:57
+msgid "4 Steps for publishing a Python package on TestPyPI (or PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:59
+msgid ""
+"In this lesson you will learn how to publish your package to TestPyPI "
+"using [Hatch](https://hatch.pypa.io/latest/). There are 4 things that you"
+" need to do to publish your Python package: to TestPyPI. You need to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:64
+msgid "**Create a package development environment**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:65
+#, python-brace-format
+msgid ""
+"[**Build your package using `hatch build`**](../package-structure-code"
+"/python-package-distribution-files-sdist-wheel). Building a package is "
+"the process of turning your code into two types of distribution files: "
+"sdist and wheel. The wheel distribution file is particularly important "
+"for users who will use {term}`pip` to install your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:66
+#, python-brace-format
+msgid ""
+"**Create an account on TestPyPI (or PyPI)**: You will need to create a "
+"TestPyPI account and associated {term}`API token` which provides "
+"permissions for you to upload your package. When you later publish your "
+"package to PyPI, you will need a separate PyPI account and token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:67
+msgid "**Publish to TestPyPI using `hatch publish`**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:69
+msgid ""
+"In a [future lesson](trusted-publishing), you will learn how to create an"
+" automated GitHub Actions workflow that publishes an updated version of "
+"your package to PyPI every time you create a GitHub release."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:71
+msgid "Learn more about building Python packages in our guide"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:75
+msgid ""
+"[Learn more about what building a Python package is](../package-"
+"structure-code/python-package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:76
+msgid ""
+"[Learn more about the package distribution file that PyPI needs called "
+"the wheel](#python-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:77
+msgid ""
+"[Learn more about the package distribution file that conda-forge will "
+"need on PyPI called the sdist (source distribution)](#python-source-"
+"distribution)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:80
+msgid "Step 1: Create a Python package development environment"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:82
+msgid ""
+"The first step in building your package is to create a development "
+"environment. The Python environment will contain all of the dependencies "
+"needed to both install and work on your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:84
+msgid "Use Hatch to create your environment."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:92
+msgid "Then view all of the current environments that hatch has access to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:104
+msgid ""
+"Then activate the environment. Note that when you call a shell from a "
+"Hatch environment, it will automatically install your package into the "
+"environment in development or editable mode."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:114
+msgid "View what's in the environment using `pip list`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:130
+msgid "At any time you can exit the environment using `exit`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:144
+msgid "Hatch and environments"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:146
+msgid ""
+"Behind the scenes when hatch creates a new virtual environment, by "
+"default it uses venv[^venv] which is the default environment management "
+"tool that comes with Python installations."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:149
+msgid "Hatch will:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:151
+msgid "Create a new virtualenv (venv) that is located on your computer."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:152
+msgid ""
+"Install your package into the environment in editable mode (similar to "
+"`python -m pip install -e`). This means it installs both your project and"
+" your project's dependencies as declared in your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:154
+msgid "Step 2: Build your package's sdist and wheel distributions"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:156
+msgid ""
+"Once you have your development environment setup, you are ready to build "
+"your package using Hatch. Remember that building is the process of "
+"turning your Python package file structure into two distribution files:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:158
+msgid ""
+"The [wheel distribution](#python-wheel) is a pre-built version of your "
+"package. It useful for users as it can be directly installed using a tool"
+" such as `pip`. This file has the extension `.whl`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:159
+msgid ""
+"The [source distribution](#python-source-distribution) contains the files"
+" that make up your package in an unbuilt format. This file will have the "
+"extension `.tar.gz`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:161
+msgid ""
+"You will use Hatch as a **Front end** tool that builds your package's "
+"sdist and wheel using the [hatchling](https://hatch.pypa.io/latest/) "
+"build back-end. The hatchling build back-end is used because you declared"
+" it in your pyproject.toml file in the [previous lesson](create-python-"
+"package)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:165
+msgid "To build your package run `hatch build`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:176
+msgid "Learn more about building a Python package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:178
+msgid ""
+"You can learn more about building in the [build page of our packaging "
+"guide](../package-structure-code/python-package-distribution-files-sdist-"
+"wheel)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:182
+msgid ""
+"The sdist is important if you wish to [publish your package to conda-"
+"forge](publish-conda-forge). You will learn about this in a later lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:186
+msgid ""
+"➜ hatch build ────────────────────────────────────── sdist "
+"────────────────────────────────────── dist/pyospackage-0.1.tar.gz "
+"────────────────────────────────────── wheel "
+"────────────────────────────────────── dist/pyospackage-0.1-py3-none-"
+"any.whl"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:193
+msgid ""
+" Congratulations - "
+"you've created your Python package distribution files "
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:195
+msgid ""
+"You've now built your Python package and created your package "
+"distribution files. The next step is to setup your account on TestPyPI so"
+" you can publish your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:198
+msgid "Step 3. Setup your TestPyPI account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:200
+msgid ""
+"Next, you'll setup an account on TestPyPI. Remember that you are using "
+"TestPyPI here instead of the real PyPI as a way to safely learn how to "
+"publish a package without accidentally \"releasing\" your package before "
+"it's ready."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:204
+msgid "TestPyPI vs. PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:205
+msgid ""
+"If you have a package that you are confident belongs on PyPI, all of the "
+"steps below will also work for you. When you publish using Hatch, you "
+"will call `hatch publish` to publish directly to PyPI instead of `hatch "
+"publish -r test` which publishes to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:208
+msgid ""
+"[Open up a web browser and go to the TestPyPI "
+"website](https://test.pypi.org/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:209
+msgid ""
+"[Create an account](https://test.pypi.org/account/register/) if you don't"
+" already have one. Be sure to store your password in a safe place!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:210
+msgid "Once you have an account setup, login to it."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:211
+msgid ""
+"Search on [https://test.pypi.org/](https://test.pypi.org/) (and also on "
+"[https://pypi.org/](https://pypi.org/)) to ensure that the package name "
+"that you have selected doesn't already exist. If you are using our test "
+"pyosPackage, then we suggest that you add your name or GitHub username to"
+" the end of the package name to ensure it's unique."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:213
+msgid "Example: `pyosPackage_yourNameHere`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:215
+msgid ""
+"How to rename your Python package if the name is already taken in (test) "
+"PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:219
+msgid "Required"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:221
+msgid ""
+"Search your publishing location(s) to make sure your new name isn't taken"
+" ([TestPyPI](https://test.pypi.org/), [PyPI](https://pypi.org/), [conda-"
+"forge](https://conda-forge.org/packages/))"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:222
+msgid ""
+"Update the project name in your pyproject.toml file (e.g. `name = "
+"\"pyospackage_yourNameHere\"`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:223
+msgid ""
+"Update the module folder name to be the same (e.g. "
+"`src/pyospackage_yourNameHere`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:224
+msgid "Rebuild your project (`hatch build`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:225
+msgid "Publish your package to capture the name (continue this tutorial!)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:227
+msgid "Recommended"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:229
+msgid "Update the GitHub repository name to align with the new package name"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:230
+msgid ""
+"Update your local project folder to match the new package name (e.g. "
+"`pyospackage_yourNameHere/src`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:231
+msgid "Update mentions of your repository name in other files (e.g. `README.md`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:235
+msgid ""
+"This is a screenshot of the TestPyPI website. At the top in the search "
+"bar, you can see the search for pyosPackage. The search return says there"
+" were no results for pyosPackage Did you mean probpackage"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:237
+msgid ""
+"Before you try to upload to TestPyPI, check to see if the name of your "
+"package is already taken. You can do that using the search box at the top"
+" of the TestPyPI website."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:241
+msgid "Setup 2-factor (2FA) authentication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:243
+msgid ""
+"2-factor authentication is a secure login process that allows you to use "
+"a backup device that only you can access to validate that the person "
+"logging in is really you. It addresses the issue of password phishing "
+"where someone else gains access to a password and can login to your "
+"account."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:246
+msgid ""
+"This matters on PyPI because someone could login to your account and "
+"upload a version of your package that has security issues. These issues "
+"will then impact all of your users when they download and install that "
+"version of the package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:248
+msgid ""
+"2-factor authentication is required for PyPI authentication as of 1 "
+"January 2024."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:252
+msgid "Step 4. Create a package upload token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:254
+msgid ""
+"To upload your package to TestPyPI (or PyPI), you will need to create a "
+"token for your account first, and should then create a package-specific "
+"token. (If you completed this step previously, you can reuse the tokens "
+"when you upload your package again.)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:256
+msgid "Why create package-specific tokens?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:258
+msgid ""
+"It's ideal to create a package-specific token. When you create an "
+"account-wide token this allows anyone with access to the account to then "
+"access all of your TestPyPI (or PyPI) projects. By creating a package-"
+"specific token, you are limiting the scope of the token to only your "
+"specific package. This is just a safe way to set things up for you "
+"particularly if you are collaborating with others on package development."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:261
+msgid "Follow the steps below to create your token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:263
+msgid "Login to TestPyPI and go to your account settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:264
+msgid "Scroll down to the **API tokens** section"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:265
+msgid "Click on the **Add API Token** button"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:266
+msgid ""
+"If you are new to using TestPyPI and don't have any packages there yet, "
+"OR if you have other packages on TestPyPI but are uploading a new "
+"package, you will need to create an account-wide token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:267
+msgid ""
+"When you create your token, be sure to copy the token value and store it "
+"in a secure place before closing that browser."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:269
+msgid "Your token should look something like this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:271
+msgid "`pypi-abunchofrandomcharactershere...`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:273
+msgid "It should start with `pypi` followed by a dash and a bunch of characters."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:275
+msgid "Upload to TestPyPI using Hatch"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:277
+msgid "Once you have your token, you are ready to publish to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:280
+msgid "Run `hatch publish -r test`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:282
+msgid ""
+"`-r` stands for repository. In this case because you are publishing to "
+"TestPyPI you will use `-r test`. Hatch will then ask for a username and "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:284
+msgid ""
+"Add the word `__token__` for your username. This tells TestPyPI that you "
+"are using a token value rather than a username."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:285
+msgid "Paste your TestPyPI token value in at the `Enter your credentials` prompt:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:296
+msgid ""
+"If your credentials are valid, and you have already run `hatch build` and"
+" thus have your 2 distribution files in a `dist/` directory then Hatch "
+"will publish your package to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:300
+msgid ""
+"Hatch also has a caching system so once you enter your credentials it "
+"will remember them."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:303
+msgid "Install your package from TestPyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:305
+msgid ""
+"Once your package upload is complete, you can install it from TestPyPI. "
+"You can find the installation instructions on the TestPyPI landing page "
+"for your newly uploaded package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:310
+msgid ""
+"A screenshot of the TestPyPI page for pyosPackage. It says pyosPackage "
+"0.1.0 at the top with the pip install instructions below. The landing "
+"page of the package has information from the package's README file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:312
+msgid ""
+"This is an example landing page for the pyosPackage that was just "
+"uploaded. Notice at the top of the page there are instructions for how to"
+" install the package from TestPyPI. You can simply copy that code and use"
+" it to install your package from TestPyPI locally."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:315
+msgid ""
+"As an example, [check out our pyOpenSci pyosPackage landing page on "
+"TestPyPI](https://test.pypi.org/project/pyosPackage/). Notice that the "
+"page has information about the current package version and also "
+"installation instructions as follows:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:319
+msgid "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:322
+msgid ""
+"Publishing to TestPyPI vs PyPI While you can install from TestPyPI it's "
+"not recommended that you publish to TestPyPI as a permanent way to "
+"install your package. In fact, you cannot, because TestPyPI may delete "
+"accounts after a time. TestPyPI is a perfect place to learn how to "
+"publish your package and test the installation process. But your end goal"
+" should be to publish to PyPI once you have figured out your workflow and"
+" your package is ready to deploy."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:326
+msgid "Time to install your package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:328
+msgid ""
+"On your computer, activate the development environment that you wish to "
+"install your newly published package in."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:330
+msgid "Run the installation instructions for your package from TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "Conda"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "venv Mac / Linux"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:354
+msgid "The value of end-to-end tools like hatch, flit and poetry"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:355
+msgid ""
+"In this lesson you are using Hatch and hatchling to create, build and "
+"publish your Python package. [Click here to learn about other packaging "
+"tools in the ecosystem.](../package-structure-code/python-package-build-"
+"tools.md)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:359
+msgid ""
+"teach them to setup trusted publisher for actions... in the actions "
+"lesson https://pypi.org/help/#twofa"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:362
+msgid ""
+"from PyPI: https://pypi.org/help/#apitoken - You can create a token for "
+"an entire PyPI account, in which case, the token will work for all "
+"projects associated with that account. Alternatively, you can limit a "
+"token's scope to a specific project."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:365
+msgid "Package-specific token vs trusted publisher"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:367
+msgid ""
+"For long run maintenance of your package, you have two options related to"
+" PyPI publication."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:370
+msgid ""
+"You can create a package-specific token which you will use to publish "
+"your package (manually) to PyPI. This is a great option if you don't wish"
+" to automate your PyPI publication workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:371
+msgid ""
+"You can also create an automated publication workflow on GitHub using "
+"GitHub Actions. This is a great way to make the publication process "
+"easier and it also supports a growing maintainer team. In this case we "
+"suggest you don't worry about the token and instead setup a specific "
+"GitHub Actions that publishes your package when you make a release. You "
+"can then create a \"trusted publisher\" workflow on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:373
+msgid "Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:376
+msgid ""
+"While publishing from GitHub Action is possible using tokens, we "
+"recommend the _Trusted Publishing_ approach as it also confers "
+"significant security and usability benefits."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:378
+msgid ""
+"On the usability front, when Trusted Publishing is enabled, users no "
+"longer need to manually create API tokens on PyPI and store them in the "
+"GitHub release workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:380
+msgid ""
+"On the security front, Trusted Publishing reduces a risk related to the "
+"API token being long lived: with API tokens, as soon as an attacker gets "
+"access to it, they can publish many packages and versions in your name "
+"(depending on the scope of the token), until you discover the token "
+"compromise and rotate the credential. Trusted Publishing avoids this "
+"problem by minting very short lived tokens which expire automatically."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:382
+msgid ""
+"For these benefits, it is recommended that users use _only_ the GitHub "
+"Actions release workflow to publish packages."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:385
+msgid ""
+"You will learn how to create the automated trusted publisher workflow in "
+"a followup lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:387
+msgid "OPTIONAL: If you want to use a manual token-based publication workflow"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:389
+msgid ""
+"If you plan to use your token regularly to publish to PyPI, we strongly "
+"recommend going through the above steps again to create a token specific "
+"to your new package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:392
+msgid "To do this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:393
+msgid "Go to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:394
+msgid "Navigate to the \"Your Projects\" section of your account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:395
+msgid ""
+"Click on the manage button for the project that you wish to add a token "
+"for"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:396
+msgid "Go to settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:397
+msgid "Click on \"Create a token for your-package-name-here\""
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:398
+msgid ""
+"Create the token and follow the steps above publish your package using "
+"the repository specific token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:400
+msgid "And you're all done!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:402
+msgid "Trusted Publishing instead of token-based publication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:405
+msgid ""
+"Trusted Publishing will generate short lived tokens, scoped to the "
+"project, on demand, only when a specific release workflows gets "
+"triggered. This solves all the security and usability issues associated "
+"with storing credentials in files/GitHub secrets."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:411
+msgid "You have published your package to TestPyPI!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:413
+msgid ""
+"Congratulations. You have now successfully published your package to "
+"TestPyPI. If you have a package that is ready for real-world use on the "
+"real PyPI, then you can follow the same steps (with the differences noted"
+" above) to publish it on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:415
+msgid ""
+"Once you publish on PyPI, you can then easily add your package to the "
+"conda-forge ecosystem using the [grayskull](https://conda-"
+"forge.org/blog/posts/2020-03-05-grayskull/) tool."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:417
+msgid "You will learn how to do that in the next lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:421
+msgid "https://docs.python.org/3/library/venv.html"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:6
+msgid "Make your Python package PyPI ready - pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:8
+msgid ""
+"In [the installable code lesson](create-python-package), you learned how "
+"to add the bare minimum information to a `pyproject.toml` file to make it"
+" installable. You then learned how to publish a bare minimum version of "
+"your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:13
+msgid "Following that you learned how to add a:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:14
+msgid "[README.md](add-readme)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:15
+msgid "[LICENSE](add-license-coc) and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:16
+msgid "[CODE_OF_CONDUCT](add-coc)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:18
+msgid "to the root of your project directory."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:20
+msgid ""
+"To enhance the visibility of your package on PyPI and provide more "
+"information about its compatibility with Python versions, project "
+"development status, and project maintainers, you should add additional "
+"metadata to your `pyproject.toml` file. This lesson will guide you "
+"through the process."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:32
+msgid ""
+"More about the `pyproject.toml` file and how it's used to store different"
+" types of metadata about your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:33
+msgid ""
+"How to declare information (metadata) about your project to help users "
+"find and understand it on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:35
+msgid ""
+"If you wish to learn more about the `pyproject.toml` format, [check out "
+"this page. ](../package-structure-code/pyproject-toml-python-package-"
+"metadata.md)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Click for lesson takeaways"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:42
+msgid "When creating your pyproject.toml file, consider the following:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:44
+msgid ""
+"There are only two required metadata tables that you need to install and "
+"publish your Python package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:45
+msgid "**[build-system]**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:46
+msgid "**[project]**."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:47
+msgid ""
+"The **[project]** table stores your package's metadata. Within the "
+"**[project]** table, There are only two _required_ fields:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:48
+msgid "**name=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:49
+msgid "**version=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:50
+msgid ""
+"You should add more metadata to the `[project]` table as it will make it "
+"easier for users to find your project on PyPI. And it will also make it "
+"easier for installers to understand how to install your package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:51
+msgid ""
+"When you are adding classifiers to the **[project]** table, only use "
+"valid values from [PyPI's classifier "
+"page](https://PyPI.org/classifiers/). An invalid value here will raise an"
+" error when you build and publish your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:52
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However, fields need to be placed within the correct tables. For example "
+"`requires =` always need to be in the **[build-system]** table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:53
+msgid ""
+"We suggest that you include your **[build-system]** table at the top of "
+"your `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:58
+msgid ""
+"The `pyproject.toml` file is a human and machine-readable file that "
+"serves as the primary configuration file for your Python package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:63
+msgid ""
+"[Building your package](build-package) is the step that created the "
+"distribution files that are required for you to publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:67
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:69
+#, python-brace-format
+msgid ""
+"The **pyproject.toml** file is written in {term}`TOML` format. TOML is an"
+" easy-to-read structure that is based on key/value pairs. Each section in"
+" the **pyproject.toml** file contains a `[table identifier]`. The TOML "
+"format can be compared to other structured formats such as `.json`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:74
+msgid ""
+"Below you can see the `[build-system]` table. Within that table there are"
+" two required key/value pairs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:77
+msgid ""
+"`requires =` is the key and the value is `[\"hatchling\"]` within the "
+"`[build-system]` array specified by square brackets `[]`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:87
+msgid "What is the pyproject.toml used for?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:89
+msgid "The pyproject.toml file tells your build tool:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:91
+#, python-brace-format
+msgid ""
+"What {term}`Build backend` to use to build your package (we are using "
+"{term}`Hatchling` in this tutorial but there are [many others to choose "
+"from](/package-structure-code/python-package-build-tools))."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:94
+msgid "How and where to retrieve your package's version:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:95
+msgid "**statically** where you declare the version `version = \"0.1.0\"` or"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:96
+msgid ""
+"**dynamically** where the tool looks to the most recent tag in your "
+"history to determine the current version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:97
+#, python-brace-format
+msgid "What {term}`Dependencies` your package needs"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:98
+msgid "What versions of Python your package supports (important for your users)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:100
+msgid ""
+"The `pyproject.toml` file also makes it easy for anyone browsing your "
+"GitHub repository to quickly understand your package's structure such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:103
+msgid "How your package is built,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:104
+msgid "What Python versions and operating systems it supports"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:105
+msgid "What it does,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:106
+msgid "Who maintains it"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:108
+msgid ""
+"Finally, the pyproject.toml file is also often used to configure tools "
+"such as static type checkers (e.g. mypy) and code formatters/linters "
+"(e.g. black, ruff)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:111
+msgid ""
+"Check out the [PyPA "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend) if you are interested in "
+"setting build configurations for other tools."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:113
+msgid ""
+"Note that some build tools may deviate in how they store project "
+"metadata. As such you may want to refer to their documentation if you "
+"decide to use a tool other than Hatch and hatchling. We have selected "
+"hatchling and hatch as our tool of choice for this tutorial as it adheres"
+" to PyPA rules and guidelines."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:117
+msgid "How is pyproject.toml metadata used?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:119
+msgid ""
+"The pyproject.toml file is the file that your build tool uses to populate"
+" a `METADATA` that is included in your Python distribution files that get"
+" published to PyPI. This `METADATA` file is then used by PyPI to populate"
+" your package's PyPI landing page and help users filter through the tens "
+"of thousands of packages published there."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:122
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:127
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:133
+msgid "A more in-depth overview of pyproject.toml files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:135
+msgid ""
+"[Our guidebook page has a more in depth overview of this file"
+"](../package-structure-code/pyproject-toml-python-package-metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:138
+msgid "How to update your pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:140
+msgid ""
+"In the last lesson, you created a bare-bones pyproject.toml file that "
+"contained the core elements needed to build your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:144
+msgid ""
+"A `[build-system]` table where you defined your project's backend build "
+"tool (`hatchling`)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:145
+msgid "A `[project]` table where you defined your project's version and name."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:147
+msgid "The `pyproject.toml` file that you created, looked like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:159
+msgid ""
+"Your next step is to add additional recommended metadata fields that will"
+" both help users find your package on PyPI and also better describe the "
+"scope of your package. Once you add this metadata, you don't have to do "
+"it again. These metadata fields will only be updated periodically when "
+"you do something such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:162
+msgid "drop a package dependency"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:163
+msgid "modify what Python versions your package supports."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:165
+msgid "More on hatchling"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:168
+msgid ""
+"The documentation for the hatchling back-end is "
+"[here](https://hatch.pypa.io/latest/config/metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:171
+msgid "Step 1: Add Author, maintainer and project description"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:173
+msgid ""
+"After completing the [installable code tutorial](create-python-package), "
+"you should have a pyproject.toml file with a project name and a version "
+"in the `[project]` table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:181
+msgid "Add the following to your table:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:183
+msgid ""
+"A **description** of your package. This should be a single line and "
+"should briefly describe the goal of your package using non technical "
+"terms if as all possible!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:184
+msgid "package **authors**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:185
+msgid "package **maintainers**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:187
+msgid "The `description` is just a string like the other values you've set:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:198
+msgid ""
+"When you add authors and maintainers you need to use a format that will "
+"look like a Python list with a dictionary within it:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:212
+msgid "Author names & emails"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:216
+msgid ""
+"There is a quirk with PyPI for authors that have names but not emails in "
+"the pyproject.toml. If you are missing the email for one or more authors "
+"or maintainers, like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:225
+msgid ""
+"Then we suggest that you only provide names in your list of names to "
+"ensure that everything renders properly on your PyPI page - like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:234
+msgid "don't have emails for everyone, we suggest that you only add names."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:237
+msgid ""
+"Your `pyproject.toml` file now should look like the example below. It is "
+"OK if you only have 1 author and the same author is also maintainer of "
+"your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid ""
+"Learn More: What's the difference between author and maintainer in open "
+"source?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:265
+msgid ""
+"When adding maintainers and authors, you may want to think about the "
+"difference between the two."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:267
+msgid "Authors generally include people who:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:268
+msgid "originally created / designed developed the package and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:269
+msgid "people who add new functionality to the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:271
+msgid ""
+"Whereas maintainers are the people that are currently, actively working "
+"on the project. It is often the case that there is overlap in authors and"
+" maintainers. As such these lists may be similar or the same."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:273
+msgid ""
+"A good example of when the lists might diverge is sometimes you have a "
+"package where an initial author developed it and then stepped down as a "
+"maintainer to move on to other things. This person may continue to be "
+"considered an author but no longer actively maintains the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:275
+msgid ""
+"It is important to note that there are many ways to define author vs "
+"maintainer and we don't prescribe a single approach in this tutorial."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:277
+msgid ""
+"However, we encourage you to consider carefully, for PyPI publication, "
+"who you want to have listed as authors and maintainers on your PyPI "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:281
+msgid "Step 2: Add README and license"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:283
+msgid ""
+"In the previous lessons, you added both a [README.md](add-readme) file "
+"and a [LICENSE](add-license-coc) to your package repository. Once you "
+"have those files, you can refer to the README from your pyproject.toml "
+"file, and add a short code indicating your choice of LICENSE following "
+"the example below."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:312
+msgid ""
+"The license entry in your pyproject.toml file must use the [license "
+"expression syntax](https://packaging.python.org/en/latest/specifications"
+"/license-expression/). Often this is a short name (with no spaces) for "
+"the license, such as \"MIT\", \"BSD-3-Clause\" or \"Apache-2.0\". More "
+"precisely, it must be a valid SPDX license expression, as documented in "
+"the [SPDX specification](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-"
+"license-expressions/), either version 2.2 or a later compatible version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:314
+msgid ""
+"If you have multiple licenses, or a custom license, you can also express "
+"these using a license expression."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:316
+msgid ""
+"If you want to distribute license files, or other files containing legal "
+"information, with your package, you can include these using the "
+"[`license-files`](https://packaging.python.org/en/latest/guides/writing-"
+"pyproject-toml/#license-files) entry, but this is not required."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:318
+msgid "Step 3: Specify Python version with `requires-python`"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:320
+msgid ""
+"Add the `requires-python` field to your `pyproject.toml` `[project]` "
+"table. The `requires-python` field helps pip identify which Python "
+"versions that your package supports. It is set to a single value. The "
+"[packaging "
+"specification](https://packaging.python.org/en/latest/specifications"
+"/core-metadata/#core-metadata-requires-python) defines`requires-python` "
+"as a string that uses version specifiers. Most projects will specify the "
+"oldest Python version supported by the package. In some advanced cases, "
+"an upper bound is set to indicate which future Python versions, if any, "
+"will be supported."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:325
+msgid "But how do I figure out which Python versions I should support?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:327
+msgid ""
+"Good question. The Python developer guide provides a [status "
+"page](https://devguide.python.org/versions/) (and a handy visualization) "
+"that explains the status of each Python release. Python releases go "
+"through several different phases that are explained in [PEP "
+"602](https://peps.python.org/pep-0602/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:329
+msgid ""
+"We recommend that you use the latest Python release in the **bugfix** "
+"phase. If your Python release is in the **security** phase, we recommend "
+"migrating to a newer version of Python."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:331
+msgid ""
+"[SPEC 0](https://scientific-python.org/specs/spec-0000/) of the "
+"Scientific Python project suggests a common schedule for dependencies, "
+"including Python release versions, and is also worth considering for your"
+" project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:360
+msgid "Step 4: Specify Dependencies"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:362
+msgid ""
+"Next add your dependencies table to the project table. The `dependencies "
+"=` section contains a list (or array in the toml language) of the Python "
+"packages that your package requires to run properly in a Python "
+"environment. Similar to the requirements listed in the `[build-system]` "
+"table above:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:370
+msgid "dependencies are added in an array (similar to a Python list) structure."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:376
+msgid ""
+"A dependency can be limited to specific versions using a **version "
+"specifier.** If the dependency has no version specifier after the "
+"dependency name, your package can use any version of the dependent "
+"package. Code changes over time, bugs are fixed, APIs change, and so it's"
+" good to be clear about which version of the dependency you wrote your "
+"code to be compatible with - a package you wrote this year probably isn't"
+" compatible with numpy v0.0.1!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:380
+msgid ""
+"[Learn more about various ways to specify ranges of package versions "
+"here.](https://packaging.python.org/en/latest/specifications/version-"
+"specifiers/#id5)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:382
+msgid ""
+"The most common version specifier is a **lower bound,** allowing any "
+"version higher than the specified version. Ideally you should set this to"
+" the lowest version that is still compatible with your package, but in "
+"practice for new packages this is often set at the version that was "
+"current at the time the package was written[^lowerbound]."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:387
+msgid "Lower bounds look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:393
+msgid ""
+"Commas are used to separate individual dependencies, and each package in "
+"your `dependencies` section can use different types of version "
+"specifiers:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:404
+msgid "Your `pyproject.toml` file will now look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:434
+msgid "Pin dependencies with caution"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:435
+msgid ""
+"\"Pinning\" a dependency means setting it to a specific version, like "
+"this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:437
+msgid "`numpy == 1.0`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:439
+msgid ""
+"If you are building a library package that other developers will depend "
+"upon, you must be cautious before pinning to a precise dependency "
+"version. Applications, such as production websites, will often pin their "
+"dependencies since other packages will not depend on their project. This "
+"is because users will be installing your package into various "
+"environments. A dependency pinned to a single specific version can make "
+"resolving a Python environment more challenging. As such only pin "
+"dependencies to a specific version if you absolutely need to do so."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:447
+msgid ""
+"Similarly, you should be cautious when specifying an upper bound on a "
+"package. These two specifications are equivalent:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:455
+msgid ""
+"One build tool that you should be aware of that pins dependencies to an "
+"upper bound by default is Poetry. [Read more about how to safely add "
+"dependencies with Poetry, here.](challenges-with-poetry)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:458
+msgid "Step 5: Add PyPI classifiers"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:460
+msgid ""
+"Next you will add classifiers to your `pyproject.toml` file. The value "
+"for each classifier that you add to your `pyproject.toml` file must come "
+"from the list of [PyPI accepted classifier values found "
+"here](https://PyPI.org/classifiers/). Any deviations in spelling and "
+"format will cause issues when you publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:462
+msgid "What happens when you use incorrect classifiers?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:465
+msgid ""
+"If you do not [use standard classifier "
+"values](https://PyPI.org/classifiers/), when you try to publish your "
+"package on PyPI it will be rejected. 😔 Don't worry if PyPI rejects you on"
+" your first try! It has happened to all of us."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:468
+msgid "Review that list and add items below to your `pyproject.toml` file:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:470
+msgid "development status"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:471
+msgid "intended audiences"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:472
+msgid "topic"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:473
+msgid "programming language support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:475
+msgid ""
+"The classifier key should look something like the example below. A few "
+"notes:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:477
+msgid ""
+"Your classifier values might be different depending upon your intended "
+"audience, development status of your package and the Python versions that"
+" you support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:478
+msgid ""
+"You can add as many classifiers as you wish as long as you use the "
+"[designated PyPI classifier values](https://PyPI.org/classifiers/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:517
+msgid ""
+"Note that while classifiers are not required in your `pyproject.toml` "
+"file, they will help users find your package. As such we strongly "
+"recommend that you add them."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:519
+msgid "Step 6: Add the `[project.urls]` table"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:521
+msgid "Finally, add the project.urls table to your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:523
+msgid ""
+"`project.urls` contains links that are relevant for your project. You "
+"might want to include:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:525
+msgid ""
+"**Homepage:** A link to your published documentation for your project. If"
+" you are working through this tutorial, then you may not have this link "
+"yet. That's ok, you can skip it for the time being."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:526
+msgid ""
+"**Bug reports:** a link to your issues/discussions or wherever you want "
+"users to report bugs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:527
+msgid "**Source:** the GitHub / GitLab link for your project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:572
+msgid ""
+"There are many other urls that you can add here. Check out the [README "
+"file here for an overview](https://github.com/patrick91/links-demo)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:575
+msgid "Putting it all together - your completed pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:577
+msgid ""
+"Below is an example of a complete `pyproject.toml` file that is commented"
+" with all of the sections we discussed above."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Appendix - Click for a fully commented pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:626
+msgid ""
+"Below is a fully commented pyproject.toml file if you want to use it for "
+"reference."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:692
+msgid "Example `pyproject.toml` files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:694
+msgid ""
+"Below are some examples of `pyproject.toml` files from various packages "
+"in the scientific and pyOpenSci ecosystem."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:695
+msgid ""
+"[PyPA's fully documented example pyproject.toml "
+"file](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:696
+msgid ""
+"[taxpasta has a nicely organized pyproject.toml file and is a pyOpenSci "
+"approved "
+"package](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a53dd49ad77e4cf143573/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:702
+msgid "At this point you've created:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:704
+msgid "A [README.md](add-readme) file for your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:705
+msgid "A [CODE_OF_CONDUCT.md](add-coc) file to support your user community"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:706
+msgid ""
+"And a [LICENSE](add-license-coc) file which provides legal boundaries "
+"around how people can and can't use your software"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:708
+msgid ""
+"You also learned [how to publish your package to (test)PyPI](publish-"
+"pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:710
+msgid "Publish a new version of your package to PyPI"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:712
+msgid ""
+"You are now ready to publish a new version of your Python package to "
+"(test) PyPI. When you do this you will see that the landing page for your"
+" package now contains a lot more information."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:714
+msgid "Try to republish now."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:716
+msgid ""
+"First, update the version of your package in your pyproject toml file. "
+"Below version is updated from `0.1` to `0.1.1`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:729
+msgid "Now use hatch to publish the new version of your package to test.PyPI.org."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:736
+msgid "Next (optional) step - publishing to conda-forge"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:738
+msgid ""
+"You now have all of the skills that you need to publish your package to "
+"PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:741
+msgid ""
+"If you also want to publish your package on conda-forge (which is a "
+"channel within the conda ecosystem), you will learn how to do that in the"
+" next lesson."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:745
+msgid ""
+"Really good resources from jeremiah "
+"https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet "
+"useful (and the linked links-demo even more so)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:385
+msgid ""
+"Some packaging tools will do this for you when you add a dependency using"
+" their cli interface. For example [`poetry add`](https://python-"
+"poetry.org/docs/cli/#add) will add the most recent version with a `^` "
+"specifier, and [`pdm add`](https://pdm-"
+"project.org/latest/reference/cli/#add) will add the most recent version "
+"with `>=`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:10
+msgid ""
+"Python supports inline metadata for scripts (a feature added in 2024). "
+"This makes it possible to run standalone scripts with dependencies and "
+"Python versions managed automatically."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:14
+#, python-brace-format
+msgid ""
+"Many tools support this workflow, including PDM, [Hatch](get-to-know-"
+"hatch), and {term}`uv`. In this tutorial, we focus on Hatch and UV. The "
+"same metadata format can also be used with other tools."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:22
+msgid ""
+"[Hatch: How to run Python scripts](https://hatch.pypa.io/latest/how-"
+"to/run/python-scripts/)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:23
+msgid ""
+"[uv: Running "
+"scripts](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-"
+"script)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:26
+msgid "How to create a reproducible script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:28
+#, python-brace-format
+msgid ""
+"Sometimes you want to share or run a single script without creating a "
+"full {term}`Python package`. To do this, you can use inline script "
+"metadata. This format lets you specify dependencies and Python versions "
+"at the top of your script in a comment block."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:34
+msgid ""
+"When you add metadata at the top of a script, Hatch (or PDM or uv) will "
+"use that metadata to:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:37
+msgid "Create an isolated virtual Python environment for that script."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:38
+#, python-brace-format
+msgid ""
+"Install the {term}`Dependencies` listed in the script into that "
+"environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:39
+msgid "Use the required Python version that you specify in the metadata."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:41
+msgid ""
+"This approach is useful for workflows that you want to make reproducible,"
+" but that do not need to become full Python packages."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:44
+msgid "Why use Hatch for scripts?"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:46
+msgid ""
+"Inline metadata helps you make scripts reproducible. Anyone can run your "
+"script without manually creating a new environment or guessing which "
+"dependencies it needs. Hatch takes care of installing dependencies and "
+"using the correct Python version."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:51
+msgid "How to add inline metadata to your script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:53
+msgid ""
+"You will use Hatch in this example, but you can also use uv if that is "
+"your preferred tool."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:56
+#, python-brace-format
+msgid ""
+"First, create a new file named `script.py` with the block below at the "
+"top. The metadata block starts with `# /// script` and ends with `# ///`."
+" Everything in between must be {term}`TOML` metadata written as comments."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:60
+msgid ""
+"In the example below, the script requires Python 3.11 or newer, and NumPy"
+" is declared as a dependency."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:81
+msgid "Run the script with Hatch"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:83
+msgid ""
+"Open your terminal and change to the directory where `script.py` lives. "
+"Then run:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:90
+msgid ""
+"On first run, Hatch will create an environment and install dependencies. "
+"On later runs, Hatch will reuse that environment so startup is faster."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:94
+msgid ""
+"The environment name is based on the script path. If you move the script "
+"to a new location, Hatch will treat it as a new script environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:98
+msgid "Optional: configure script environment behavior"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:100
+msgid ""
+"You can control script-specific Hatch behavior in the same metadata "
+"block. For example, to use `pip` instead of `uv` as the installer:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:113
+msgid "Run the same script with uv"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:115
+msgid "If you prefer uv, you can run the same inline-metadata script with:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:121
+msgid ""
+"The same `# /// script` metadata block works with uv, including "
+"`requires-python` and `dependencies`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:124
+msgid ""
+"For more on using uv to run scripts, see the guide: [Running scripts with"
+" uv](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:128
+msgid "When to use scripts vs. packages"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:130
+msgid "You may be wondering when to use scripts versus creating a package."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:132
+msgid "This depends on your use case. Scripts are often useful when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:134
+msgid "You have one small task, or a specific workflow that is not generalizable."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:135
+msgid ""
+"Your workflow is still evolving, but you want to run it in a reproducible"
+" environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:137
+msgid "You want reproducible dependencies quickly."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:138
+msgid "You are sharing a single file with collaborators."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:140
+msgid "Create a full package when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:142
+msgid "You are building reusable modules for multiple projects."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:143
+msgid "You need tests, documentation, releases, and long-term maintenance."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:144
+msgid "Your codebase is growing beyond one or two scripts."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:148
+msgid "[Get to know Hatch](get-to-know-hatch.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:149
+msgid "[Create a Python package](create-python-package.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:150
+msgid "[Command line reference guide](command-line-reference.md)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:7
+msgid "Using Hatch to Migrate setup.py to a pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:9
+msgid ""
+"[Hatch](get-to-know-hatch) can be useful for generating your project's "
+"[pyproject.toml](pyproject-toml) file if your project already has a "
+"`setup.py` file."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:13
+msgid "Note"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:16
+msgid ""
+"This step is not necessary and is only helpful if your project already "
+"has a `setup.py` file defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:17
+msgid ""
+"If your project does not already define a `setup.py` see [Make your "
+"Python code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:25
+msgid ""
+"The process of using Hatch to transition to using `pyproject.toml` for "
+"projects that already have a `setup.py` defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:28
+msgid "What is Hatch?"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:30
+#, python-brace-format
+msgid ""
+"Hatch is a Python package manager designed to streamline the process of "
+"creating, managing, and distributing Python packages. It provides a "
+"convenient CLI (Command-Line Interface) for tasks such as creating new "
+"projects, managing {term}`Dependencies`, building distributions, and "
+"publishing packages to repositories like [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:40
+msgid "See [Get to know Hatch](get-to-know-hatch) for more information."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:43
+msgid "Prerequisites"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:45
+msgid ""
+"Before we begin, ensure that you have Hatch installed on your system. You"
+" can install it via pip:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:51
+msgid "Sample Directory Tree"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:53
+msgid ""
+"Let's take a look at a sample directory tree structure before and after "
+"using `hatch init`:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:55
+msgid "Before `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:71
+msgid "After `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:89
+msgid ""
+"As you can see, the main change after running `hatch init` is the "
+"addition of the `pyproject.toml` file in the project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:91
+msgid "Step-by-Step Guide"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:93
+msgid ""
+"Now, let's walk through the steps to use Hatch to create a "
+"`pyproject.toml` file for your project."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:95
+msgid ""
+"**Navigate to Your Project Directory**: Open your terminal or command "
+"prompt and navigate to the directory where your Python project is "
+"located."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:97
+msgid ""
+"**Initialize Hatch**: Run the following command to initialize Hatch in "
+"your project directory:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:103
+msgid ""
+"**Review and Customize**: After running the previous command, Hatch will "
+"automatically generate a `pyproject.toml` file based on your existing "
+"project configuration. Take some time to review the contents of the "
+"generated `pyproject.toml` file. You may want to customize certain "
+"settings or dependencies based on your project's requirements (see "
+"[pyproject.toml tutorial](pyproject-toml) for more information about the "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:105
+msgid ""
+"**Verify**: Verify that the `pyproject.toml` file accurately reflects "
+"your project configuration and dependencies. You can manually edit the "
+"file, but be cautious and ensure that the syntax is correct."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:107
+msgid ""
+"**Delete setup.py**: Since we're migrating to using `pyproject.toml` "
+"exclusively, the `setup.py` file becomes unnecessary. You can safely "
+"delete it from your project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:109
+msgid ""
+"**Test Build**: Before proceeding further, it's essential to ensure that "
+"your project builds successfully using only the `pyproject.toml` file. "
+"Run the following command to build your project:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:115
+msgid ""
+"This command will build your project based on the specifications in the "
+"`pyproject.toml` file. Make sure to check for any errors or warnings "
+"during the build process."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:117
+msgid ""
+"**Test Existing Functionality**: After successfully building your project"
+" with `pyproject.toml`, it's crucial to ensure that your project's "
+"existing functionality remains intact. Run any pre-existing tests to "
+"verify that everything still works as expected."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:6
+msgid ""
+"Setup Trusted Publishing for secure and automated publishing via GitHub "
+"Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:8
+msgid "In the previous Python packaging lessons, you learned:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:10
+msgid "[How to create a Python package](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:11
+msgid ""
+"How to publish the code to [PyPI](publish-pypi) and [Conda](publish-"
+"conda-forge)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:16
+msgid "In this lesson, you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:18
+msgid "Automate building and publishing the package on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:19
+#, python-brace-format
+msgid "Configure {term}`Trusted publishing` for the project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:20
+msgid ""
+"Secure your workflow using GitHub action hashes and versions in your "
+"workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:22
+msgid ""
+"This tutorial assumes that your project is hosted on GitHub and that you "
+"want to publish a package from your project to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:26
+msgid "Configure a release job on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:28
+msgid ""
+"GitHub Actions[^gha] is an infrastructure provided by GitHub to automate "
+"software workflows, straight from the GitHub repository of the project. "
+"You can configure automated testing for every pull request, automate "
+"publishing of documentation, automate creation of web pages for the "
+"project, and even automate the release process. For this lesson, we will "
+"focus on using actions to release and publish your Python package "
+"securely to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:36
+msgid "Why Trusted Publishing Matters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:38
+msgid ""
+"If you are wondering why trusted publishing is so important, [check out "
+"this blog post:](https://www.pyopensci.org/blog/python-packaging-"
+"security-publish-pypi.html) that dives deeper into what can happen when "
+"you don't lock down your publishing workflows."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:41
+msgid "Step 0: Create a release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:43
+msgid ""
+"To get started, create a file named `release.yaml` under the "
+"`.github/workflows` directory of your project. If the `.github/workflows`"
+" directory does not exist, you can create it. It is GitHub's convention "
+"that all GitHub Actions are configured via YAML files in the "
+"`.github/workflows` directory."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:48
+msgid "Naming your workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:51
+msgid ""
+"You can name the workflow file whatever you wish. We suggest using "
+"something simple and expressive like `release.yaml` so you, your future "
+"self, and contributors who work on your project know exactly what the "
+"workflow does."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:56
+msgid "Step 1: Name the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:58
+msgid "At the top of the `release.yaml` file, type the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:64
+msgid ""
+"This provides a name to the workflow that you can use to quickly find all"
+" runs of this GitHub Action on the \"Actions\" tab in the GitHub "
+"repository."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:68
+msgid ""
+"Graphic showing an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, \"Release,\" as configured in this step. "
+"Finally, in the center, in the red box labeled \"3\" you can see several "
+"runs of the workflow, for the \"1.0\" and \"1.0.1\" releases of the "
+"package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:70
+msgid ""
+"This image shows an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, as configured in this step. Finally, in the "
+"center, in the red box labeled \"3\" you can see several runs of the "
+"workflow, for the \"1.0\" and \"1.0.1\" releases of the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:73
+msgid "Step 2: Add triggers to the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:75
+msgid ""
+"Every GitHub Actions workflow runs when [certain "
+"conditions](https://docs.github.com/en/actions/reference/events-that-"
+"trigger-workflows) are met. In this case, we assume that a release "
+"workflow should only run when the repository owner creates a new "
+"[release](https://docs.github.com/en/repositories/releasing-projects-on-"
+"github/managing-releases-in-a-repository) for the package. Add the "
+"following to the `release.yaml` file to ensure it runs when you create "
+"and publish a release:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:87
+msgid "Step 3: Configure the jobs in the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:89
+msgid ""
+"A GitHub Actions *workflow* file can contain multiple *jobs* that run "
+"independently; each job can also have multiple *steps.* When triggered, "
+"the GitHub Action runs all the jobs in a workflow (excluding any steps "
+"that have conditional requirements)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:93
+msgid ""
+"Jobs and steps can also have [conditional "
+"logic](https://docs.github.com/en/actions/reference/workflow-syntax-for-"
+"github-actions#jobsjob_idif) that allows them only to run if specific "
+"criteria exist. For instance, you may want only to have a job step to "
+"publish to PyPI if a release was made for the package. But you might want"
+" to test building the package every time you merge a new pull request."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:96
+msgid ""
+"For a release job, you need to clone or check out the repository. You can"
+" use the `actions/checkout` action to check out the code. You then "
+"install and use [Hatch](get-to-know-hatch) to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:101
+msgid ""
+"You also need to make sure to set up Hatch on the machine GitHub is using"
+" to run the workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:104
+msgid "A minimal job definition would look like this:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:124
+msgid ""
+"Notice that above, you provide a version for each action step. "
+"`action/checkout@v5` tells GitHub to use version 5 of the checkout "
+"action. The checkout action checks out the code from your repository. In "
+"this case, the code will be used to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:126
+msgid ""
+"Next, you will learn about a better way to secure (or \"harden\") your "
+"workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:128
+msgid "Step 4: Secure the GitHub Actions workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:130
+msgid ""
+"There are several improvements you can make to the GitHub Actions "
+"workflow you just configured to improve security and readability."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:133
+msgid ""
+"First, we can give names to relevant steps in the process to increase the"
+" readability of the logs generated during the workflow run. This can be "
+"achieved using `name: ` lines."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:137
+msgid ""
+"More importantly, each time you use an existing action (via `uses`) you "
+"should pin that action to a commit hash. Pinning your action ensures that"
+" if a malicious user takes over the action, they won't be able to impact "
+"your repository (an example of a supply chain attack due to GitHub "
+"Actions is the recent `tj-actions/changed-files` attack[^changed-files-"
+"supply-chain-attack])."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:144
+msgid ""
+"Enabling Dependabot[^dependabot] in the repository will ensure that your "
+"actions stay up to date. The dependabot tool will open pull requests that"
+" update your action versions at whatever frequency you want."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:149
+msgid "Thus, the workflow that you should use should be similar to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:157
+msgid ""
+"Now, you can commit the `.github/workflows/release.yaml` file to the "
+"repository and push to GitHub."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:159
+msgid ""
+"At this point, if you create a new release for your project on GitHub, "
+"the configured workflow should run and build a wheel for you. "
+"Unfortunately, the wheel is only available on the runner and will be "
+"deleted at the end of the workflow run."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:163
+msgid "Step 5: Upload the built artifact to GitHub Artifacts"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:165
+msgid ""
+"You need to add one more step to the job definition to be able to access "
+"the wheel. You will upload it to the artifacts temporary area[^github-"
+"artifacts]. Add the following to the `release.yaml` file:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:175
+msgid "Upload artifacts parameters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:178
+msgid ""
+"Above, you have configured the artifact to be deleted after 1 day. The "
+"artifacts storage on GitHub actions is temporary; users should not "
+"download your package from the GitHub artifacts."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:181
+msgid ""
+"You have also configured the release job to error if the `dist/` "
+"directory does not exist. This means that `hatch build` (from the "
+"previous step) failed to build our package, so there is nothing to "
+"release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:186
+msgid ""
+"At this point, if you push the `release.yaml` to GitHub and create a new "
+"release, the GitHub Actions job will:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:189
+msgid "run,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:190
+msgid "clone your repository,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:191
+msgid "install and set up Hatch,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:192
+msgid "build your package and"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:193
+msgid "upload your package as an archive to the artifacts storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:196
+msgid ""
+"Graphic showing an example of a release workflow that has just finished "
+"running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:198
+msgid ""
+"This figure shows an example of a release workflow that has just finished"
+" running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:201
+msgid ""
+"At the bottom of the workflow run page on GitHub, you should see a "
+"section for the artifacts produced during runtime and uploaded to this "
+"storage area:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:205
+msgid ""
+"Graphic showing an example of an artifact produced by the release "
+"workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:207
+msgid ""
+"This figure shows the artifact produced by the above release workflow. It"
+" is now marked as expired since the workflow ran more than a day ago."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:210
+msgid ""
+"You can download the artifact (before it expires), unzip it, and install "
+"the wheel contained within. However, this should only be done if you want"
+" to test the built wheel. Next, you will configure uploading to PyPI "
+"using trusted publishing."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:215
+msgid "Configure automatic publishing to PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:217
+msgid ""
+"The job you configured above using GitHub Actions builds your package "
+"using your code. You still need to upload it to PyPI. You could upload "
+"the package from the same job, but it is better to create a separate one "
+"to maintain a separation of tasks. This is why, in the previous section, "
+"we uploaded the artifact to the temporary storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:223
+msgid ""
+"In the new job, you will download the package from there and upload it to"
+" PyPI. Since the `build` job does nothing else, there is no possibility "
+"that the package could get compromised before the release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:227
+msgid "Step 1: Add the upload job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:229
+msgid ""
+"In the `release.yaml` file, add the following new job, after the job "
+"defined in the previous section:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:238
+msgid "Make sure to change the URL"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:240
+msgid "Remember to change the `url:` value to the URL for your package on PyPI!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:243
+msgid "This job has two steps:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:245
+msgid ""
+"It uses `download-artifact` to download the artifacts built in the "
+"previous job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:247
+msgid "It uses `gh-action-pypi-publish` to publish the package to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:249
+msgid ""
+"You are almost there!! Now, you just need to enable trusted publishing "
+"for your project on PyPI. And then, your work is done!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:252
+msgid "Step 2: Enable trusted publishing on PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:256
+msgid ""
+"Diagram showing PyPI's trusted publisher workflow: Step 1 builds "
+"distribution files via GitHub, Step 2 uses a trusted environment (PyPI), "
+"Step 3 securely uploads to PyPI. Shows chain of trust with lock icon "
+"connecting GitHub Action to Python Package Index."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:261
+msgid ""
+"Before trusted publishing was created, in order to upload to PyPI from "
+"GitHub actions you would have needed to add the username and password as "
+"arguments to the `gh-action-pypi-publish` step. While documentation "
+"recommends using the GitHub's `secrets` environment for the "
+"password/token, in several cases, users were pasting the password "
+"directly into the workflow file. Furthermore, accidental leakage of the "
+"password or token could allow attackers to publish new packages using "
+"your account, until you discover the compromise and revoke the leaked "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:269
+msgid ""
+"To prevent these incidents and improve supply chain security, developers "
+"created [Trusted Publishing](https://docs.pypi.org/trusted-publishers/). "
+"Trusted publishing allows you to register a publishing workflow on PyPI "
+"and then map that workflow to an automation workflow (e.g., GitHub "
+"Actions) that is allowed to publish the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:274
+msgid ""
+"You do not need to enter a token or password value in a trusted publisher"
+" workflow. It's a secure connection between your"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:277
+msgid "Trusted Publishing outside of GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:280
+msgid ""
+"Trusted Publishing supports other automation platforms, beyond GitHub "
+"Actions. It is also possible to configure a trusted publisher for "
+"multiple workflows or multiple publishers for the same package. These are"
+" advanced uses, out of scope for this lesson."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:286
+msgid ""
+"For this lesson, we will focus on configuring a trusted publisher for a "
+"project that already exists on PyPI. If you completed the [lesson about "
+"PyPI publishing](create-python-package), you should have this project "
+"already created."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:288
+msgid ""
+"This setup step needs to be performed only once for the project. Future "
+"releases will only run the GitHub Actions workflow we are configuring in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:291
+msgid ""
+"On the [\"Your projects\" page on "
+"PyPI](https://pypi.org/manage/projects/), click \"Manage\" on any project"
+" you want to configure."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:295
+msgid ""
+"Graphic showing a screenshot of the \"Your projects\" page on PyPI. The "
+"\"Manage\" button for one of the projects is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:297
+msgid ""
+"This image shows several projects. The \"Manage\" button is highlighted "
+"for one of the projects, the one we want to configure trusted publishing "
+"for."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:300
+msgid "Then click \"Publishing\" in the project's sidebar."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:303
+msgid ""
+"Graphic showing the management page for one project. The \"Publishing\" "
+"link in the sidebar is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:305
+msgid ""
+"Once clicking on the \"Manage\" button we got to the project's page. In "
+"the sidebar, we have the \"publishing\" option, as highlighted here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:309
+msgid ""
+"This will take you to the publisher configuration page for the project. "
+"Trusted publishers can be configured via the forms here. Fill in the "
+"GitHub form with the following information:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:313
+msgid ""
+"Owner: the GitHub organization name for the organization that owns the "
+"project. If this is your personal project, then use your GitHub username "
+"here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:315
+msgid "Repository name: the name of the repository that contains the project."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:316
+msgid ""
+"Workflow name: Should be `release.yaml` if you followed this guide, it is"
+" the workflow we just configured."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:318
+msgid ""
+"Environment name: Should be `pypi`, as that is what we configured in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:321
+msgid ""
+"Once you fill in this form and click \"Add\" the publisher is configured "
+"and can be used to publish new releases of your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:324
+msgid "Fully hardened GitHub Actions release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:326
+msgid ""
+"For better security, it is also recommended to control the permissions of"
+" the GitHub token used within each job of the workflow. The permissions "
+"should be scoped at job level and be as minimal as possible. A workflow "
+"that configures trusted publishing and also does this is the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:336
+msgid ""
+"You can copy the above into your `release.yaml` file. You only need to "
+"update the `url:` field and configure trusted publishing on PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:340
+msgid ""
+"The workflow above should be up to date with the current versions of "
+"GitHub actions. However, it's good to turn on Dependabot to update the "
+"action versions in the future."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:343
+msgid "You have enabled trusted publishing for your project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:345
+msgid ""
+"Congratulations!! You have now configured your project to do secure "
+"releases when a new version is being tagged on GitHub. The workflow we "
+"have configured builds the package from the exact version of code that we"
+" are tagging. This provides a guarantee for your users that the package "
+"that you have released does precisely what the code states it does. There"
+" is little to no potential for supply chain related vulnerabilities "
+"arising from your package! If you have a package that is ready for real-"
+"world use on the real PyPI, then you can follow the same steps to publish"
+" it securely."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:349
+msgid ""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:350
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:351
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:352
+msgid ""
+msgstr ""
diff --git a/locales/es/LC_MESSAGES/TRANSLATING.po b/locales/es/LC_MESSAGES/TRANSLATING.po
index 61038356b..208512a68 100644
--- a/locales/es/LC_MESSAGES/TRANSLATING.po
+++ b/locales/es/LC_MESSAGES/TRANSLATING.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-07-12 11:17+0200\n"
+"POT-Creation-Date: 2026-05-18 12:56-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language: es\n"
@@ -18,7 +18,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.17.0\n"
+"Generated-By: Babel 2.18.0\n"
#: ../../TRANSLATING.md:5
msgid "Translation Guide for the Python Packaging Guide"
@@ -155,7 +155,7 @@ msgstr ""
#: ../../TRANSLATING.md:60
msgid ""
"To generate the translation files for a new language, add the language to"
-" the `LANGUAGES` list in the `noxfile.py` configuration file. "
+" the `LANGUAGES` list in the `conf.py` configuration file. "
"[Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to "
"manage the building of the guide and its translations."
msgstr ""
@@ -811,3 +811,14 @@ msgstr ""
#~ "languages we are working on (spanish-"
#~ "translation, japanese-translation, etc)."
#~ msgstr ""
+
+#~ msgid ""
+#~ "To generate the translation files for"
+#~ " a new language, add the language "
+#~ "to the `LANGUAGES` list in the "
+#~ "`noxfile.py` configuration file. "
+#~ "[Nox](https://nox.thea.codes/en/stable/index.html) is the"
+#~ " tool we use to manage the "
+#~ "building of the guide and its "
+#~ "translations."
+#~ msgstr ""
diff --git a/locales/es/LC_MESSAGES/documentation.po b/locales/es/LC_MESSAGES/documentation.po
index 4ffa68bbe..d212c4548 100644
--- a/locales/es/LC_MESSAGES/documentation.po
+++ b/locales/es/LC_MESSAGES/documentation.po
@@ -42,7 +42,7 @@ msgstr ""
#: ../../documentation/glossary.md:6
msgid "API token"
-msgstr ""
+msgstr "token de API"
#: ../../documentation/glossary.md:19
msgid ""
@@ -108,7 +108,7 @@ msgstr ""
#: ../../documentation/glossary.md:37
msgid "Python package"
-msgstr ""
+msgstr "paquete de Python"
#: ../../documentation/glossary.md:50
msgid ""
@@ -483,9 +483,8 @@ msgid "Documentation"
msgstr "Resumen de la Documentación"
#: ../../documentation/glossary.md
-#, fuzzy
msgid "Code of conduct"
-msgstr "Archivo de Código de Conducta"
+msgstr "código de conducta"
#: ../../documentation/glossary.md:232
msgid ""
@@ -1726,26 +1725,33 @@ msgstr ""
#: ../../documentation/repository-files/changelog-file.md:83
msgid "What does it look like?"
msgstr ""
+"¿Cómo se ve?"
#: ../../documentation/repository-files/changelog-file.md:85
msgid ""
"This example comes from [Devicely](https://github.com/hpi-"
"dhc/devicely/blob/main/CHANGELOG.md), a pyOpenSci accepted package."
msgstr ""
+"Este ejemplo es de [Devicely](https://github.com/hpi-"
+"dhc/devicely/blob/main/CHANGELOG.md), un paquete aceptado por pyOpenSci"
#: ../../documentation/repository-files/code-of-conduct-file.md:3
msgid "The CODE_OF_CONDUCT file - Python Packaging"
msgstr ""
+"El archivo CODE_OF_CONDUCT - Paquete de Python"
#: ../../documentation/repository-files/code-of-conduct-file.md:5
msgid "Example CODE_OF_CONDUCT files"
msgstr ""
+"Archivos de ejemplo de CODE_OF_CONDUCT"
#: ../../documentation/repository-files/code-of-conduct-file.md:8
msgid ""
"[SciPy Code of Conduct file - notice they included theirs in their "
"documentation](https://docs.scipy.org/doc/scipy/dev/conduct/code_of_conduct.html)"
msgstr ""
+"[Archivo de Código de conducta de SciPy - Fíjese que lo han inluido "
+"en su documentación] (https://docs.scipy.org/doc/scipy/dev/conduct/code_of_conduct.html)"
#: ../../documentation/repository-files/code-of-conduct-file.md:9
msgid ""
@@ -1761,16 +1767,24 @@ msgid ""
"community uses your tool. These users may have questions or encounter "
"challenges using your package."
msgstr ""
+"Tu paquete debería incluir un archivo `CODE_OF_CONDUCT.md` ubicado en la raíz del"
+"repositorio. Una vez que haya gente utilizando tu paquete, puedes considerar"
+"que el propio paquete cuenta con una comunidad a su alrededor. Parte de esta"
+"comunidad utiliza tu herramienta. Es posible que estos usuarios tengan dudas o se enfrenten a"
+"dificultades al utilizar tu paquete"
#: ../../documentation/repository-files/code-of-conduct-file.md:18
msgid ""
"Others in the community might want to contribute to your tool. They might"
" fix bugs, update documentation and engage with the maintainer team."
msgstr ""
+"Otras personas en la comunidad quizás quieran contribuir a tu herramienta."
+"Quizás quieran arreglar bugs, actualizar documentación e interactuar con el equipo de mantenedores"
#: ../../documentation/repository-files/code-of-conduct-file.md:22
msgid "Why you need a CODE_OF_CONDUCT"
msgstr ""
+"Por qué necesitas un CODE_OF_CONDUCT"
#: ../../documentation/repository-files/code-of-conduct-file.md:24
msgid ""
@@ -1778,6 +1792,9 @@ msgid ""
"maintainer team and your users from unhealthy behavior, it is important "
"to have a [`CODE_OF_CONDUCT`](https://opensource.guide/code-of-conduct/)."
msgstr ""
+"Con el fin de mantener esta comunidad saludable y protegerte a ti mismo,"
+"tu equipo de mantenedores y tus usuarios de comportamiento poco saludable,"
+"es importante tener un [`CODE_OF_CONDUCT`](https://opensource.guide/code-of-conduct/)."
#: ../../documentation/repository-files/code-of-conduct-file.md:28
msgid ""
@@ -1787,6 +1804,10 @@ msgid ""
"enforced if need be to protect others from harmful and/or negative "
"behaviors."
msgstr ""
+"El `CODE_OF_CONDUCT es importante ya que establece lo que esperas"
+"en términos de cómo los usuarios y contribuidores interactúan con mantenedores y con otros"
+"También establece las reglas y expectativas que pueden aplicarse si es necesario, para proteger"
+"a los demás de comportamientos perjudiciales o negativos."
#: ../../documentation/repository-files/code-of-conduct-file.md:34
msgid ""
@@ -1799,6 +1820,13 @@ msgid ""
"Geoscience Python community's example "
"here.](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
msgstr ""
+"Si no estás cómodo con crear tu propio texto de `CODE_OF_CONDUCT`,"
+"te invitamos a adoptar el lenguaje de `CODE_OF_CONDUCT` usado en el"
+"[Acuerdo para colaboradores](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/) [Muchas otras "
+"comunidades](https://www.contributor-covenant.org/adopters/) han adoptado"
+"este `CODE_OF_CONDUCT` como el suyo. Mira el ejemplo de la comunidad de Geoscience de Python"
+"[Fatiando a Terra, aquí".](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
#: ../../documentation/repository-files/contributing-file.md:2
#, fuzzy
@@ -1816,6 +1844,12 @@ msgid ""
"GitHub/GitLab, and anything else that contributors might need to get "
"started."
msgstr ""
+"El archivo **CONTRIBUTING.md** es la página de aterrizaje guía para los contribuidores"
+"de tu proyecto. Delimita cómo participan los contribuidores, los tipos de contribuciones"
+"que aceptas, y cómo los constribuidores deberían interactuar o participar contigo y tu equipo"
+"mantenedor. La guía para contribuidores también debería incluir enlaces a recursos de Introducción"
+"que expliquen cómo configurar ambientes de desarrollos y qué tipo de flujos de trabajo se esperan"
+"en GitHub/GitLab, y cualquier otra cosa que los contribuidores necesiten para empezar."
#: ../../documentation/repository-files/contributing-file.md:6
msgid ""
@@ -1826,22 +1860,32 @@ msgid ""
"wants to contribute. This document creates a more collaborative and "
"efficient development process for everyone."
msgstr ""
+"Este archivo benefecia tanto a mantenedores como contribuidores. Para contribuidores, provee"
+"una hoja de ruta que les ayuda a empezar y hace su primera contribución más sencilla. Para mantenedores,"
+"responde preguntas frecuentemente realizadas y reduce la carga de explicar tu proceso"
+"a cada persona que quiere contribuir. Este documento crea un proceso de desarrollo"
+"más colaborativo y eficiente para todos."
#: ../../documentation/repository-files/contributing-file.md:8
msgid "CONTRIBUTING files lower barriers to entry"
msgstr ""
+"Los archivos de contribución reducen barreras de acceso"
#: ../../documentation/repository-files/contributing-file.md:10
msgid ""
"The contributing file lowers barriers to entry for new and seasoned "
"contributors as it provides a roadmap."
msgstr ""
+"El archivos de contribución reduce barreras de acceso tanto para nuevos contribuidores"
+"como para experimentados, puesto que ofrece una guía"
#: ../../documentation/repository-files/contributing-file.md:12
msgid ""
"**For Contributors**: It provides clear instructions on contributing, "
"from reporting issues to submitting pull requests."
msgstr ""
+"**Para Contribuidores**: Brinda Instrucciones claras en contribución, "
+"desde reportar problemas (issues) hasta enviar pull requests."
#: ../../documentation/repository-files/contributing-file.md:13
msgid ""
@@ -1849,6 +1893,9 @@ msgid ""
" and standardizing processes, reducing the time spent clarifying common "
"questions or handling incomplete issues or pull requests."
msgstr ""
+"**Para Mantenedores**: Optimiza las aportaciones al establecer expectativas"
+"y estandarizar los procesos, lo que reduce el tiempo dedicado a aclarar dudas habituales"
+"o a gestionar los problemas (issues) incompletos o pull requests"
#: ../../documentation/repository-files/contributing-file.md:15
msgid ""
@@ -1856,46 +1903,62 @@ msgid ""
"of making it more welcoming and open to new and seasoned contributors. It"
" also helps create a smoother workflow for everyone involved."
msgstr ""
+"Incluir un archivo CONTRIBUTING.md bien escrito en tu proyecto es una manera "
+"de hacerlo mas acogedor y abierto a contribuidores nuevos y experimentados. "
+"También ayuda a crear un flujo de trabajo más continuo para todos los involucrados"
#: ../../documentation/repository-files/contributing-file.md:17
msgid "Make it welcoming"
msgstr ""
+"Hazlo acogedor"
#: ../../documentation/repository-files/contributing-file.md:19
msgid ""
"Make the guide welcoming. Use accessible language to encourage "
"participation from contributors of all experience levels. For example:"
msgstr ""
+"Haz la guía acogedora. Usa lenguaje accesible para incitar"
+"pariticpación de contribuidores de todos los niveles de experiencias."
+"Por ejemplo:"
#: ../../documentation/repository-files/contributing-file.md:21
msgid ""
"Avoid technical jargon or explain terms when necessary (for example, "
"\"fork the repository\")."
msgstr ""
+"Evita jergas técnicas o explica términos cuando sea necesario (por ejemplo, "
+"\" bifurca (fork) el repositorio\")."
#: ../../documentation/repository-files/contributing-file.md:22
msgid ""
"Include a friendly introduction, such as \"Thank you for your interest in"
" contributing! We're excited to collaborate with you.\""
msgstr ""
+"Incluye una introducción amigable, como \"¡Gracias por tu interés en"
+"contribuir! Estamos emocionados de colaborar contigo.\""
#: ../../documentation/repository-files/contributing-file.md:23
msgid "Highlight that all contributions, no matter how small, are valued."
msgstr ""
+"Destaca todas las contribuciones, sin importar qué tan pequeñas sean, son valiosas"
#: ../../documentation/repository-files/contributing-file.md:25
msgid "What a CONTRIBUTING.md file should contain"
msgstr ""
+"Lo que un archivo CONTRIBUTING.md debería contener"
#: ../../documentation/repository-files/contributing-file.md:27
msgid "Example contributing files"
msgstr ""
+"Ejemplo archivos de contribución"
#: ../../documentation/repository-files/contributing-file.md:30
msgid ""
"[PyGMT contributing "
"file](https://github.com/GenericMappingTools/pygmt/blob/main/CONTRIBUTING.md)"
msgstr ""
+"[PyGMT está contribuyendo en el "
+"archivo](https://github.com/GenericMappingTools/pygmt/blob/main/CONTRIBUTING.md)"
#: ../../documentation/repository-files/contributing-file.md:31
#, fuzzy
@@ -1912,14 +1975,19 @@ msgid ""
"located in the root of your repository next to [your **README.md** file"
"](readme-file)."
msgstr ""
+"Tu paquete de Python debería incluir un archivo llamado **CONTRIBUTING.md** "
+"localizado en la raíz de tu repositorio junto con [tu archivo **README.md** "
+"](readme-file)."
#: ../../documentation/repository-files/contributing-file.md:37
msgid "The CONTRIBUTING.md file should include information about:"
msgstr ""
+"El archivo CONTRIBUTING.md debería incluir información sobre:"
#: ../../documentation/repository-files/contributing-file.md:39
msgid "The types of contributions that you welcome"
msgstr ""
+"Los tipos de contribuciones que aceptas"
#: ../../documentation/repository-files/contributing-file.md:41
msgid ""
@@ -1928,38 +1996,51 @@ msgid ""
"the one that you'd like to help with. Otherwise, you can open a new "
"issue..."
msgstr ""
+"Ejemplo: Aceptamos contribuciones de todo tipo. Si quieres abordar un problema (issue)"
+"existente, revisa nuestros problemas (issues) en este repositorio y commenta en el"
+"que te gustaría ayudar. De otra forma, puede abrir un nuevo problema (issue)..."
#: ../../documentation/repository-files/contributing-file.md:43
msgid ""
"How you'd like contributions to happen. Clearly outline your contribution"
" process. For example:"
msgstr ""
+"Cómo te gustaría que las contribuciones sucedieran. Explica con claridad"
+"tu proceso de contribución. Por ejemplo:"
#: ../../documentation/repository-files/contributing-file.md:44
msgid "Should contributors address open issues"
msgstr ""
+"¿Deberían los nuevos contribuidores abordar los problemas (issues) pendientes?"
#: ../../documentation/repository-files/contributing-file.md:45
msgid "Are new issues welcome?"
msgstr ""
+"¿Nuevos problemas (issues) son bienvenidos?"
#: ../../documentation/repository-files/contributing-file.md:46
msgid ""
"Should contributors open a pull request (PR) directly or discuss changes "
"first?"
msgstr ""
+"¿Deberían los contribuidores abrir un pull request (PR) directamente o "
+"discutir cambios priemro?"
#: ../../documentation/repository-files/contributing-file.md:48
msgid ""
"Include instructions for the fork and pull request workflow and link to "
"resources or guides explaining these steps (if available)."
msgstr ""
+"Incluye Instrucciones sobre el flujo de trabajo de bifurcaciones (fork) y pull requests,"
+"así como enlaces a recursos o guías que expliquen estos pasos (si están disponibles)."
#: ../../documentation/repository-files/contributing-file.md:49
msgid ""
"Guidelines that you have in place for users submitting issues, pull "
"requests, or asking questions."
msgstr ""
+"Lineamientos que tengas para usuarios enviando problemas, pull "
+"requests, o haciendo preguntas."
#: ../../documentation/repository-files/contributing-file.md:51
msgid ""
@@ -2864,7 +2945,7 @@ msgstr ""
#: ../../documentation/repository-files/readme-file-best-practices.md:157
msgid "Your code of conduct"
-msgstr ""
+msgstr "Tu código de conducta"
#: ../../documentation/repository-files/readme-file-best-practices.md:158
msgid "Licensing information"
diff --git a/locales/es/LC_MESSAGES/package-structure-code.po b/locales/es/LC_MESSAGES/package-structure-code.po
index f21465fc8..f6cb77044 100644
--- a/locales/es/LC_MESSAGES/package-structure-code.po
+++ b/locales/es/LC_MESSAGES/package-structure-code.po
@@ -1147,11 +1147,11 @@ msgstr "Dependencias recursivas"
#: ../../package-structure-code/declare-dependencies.md:32
msgid ""
-"Specifying dependencies in the [project.dependency] array of your "
+"Specifying dependencies in the `project.dependencies` array of your "
"`pyproject.toml` file ensures that libraries needed to run your package "
"are correctly installed into a user's environment. For instance, if your "
"package requires Pandas to run properly, and you add Pandas to the "
-"`project.dependency` array, Pandas will be installed into the users' "
+"`project.dependencies` array, Pandas will be installed into the users' "
"environment when they install your package using uv, pip, or conda."
msgstr ""
@@ -1161,7 +1161,7 @@ msgid ""
"package. You can set up instructions for running specific workflows, such"
" as tests, linting, and even typing, that automatically install groups of"
" development dependencies. These dependencies can be stored in arrays "
-"(lists of dependencies) within a `[development-group]` table."
+"(lists of dependencies) within a `[dependency-groups]` table."
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:55
@@ -1179,7 +1179,7 @@ msgstr ""
msgid ""
"**Required dependencies:** These are dependencies that need to be "
"installed for your package to work correctly in a user's environment. You"
-" add these dependencies to the `[project.dependencies]` table in your "
+" add these dependencies to the `project.dependencies` table in your "
"pyproject.toml file."
msgstr ""
@@ -1187,7 +1187,7 @@ msgstr ""
msgid ""
"**Feature Dependencies:** These are dependencies that are required if a "
"user wants to access additional functionality (that is not core) to your "
-"package. Store these in the `[project.optional.dependencies]` table or "
+"package. Store these in the `[project.optional-dependencies]` table of "
"your pyproject.toml file."
msgstr ""
@@ -1196,7 +1196,7 @@ msgid ""
"**Development Dependencies:** These dependencies are required if someone "
"wants to develop or work on your package. These include instance linters,"
" testing tools like pytest and mypy are examples of development "
-"dependencies. Store these in the `[project.dependency.groups]` table or "
+"dependencies. Store these in the `[dependency-groups]` table of "
"your pyproject.toml file."
msgstr ""
@@ -1257,7 +1257,7 @@ msgid "**Add a required dependency:**"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:110
-msgid "Will add numpy as a dependency to your `project.dependency` array:"
+msgid "Will add numpy as a dependency to your `project.dependencies` array:"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:121
@@ -1298,7 +1298,7 @@ msgid ""
"users as needed. Optional dependencies add specific features to your "
"package that not all users need. For example, if your package has an "
"optional interactive plotting feature that uses Bokeh, you would list "
-"Bokeh as an `[optional.dependency]`. Users who want interactive plotting "
+"Bokeh under `[project.optional-dependencies]`. Users who want interactive plotting "
"will install it. Users who don't need plotting don't have to install it."
msgstr ""
@@ -1318,7 +1318,7 @@ msgstr ""
#: ../../package-structure-code/declare-dependencies.md
#, fuzzy
-msgid "How to Add optional.dependencies using UV"
+msgid "How to add optional dependencies using UV"
msgstr "Dependencias opcionales"
#: ../../package-structure-code/declare-dependencies.md:164
@@ -1374,7 +1374,7 @@ msgstr "Crear grupos de dependencias opcionales"
#: ../../package-structure-code/declare-dependencies.md:199
msgid ""
-"`[development-groups]` is a newer specification introduced by PEP 735. "
+"`[dependency-groups]` is a newer specification introduced by PEP 735. "
"They are intended to organize development dependencies and are "
"intentionally separate from `[project.optional-dependencies]`, which can"
" be installed into a user's environment."
@@ -1389,7 +1389,7 @@ msgstr "¿Cómo declarar dependencias?"
#, fuzzy
msgid ""
"You declare development dependencies in your **pyproject.toml** file "
-"within a `[development-groups]` table."
+"within a `[dependency-groups]` table."
msgstr "Para declarar dependencias opcionales en su archivo **pyproject.toml**:"
#: ../../package-structure-code/declare-dependencies.md:209
@@ -1399,11 +1399,11 @@ msgid ""
msgstr ""
#: ../../package-structure-code/declare-dependencies.md
-msgid "How to Add [development.group] using UV"
+msgid "How to Add [dependency-groups] using UV"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:225
-msgid "**Add a development group dependency:**"
+msgid "**Add a development dependency group:**"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:232
@@ -1561,7 +1561,7 @@ msgstr ""
#: ../../package-structure-code/declare-dependencies.md:299
#, fuzzy
-msgid "**Install development groups:**"
+msgid "**Install dependency groups:**"
msgstr "Instalar grupos de dependencias"
#: ../../package-structure-code/declare-dependencies.md
@@ -7501,7 +7501,7 @@ msgstr ""
#~ "the `project` table of your "
#~ "`pyproject.toml` file. If they are "
#~ "optional, they will be listed in "
-#~ "the `[optional.dependencies]` table of your"
+#~ "the `[project.optional-dependencies]` table of your"
#~ " `pyproject.toml`."
#~ msgstr ""
#~ "Puede pensar en las dependencias como"
@@ -7510,7 +7510,7 @@ msgstr ""
#~ "`dependency` en la tabla `project` de"
#~ " su archivo `pyproject.toml`. Si son "
#~ "opcionales, se listarán en la tabla "
-#~ "`[optional.dependencies]` de su `pyproject.toml`."
+#~ "`[project.optional-dependencies]` de su `pyproject.toml`."
#~ msgid "You will learn about both below."
#~ msgstr "Aprenderá sobre ambos tipos a continuación."
@@ -7819,7 +7819,7 @@ msgstr ""
#~ "instalar y usar su paquete. Las "
#~ "dependencias de funcionalidades se consideran"
#~ " opcionales y también deben colocarse "
-#~ "en la tabla `[optional.dependencies]`."
+#~ "en la tabla `[project.optional-dependencies]`."
#~ msgid ""
#~ "Optional dependencies can be stored in"
diff --git a/locales/es/LC_MESSAGES/tutorials.po b/locales/es/LC_MESSAGES/tutorials.po
index 5a24b1c37..6399ed883 100644
--- a/locales/es/LC_MESSAGES/tutorials.po
+++ b/locales/es/LC_MESSAGES/tutorials.po
@@ -4,7 +4,6 @@
# Package Guide package.
# FIRST AUTHOR , 2024.
#
-#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide \n"
@@ -86,25 +85,22 @@ msgstr ""
"projecto, tu: "
#: ../../tutorials/add-license-coc.md:28
-#, fuzzy
msgid ""
"Create a `LICENSE` file in your project directory that specifies the "
"license that you choose for your package."
msgstr ""
-"creas un archivo `LICENSE` en el directorio de tu proyecto que "
-"especifique la licencia que que elejiste para tu paquete y"
+"Crea un archivo `LICENSE` en el directorio de tu proyecto que "
+"especifique la licencia que elegiste para tu paquete."
#: ../../tutorials/add-license-coc.md:29
-#, fuzzy
msgid ""
"Describe your choice of license in your `pyproject.toml` data where "
"metadata are set."
msgstr ""
-"haces referencia a ese archivo en el `pyproject.toml` donde la metadata "
-"es especificada"
+"Describe la licencia que prefieres en la sección de metadata "
+"en tu archivo `pyproject.toml`"
#: ../../tutorials/add-license-coc.md:31
-#, fuzzy
msgid ""
"By adding this metadata to your [pyproject.toml](pyproject-toml) file, "
"the choice of license will be included in your package's metadata which "
@@ -112,17 +108,17 @@ msgid ""
"is also used in your GitHub repository's landing page interface, and "
"makes its way into your distributions."
msgstr ""
-"Al incluir el archivo `LICENSE` en tu archivo `pyproject.toml`, la "
-"`LICENSE` sera incluída en la metadata de tu paquete y esta es utilizada "
-"para rellenar la página de entrada de tu paquete en PyPI. La `LICENSE` "
-"también es utilizada en la página de entrada de tu repositorio de GitHub"
+"Al incluir esta metadata a tu archivo [pyproject.toml](pyproject-toml), "
+"la licencia elegida sera incluída en la metadata de tu paquete que "
+"a su vez, es utilizada para completar la página de entrada de tu paquete "
+"en PyPI. El archivo `LICENSE` también es utilizada en la página de entrada "
+"de tu repositorio de GitHub"
#: ../../tutorials/add-license-coc.md:36
msgid "What license should you use?"
msgstr "¿Qué licencia deberías elegir?"
#: ../../tutorials/add-license-coc.md:38
-#, fuzzy
msgid ""
"We suggest that you use a permissive license that accommodates the other "
"most commonly used licenses in the scientific Python ecosystem (MIT[^mit]"
@@ -145,10 +141,12 @@ msgid ""
"[We discuss licenses for the scientific Python ecosystem in more detail "
"here in our guidebook.](../documentation/repository-files/license-files)"
msgstr ""
+"[Aquí en nuestro guidebook exploramos más sobre licencias para el ecosistema "
+"científico de Python.](../documentation/repository-files/license-files)"
#: ../../tutorials/add-license-coc.md:45
msgid "Where should the `LICENSE` file live"
-msgstr ""
+msgstr "Donde encontrar el archivo `LICENSE`"
#: ../../tutorials/add-license-coc.md:47
msgid ""
@@ -157,13 +155,17 @@ msgid ""
"automagically discover it and provide users with a direct link to your "
"`LICENSE` file within your GitHub repository."
msgstr ""
+"El archivo `LICENSE` debe estar en la raíz del repositorio de tu "
+"paquete. Al agregar el archivo `LICENSE` a la raíz, Github lo "
+"descubrirá automaticamente e incluirá un link a tu archivo `LICENSE` "
+"en tu repositorio"
#: ../../tutorials/add-license-coc.md:53
msgid ""
"Image showing the GitHub repository for SunPy an accepted pyOpenSci "
"package."
msgstr ""
-"Imagen que muestra el repositorio de GitHub de SunPy un paquete "
+"Imagen que muestra el repositorio de GitHub para SunPy un paquete "
"aceptadopor pyOpenSci. "
#: ../../tutorials/add-license-coc.md:55
@@ -206,22 +208,26 @@ msgid ""
"here](https://docs.github.com/en/communities/setting-up-your-project-for-"
"healthy-contributions/adding-a-license-to-a-repository)."
msgstr ""
+"Puedes agregar `LICENSE` a traves de UI de GitHub en este link [ instructions "
+"here](https://docs.github.com/en/communities/setting-up-your-project-for-"
+"healthy-contributions/adding-a-license-to-a-repository)."
#: ../../tutorials/add-license-coc.md:68
msgid "You can add the file manually as we are doing in this lesson."
-msgstr ""
+msgstr "Puedes agregar el archivo manualmente tal como en esta lección"
#: ../../tutorials/add-license-coc.md:71
msgid "If you completed the past lessons including"
-msgstr ""
+msgstr "Si has completado lecciones anteriores incluyendo"
#: ../../tutorials/add-license-coc.md:73
msgid "[Making your code installable](create-python-package.md) and"
-msgstr ""
+msgstr "[Haciendo tu codigo instalable](create-python-package.md) y"
#: ../../tutorials/add-license-coc.md:74
msgid "[publishing your package to PyPI](publish-pypi.md)"
-msgstr ""
+msgstr "[publicando tu paquete en PyPI](publish-pypi.md)"
#: ../../tutorials/add-license-coc.md:76
msgid ""
@@ -229,16 +235,21 @@ msgid ""
"license in your Python package. Thus you can skip to the next section of "
"this tutorial which walks you through adding a `CODE_OF_CONDUCT`."
msgstr ""
+"entonces ya tienes un archivo `LICENSE` que contiene texto para la "
+"licencia MIT en tu paquete de Python. Por lo tanto, puedes ir directo a "
+"la seccion que describe como agregar un `CODE_OF_CONDUCT`."
#: ../../tutorials/add-license-coc.md:78
msgid ""
"If you don't yet have a `LICENSE` file in your directory, then continue "
"reading."
msgstr ""
+"Si aún no tienes un archivo `LICENSE` en tu directorio, continua "
+"leyendo."
#: ../../tutorials/add-license-coc.md:81
msgid "How to add a `LICENSE` to your package - the manual way"
-msgstr ""
+msgstr "Como agregar un `LICENSE` a tu paquete - de forma manual"
#: ../../tutorials/add-license-coc.md:83
msgid ""
@@ -246,38 +257,44 @@ msgid ""
"platform such as GitHub or GitLab, then you can create a `LICENSE` file "
"by"
msgstr ""
+"Si aún no tienes un archivo `LICENSE`, y aún no estas usando una plataforma "
+" como Github o GitLab, entonces puedes crear un archivo `LICENSE`"
#: ../../tutorials/add-license-coc.md:85
msgid "Create a new file called `LICENSE`. If you are using shell you can type:"
-msgstr ""
+msgstr "Crea un nuevo archivo llamado `LICENSE. Si estas utilizando shell, puedes escribir"
#: ../../tutorials/add-license-coc.md:92
msgid "Go to [choosealicense.com](https://choosealicense.com/)"
-msgstr ""
+msgstr "Visita [choosealicense.com](https://choosealicense.com/)"
#: ../../tutorials/add-license-coc.md:93
msgid "Select permissive license"
-msgstr ""
+msgstr "Elige una licencia permisiva"
#: ../../tutorials/add-license-coc.md:94
msgid ""
"It will suggest that you use the [MIT "
"license](https://choosealicense.com/licenses/mit/)."
msgstr ""
+"Te sugerirá utilizar una [Licencia MIT]"
+"(https://choosealicense.com/licenses/mit/)."
#: ../../tutorials/add-license-coc.md:95
msgid ""
"Copy the license text that it provides into your `LICENSE` file that you "
"created above."
msgstr ""
+"Copia el texto de la licencia en tu archivo `LICENSE` que creaste."
+""
#: ../../tutorials/add-license-coc.md:96
msgid "Save your file. You're all done!"
-msgstr ""
+msgstr "Guarda tu archivo. Todo listo!"
#: ../../tutorials/add-license-coc.md:98
msgid "An overview of licenses in the scientific Python ecosystem"
-msgstr ""
+msgstr "Una vista rápida de las licencias en el ecosistema científico de Python"
#: ../../tutorials/add-license-coc.md:101
msgid ""
@@ -287,6 +304,12 @@ msgid ""
"are most commonly used for scientific software and how to select the "
"correct license."
msgstr ""
+"En el [guidebook de empaquetamiento](../documentation/repository-files"
+"/license-files) de pyOpenSci, brindamos una vista general de las licencias en "
+"el ecosistema científico de Python. Revisamos por qué los archivos de licencia "
+"son importantes, cuáles son más comúnmente utilizados para software científico "
+"y cómo seleccionar la licencia apropiada"
+
#: ../../tutorials/add-license-coc.md:103
msgid ""
@@ -295,20 +318,25 @@ msgid ""
" side of things.](https://opensource.guide/legal/#just-give-me-the-tldr-"
"on-what-i-need-to-protect-my-project)"
msgstr ""
+"Si deseas una visión general de por qué las licencias son importantes para proteger "
+"el software de código abierto, [consulta esta entrada de blog que resume el aspecto legal.](https://opensource.guide/legal/#just-give-me-the-tldr-"
+"on-what-i-need-to-protect-my-project)"
#: ../../tutorials/add-license-coc.md
msgid "Instructions for adding a `LICENSE` file within the GitHub interface"
-msgstr ""
+msgstr "Instrucciones para agregar un archivo `LICENSE` dentro de la interfaz de GitHub"
#: ../../tutorials/add-license-coc.md
msgid "Add license: new GitHub repository"
-msgstr ""
+msgstr "Agregar licencia: nuevo repositorio de GitHub"
#: ../../tutorials/add-license-coc.md:114
msgid ""
"When you create a new GitHub repository you can add a `LICENSE` file "
"through the GitHub interface."
msgstr ""
+"Cuando creas un nuevo repositorio en GitHub, puedes agregar un archivo `LICENSE` "
+"a través de la interfaz de GitHub."
#: ../../tutorials/add-license-coc.md:119
msgid ""
@@ -320,16 +348,26 @@ msgid ""
"you. At the very bottom there is a line to add a .gitignore file and "
"another to choose a license."
msgstr ""
+"Captura de pantalla de la interfaz de creación de nuevos repositorios que ofrece GitHub. "
+"Los elementos incluyen el propietario y el nombre del repositorio nuevo. Debajo puedes "
+"agregar una descripción del repositorio. Más abajo puedes configurarlo como público o "
+"privado. En la parte inferior de la interfaz hay una casilla para agregar un README donde "
+"se creará un archivo README en blanco. Al final también hay opciones para agregar un archivo "
+".gitignore y elegir una licencia."
+
#: ../../tutorials/add-license-coc.md:121
msgid ""
"Image showing the GitHub interface that allows you to add a `LICENSE` and"
" `README` file when you create a new repository."
msgstr ""
+"Imagen que muestra la interfaz de GitHub que permite agregar un archivo `LICENSE` y "
+"`README` cuando creas un nuevo repositorio."
+
#: ../../tutorials/add-license-coc.md
msgid "Add `LICENSE`: Existing GitHub repository"
-msgstr ""
+msgstr "Agregar `LICENSE`: repositorio existente de GitHub"
#: ../../tutorials/add-license-coc.md:127
msgid ""
@@ -337,6 +375,9 @@ msgid ""
"add a `LICENSE` using the GitHub interface by adding a new file to the "
"repository."
msgstr ""
+"Si ya tienes un repositorio de GitHub para tu paquete, puedes agregar un archivo `LICENSE` "
+"usando la interfaz de GitHub mediante la creación de un archivo nuevo en el repositorio."
+
#: ../../tutorials/add-license-coc.md:129
msgid ""
@@ -345,6 +386,11 @@ msgid ""
"/setting-up-your-project-for-healthy-contributions/adding-a-license-"
"to-a-repository) ."
msgstr ""
+"Sigue las instrucciones para seleccionar y agregar una licencia a tu repositorio en la "
+"[página de LICENSE de GitHub](https://docs.github.com/en/communities"
+"/setting-up-your-project-for-healthy-contributions/adding-a-license-"
+"to-a-repository)."
+
#: ../../tutorials/add-license-coc.md:130
msgid ""
@@ -352,6 +398,10 @@ msgid ""
"repository with the repository on GitHub.com. This means running `git "
"pull` to update your local branch."
msgstr ""
+"Una vez que hayas agregado tu archivo `LICENSE`, asegúrate de sincronizar tu repositorio "
+"local de git con el repositorio en GitHub.com. Esto implica ejecutar `git pull` para "
+"actualizar tu rama local."
+
#: ../../tutorials/add-license-coc.md:133
msgid ""
@@ -362,12 +412,19 @@ msgid ""
"license. At the bottom of the image, the actual text for the license is "
"shown in the LICENSE file."
msgstr ""
+"Imagen que muestra cómo se ve el archivo LICENSE en la interfaz de GitHub. En la parte "
+"superior se puede ver la licencia, que en esta imagen es BSD de 3 cláusulas (New o revised). "
+"Luego hay texto que describe qué es la licencia y los permisos asociados. En la parte "
+"inferior de la imagen se muestra el texto completo de la licencia dentro del archivo LICENSE."
#: ../../tutorials/add-license-coc.md:135
msgid ""
"You can view a summary of the `LICENSE` chosen on your project's GitHub "
"landing page."
msgstr ""
+"Puedes ver un resumen de la `LICENSE` elegida en la página principal del "
+"repositorio en GitHub."
+
#: ../../tutorials/add-license-coc.md:142
msgid ""
@@ -375,10 +432,13 @@ msgid ""
"about the `CODE_OF_CONDUCT.md` file and how to add it to your package "
"directory."
msgstr ""
+"Ahora ya sabes cómo agregar una `LICENSE` a tu proyecto. A continuación, aprenderás sobre el "
+"archivo `CODE_OF_CONDUCT.md` y cómo agregarlo al directorio de tu paquete."
+
#: ../../tutorials/add-license-coc.md:147
msgid "What is a code of conduct file?"
-msgstr ""
+msgstr "¿Qué es un archivo de código de conducta?"
#: ../../tutorials/add-license-coc.md:149
#, python-brace-format
@@ -386,32 +446,42 @@ msgid ""
"A `CODE_OF_CONDUCT` file is a {term}`Code of conduct` used to establish "
"guidelines for how people in your community interact."
msgstr ""
+"Un archivo `CODE_OF_CONDUCT` es un {term}`código de conducta` utilizado para establecer "
+"normas sobre cómo las personas de tu comunidad interactúan."
#: ../../tutorials/add-license-coc.md:152
msgid ""
"This file is critical to supporting your community as it grows. The "
"`CODE_OF_CONDUCT`:"
msgstr ""
+"Este archivo es fundamental para apoyar a tu comunidad a medida que "
+"crece. El `CODE_OF_CONDUCT`:"
#: ../../tutorials/add-license-coc.md:155
msgid ""
"Establishes guidelines for how users and contributors interact with each "
"other and you in your software repository."
msgstr ""
+"Establece pautas sobre cómo los usuarios y colaboradores interactúan entre sí y contigo en "
+"el repositorio de tu software."
+
#: ../../tutorials/add-license-coc.md:156
msgid "Identifies negative behaviors that you don't want in your interactions."
-msgstr ""
+msgstr "Identifica comportamientos negativos que no deseas en tus interacciones."
#: ../../tutorials/add-license-coc.md:158
msgid ""
"You can use your code of conduct as a tool that can be referenced when "
"moderating challenging conversations."
msgstr ""
+"Puedes usar tu código de conducta como una herramienta de referencia al moderar conversaciones "
+"difíciles."
+
#: ../../tutorials/add-license-coc.md:160
msgid "What to put in your `CODE_OF_CONDUCT` file"
-msgstr ""
+msgstr "Qué incluir en tu archivo `CODE_OF_CONDUCT`"
#: ../../tutorials/add-license-coc.md:162
msgid ""
@@ -420,32 +490,43 @@ msgid ""
"language](https://www.contributor-"
"covenant.org/version/2/1/code_of_conduct/) as a starting place."
msgstr ""
+"Si no estás seguro de qué texto agregar a tu archivo `CODE_OF_CONDUCT`, te sugerimos adoptar "
+"el [lenguaje de Pacto de Colaboradores](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/) como punto de partida."
+
#: ../../tutorials/add-license-coc.md:165
msgid ""
""
msgstr ""
+""
#: ../../tutorials/add-license-coc.md:165
msgid "Contributor Covenant"
-msgstr ""
+msgstr "Pacto de Colaboradores"
#: ../../tutorials/add-license-coc.md:167
msgid ""
"The `CODE_OF_CONDUCT.md` should be placed at the root of your project "
"directory, similar to the `LICENSE` file."
msgstr ""
+"El archivo `CODE_OF_CONDUCT.md` debe colocarse en la raíz del directorio de tu proyecto, "
+"similar al archivo `LICENSE`."
+
#: ../../tutorials/add-license-coc.md:169
msgid "How to add a `CODE_OF_CONDUCT` file to your package directory"
-msgstr ""
+msgstr "Cómo agregar un archivo `CODE_OF_CONDUCT` al directorio de tu paquete"
#: ../../tutorials/add-license-coc.md:171
msgid ""
"Add a `CODE_OF_CONDUCT.md` file to the root of your repository if it "
"doesn't already exist."
msgstr ""
+"Agrega un archivo `CODE_OF_CONDUCT.md` en la raíz de tu repositorio si aún no existe."
+
#: ../../tutorials/add-license-coc.md:177
msgid ""
@@ -457,14 +538,21 @@ msgid ""
"information. Read the text closely to ensure you both understand it and "
"also agree with its contents!"
msgstr ""
+"Visita el [sitio web del pacto de colaboradores](https://www.contributor-"
+"covenant.org/) y agrega [la versión en markdown de su código de conducta]"
+"(https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/code_of_conduct.md) a tu archivo "
+"`CODE_OF_CONDUCT.md`. Asegúrate de completar cualquier información de marcador de posición. "
+"Lee el texto cuidadosamente para asegurarte de que lo entiendes y estás de acuerdo con su contenido."
#: ../../tutorials/add-license-coc.md:179
msgid "That's it - you've now added a code of conduct to your package directory."
-msgstr ""
+msgstr "Eso es todo: ahora has agregado un código de conducta al directorio de tu paquete."
+
#: ../../tutorials/add-license-coc.md:181
msgid "Additional Code of Conduct resources"
-msgstr ""
+msgstr "Recursos adicionales sobre códigos de conduct
#: ../../tutorials/add-license-coc.md:184
msgid ""
@@ -472,6 +560,10 @@ msgid ""
"files](https://docs.github.com/en/communities/setting-up-your-project-"
"for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
msgstr ""
+"[ Guía: `CODE_OF_CONDUCT.md`]"
+"(https://docs.github.com/en/communities/setting-up-your-project-"
+"for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
+
#: ../../tutorials/add-license-coc.md:185
msgid ""
@@ -479,28 +571,32 @@ msgid ""
"overview](https://www.pyopensci.org/python-package-guide/documentation"
"/repository-files/code-of-conduct-file.html)"
msgstr ""
+"[Guía de paquetes de pyOpenSci: resumen de archivos `CODE_OF_CONDUCT.md`]"
+"(https://www.pyopensci.org/python-package-guide/documentation"
+"/repository-files/code-of-conduct-file.html)"
+
#: ../../tutorials/add-license-coc.md:188 ../../tutorials/add-readme.md:240
#: ../../tutorials/publish-conda-forge.md:475
#: ../../tutorials/pyproject-toml.md:699
msgid " Wrap up"
-msgstr ""
+msgstr " Conclusión"
#: ../../tutorials/add-license-coc.md:190
msgid "In this lesson and the [last lesson](add-readme), you have added a:"
-msgstr ""
+msgstr "En esta lección y la [lección anterior](add-readme), has agregado:"
#: ../../tutorials/add-license-coc.md:192
msgid "`README` file;"
-msgstr ""
+msgstr "archivo `README`;"
#: ../../tutorials/add-license-coc.md:193
msgid "`LICENSE` file and a"
-msgstr ""
+msgstr "archivo `LICENSE` y "
#: ../../tutorials/add-license-coc.md:194
msgid "`CODE_OF_CONDUCT` file."
-msgstr ""
+msgstr "archivo `CODE_OF_CONDUCT`"
#: ../../tutorials/add-license-coc.md:196
msgid ""
@@ -508,23 +604,32 @@ msgid ""
"repository. These files help users understand how to use your package and"
" interact with package maintainers."
msgstr ""
+"Estos son archivos fundamentales necesarios para cada repositorio de paquetes de Python "
+"científico. Estos archivos ayudan a los usuarios a comprender cómo utilizar tu paquete e "
+"interactuar con quienes lo mantienen."
#: ../../tutorials/add-license-coc.md:200
#: ../../tutorials/create-python-package.md:455
msgid "In the upcoming lessons, you will:"
-msgstr ""
+msgstr "En las próximas lecciones, harás lo siguiente:"
#: ../../tutorials/add-license-coc.md:202
msgid ""
"[Add more metadata to your `pyproject.toml` file](pyproject-toml) to "
"support building and publishing your package on PyPI."
msgstr ""
+"[Agregar más metadatos a tu archivo `pyproject.toml`](pyproject-toml) para apoyar la "
+"construcción y publicación de tu paquete en PyPI."
+
#: ../../tutorials/add-license-coc.md:203
msgid ""
"Publish a new version of your Python package to the test PyPI to preview "
"the updated metadata landing page."
msgstr ""
+"Publicar una nueva versión de tu paquete de Python en Test PyPI para previsualizar la página "
+"de metadatos actualizada."
+
#: ../../tutorials/add-license-coc.md:208
#: ../../tutorials/create-python-package.md:550
@@ -532,52 +637,51 @@ msgstr ""
#: ../../tutorials/publish-pypi.md:419
#: ../../tutorials/trusted-publishing.md:347
msgid "Footnotes"
-msgstr ""
+msgstr "Notas al pie"
#: ../../tutorials/add-license-coc.md:210
msgid "https://opensource.org/license/mit/"
-msgstr ""
+msgstr "https://opensource.org/license/mit/"
#: ../../tutorials/add-license-coc.md:211
msgid "https://opensource.org/license/bsd-3-clause/"
-msgstr ""
+msgstr "https://opensource.org/license/bsd-3-clause/"
#: ../../tutorials/add-readme.md:6
-#, fuzzy, python-brace-format
msgid "Add a {term}`README` file to your {term}`Python package`"
-msgstr "Agrega `LICENSE` y `CODE_OF_CONDUCT` a tu paquete de Python"
+msgstr "Agrega un archivo {term}`README` a tu {term}`paquete de Python`"
#: ../../tutorials/add-readme.md:8
msgid "In the previous lessons you learned:"
-msgstr ""
+msgstr "En las lecciones anteriores aprendiste:"
#: ../../tutorials/add-readme.md:10
msgid "[What a Python package is](intro.md)"
-msgstr ""
+msgstr "[Qué es un paquete de Python](intro.md)"
#: ../../tutorials/add-readme.md:11
msgid "[How to make your code installable](create-python-package)"
-msgstr ""
+msgstr "[Cómo hacer que tu código sea instalable](create-python-package)""
#: ../../tutorials/add-readme.md:12
msgid "[How to publish your package to (test) PyPI](publish-pypi.md)"
-msgstr ""
+msgstr "[Cómo publicar tu paquete en (test) PyPI](publish-pypi.md)"
#: ../../tutorials/add-readme.md:13
msgid "[How to publish your package to conda-forge](publish-conda-forge.md)"
-msgstr ""
+msgstr "[Cómo publicar tu paquete en conda-forge](publish-conda-forge.md)"
#: ../../tutorials/add-readme.md:19
msgid "How to add a **README.md** file to your package."
-msgstr ""
+msgstr "Cómo agregar un archivo **README.md** a tu paquete."
#: ../../tutorials/add-readme.md:20
msgid "What the core elements of a **README.md** file are."
-msgstr ""
+msgstr "Cuáles son los elementos principales de un archivo **README.md**."
#: ../../tutorials/add-readme.md:23
msgid "What is a README file?"
-msgstr ""
+msgstr "¿Qué es un archivo README?"
#: ../../tutorials/add-readme.md:25
#, python-brace-format
@@ -585,10 +689,13 @@ msgid ""
"The `README.md` file is the project's {term}`README` and is located at "
"the root of your project directory. It helps a user understand:"
msgstr ""
+"El archivo `README.md` es el {term}`README` del proyecto y se encuentra en "
+"la raíz del directorio de tu proyecto. Ayuda a que una persona entienda:"
+
#: ../../tutorials/add-readme.md:29
msgid "You package's name"
-msgstr ""
+msgstr "El nombre de tu paquete"
#: ../../tutorials/add-readme.md:30
msgid ""
@@ -596,22 +703,24 @@ msgid ""
"problem(s) that your software is designed to solve and its target "
"audience."
msgstr ""
+"Qué hace el paquete. Tu archivo README debe indicar claramente el/los "
+"problema(s) que tu software está diseñado para resolver y su público objetivo."
#: ../../tutorials/add-readme.md:31
msgid "The current development \"state\" of the package (through badges)"
-msgstr ""
+msgstr "El \"estado\" actual de desarrollo del paquete (mediante badges)"
#: ../../tutorials/add-readme.md:32
msgid "How to get started with using your package."
-msgstr ""
+msgstr "Cómo comenzar a usar tu paquete."
#: ../../tutorials/add-readme.md:33
msgid "How to contribute to your package"
-msgstr ""
+msgstr "Cómo contribuir a tu paquete"
#: ../../tutorials/add-readme.md:34
msgid "How to cite your package"
-msgstr ""
+msgstr "Cómo citar tu paquete"
#: ../../tutorials/add-readme.md:36
msgid ""
@@ -619,6 +728,10 @@ msgid ""
"someone sees before they install your package. The README file is also "
"used to populate your PyPI landing page."
msgstr ""
+"Tu archivo **README.md** es importante porque suele ser lo primero que alguien "
+"ve antes de instalar tu paquete. El archivo README también se utiliza para "
+"generar tu página principal en PyPI."
+
#: ../../tutorials/add-readme.md:38
msgid ""
@@ -626,82 +739,97 @@ msgid ""
"However, this tutorial outlines the sections that we suggest that you "
"include in your README file."
msgstr ""
+"Ten en cuenta que no existe una estructura de contenido específica para los "
+"archivos README. Sin embargo, este tutorial describe las secciones que te "
+"sugerimos incluir en tu archivo README."
+
#: ../../tutorials/add-readme.md:42
msgid "Create a README.md file for your package"
-msgstr ""
+msgstr "Crear un archivo README.md para tu paquete"
#: ../../tutorials/add-readme.md:44
msgid "It's time to add a `README.md` file to your project directory."
-msgstr ""
+msgstr "Es momento de agregar un archivo `README.md` a tu directorio de proyecto."
#: ../../tutorials/add-readme.md:46
msgid "Step 0: Create a README file"
-msgstr ""
+msgstr "Paso 0: Crear un archivo README"
#: ../../tutorials/add-readme.md:47
msgid ""
"To get started, if you don't already have a README.md file in your "
"project directory, create one."
msgstr ""
+"Para comenzar, si aún no tienes un archivo README.md en tu directorio de "
+"proyecto, créalo.""
+
#: ../../tutorials/add-readme.md:50
msgid "If you created your project directory from"
-msgstr ""
+msgstr "Si creaste tu directorio de proyecto a partir de"
#: ../../tutorials/add-readme.md:52
msgid "a GitHub repository online"
-msgstr ""
+msgstr "un repositorio de GitHub en línea"
#: ../../tutorials/add-readme.md:53
msgid "using `hatch init`"
-msgstr ""
+msgstr "usando `hatch init`"
#: ../../tutorials/add-readme.md:55
msgid "Then you may already have a README.MD file in your project directory."
-msgstr ""
+msgstr "Entonces es posible que ya tengas un archivo README.MD en tu directorio de proyecto."
#: ../../tutorials/add-readme.md:61
msgid "Step 1: Add the name of your package as the README title"
-msgstr ""
+msgstr "Paso 1: Agregar el nombre de tu paquete como título del README"
#: ../../tutorials/add-readme.md:63
msgid "At the top of the `README.md` file, add the name of your package."
-msgstr ""
+msgstr "En la parte superior del archivo `README.md`, agrega el nombre de tu paquete."
#: ../../tutorials/add-readme.md:65
msgid ""
"If you are using markdown it should be a header 1 (H1) tag which is "
"denoted with a single `#` sign."
msgstr ""
+"Si estás usando markdown, debe ser un encabezado de nivel 1 (H1), que se "
+"indica con un solo símbolo `#`."
#: ../../tutorials/add-readme.md:67
msgid "`# Package-title-here`"
-msgstr ""
+msgstr "`# Título-del-paquete-aquí`"
#: ../../tutorials/add-readme.md:69
msgid "Step 2: add badges to the top of your README file"
-msgstr ""
+msgstr "Paso 2: agregar insignias (badges) en la parte superior de tu archivo README"
+
#: ../../tutorials/add-readme.md:71
msgid ""
"It's common for maintainers to add badges to the top of their README "
"files. Badges allow you and your package users to track things like:"
msgstr ""
+"Es común que quienes mantienen proyectos agreguen insignias en la parte "
+"superior de sus archivos README. Las insignias te permiten a ti y a las "
+"personas usuarias de tu paquete monitorear cosas como:"
#: ../../tutorials/add-readme.md:73
msgid "Broken documentation and test builds."
-msgstr ""
+msgstr "Documentación rota y compilaciones de prueba fallidas"
#: ../../tutorials/add-readme.md:74
msgid "Versions of your package that are on PyPI and conda."
-msgstr ""
+msgstr "Versiones de tu paquete disponibles en PyPI y conda."
#: ../../tutorials/add-readme.md:75
msgid ""
"Whether your package has been reviewed and vetted by an organization such"
" as pyOpenSci and/or JOSS."
msgstr ""
+"Si tu paquete ha sido revisado y validado por una organización como pyOpenSci y/o JOSS."
+
#: ../../tutorials/add-readme.md:77
msgid ""
@@ -710,50 +838,66 @@ msgid ""
"/py-pi-version). This badge will dynamically update as you release new "
"versions of your package to PyPI."
msgstr ""
+"Si ya has publicado tu paquete en pypi.org, puedes usar "
+"[shields.io para crear una insignia de versión del paquete](https://shields.io/badges"
+"/py-pi-version). Esta insignia se actualizará dinámicamente a medida que publiques nuevas "
+"versiones de tu paquete en PyPI."
+
#: ../../tutorials/add-readme.md:79
msgid ""
"If not, you can leave the top empty for now and add badges to your README"
" at a later point as they make sense."
msgstr ""
+"Si no, puedes dejar esta parte superior vacía por ahora y agregar insignias a tu README "
+"más adelante cuando tenga sentido hacerlo."
+
#: ../../tutorials/add-readme.md:81
msgid "Step 3: Add a description of what your package does"
-msgstr ""
+msgstr "Paso 3: Agregar una descripción de lo que hace tu paquete"
#: ../../tutorials/add-readme.md:83
msgid ""
"Below the badges (if you have them), add a section of text that provides "
"an easy-to-understand overview of what your package does."
msgstr ""
+"Debajo de las insignias (si las tienes), agrega una sección de texto que "
+"proporcione una descripción clara y fácil de entender de lo que hace tu paquete."
+
#: ../../tutorials/add-readme.md:87
msgid "Keep this section short."
-msgstr ""
+msgstr "Mantén esta sección breve."
#: ../../tutorials/add-readme.md:88
msgid "Try to avoid jargon."
-msgstr ""
+msgstr "Intenta evitar la jerga técnica."
#: ../../tutorials/add-readme.md:89
msgid ""
"Define technical terms that you use to make the description accessible to"
" more people."
msgstr ""
+"Define los términos técnicos que utilices para que la descripción sea accesible "
+"a más personas."
#: ../../tutorials/add-readme.md:91
msgid ""
"Remember that the more people understand what your package does, the more"
" people will use it."
msgstr ""
+"Recuerda que cuanto más personas entiendan lo que hace tu paquete, más "
+"personas lo utilizarán."
+
#: ../../tutorials/add-readme.md:93
msgid "Step 4: Add package installation instructions"
-msgstr ""
+msgstr "Paso 4: Agregar instrucciones de instalación del paquete"
#: ../../tutorials/add-readme.md:95
msgid "Next, add instructions that tell users how to install your package."
-msgstr ""
+msgstr "Luego, agrega instrucciones que indiquen a las personas cómo instalar tu paquete."
#: ../../tutorials/add-readme.md:97
#, python-brace-format
@@ -761,24 +905,30 @@ msgid ""
"For example, can they use {term}`pip` to install your package? `python -m"
" pip install packagename`"
msgstr ""
+"Por ejemplo, ¿pueden usar {term}`pip` para instalar tu paquete? `python -m "
+"pip install nombre_del_paquete`"
+
#: ../../tutorials/add-readme.md:100
msgid "or conda?"
-msgstr ""
+msgstr "¿o conda?"
#: ../../tutorials/add-readme.md:102
msgid "`conda install -c conda-forge packagename`."
-msgstr ""
+msgstr "`conda install -c conda-forge nombre_del_paquete`."
#: ../../tutorials/add-readme.md:104
msgid ""
"If you haven't yet published your package to pypi.org then you can skip "
"this section and come back and add these instructions later."
msgstr ""
+"Si aún no has publicado tu paquete en pypi.org, puedes omitir esta sección "
+"y volver más adelante para agregar estas instrucciones."
+
#: ../../tutorials/add-readme.md:108
msgid "Step 5: Any additional setup"
-msgstr ""
+msgstr "Paso 5: Configuración adicional"
#: ../../tutorials/add-readme.md:110
msgid ""
@@ -786,30 +936,40 @@ msgid ""
"tools in order to use your package. If that is the case, be sure to add a"
" section on additional setup to your README file."
msgstr ""
+"En algunos casos, quienes usen tu paquete pueden necesitar instalar otras "
+"herramientas manualmente para poder utilizarlo. Si ese es el caso, asegúrate "
+"de agregar una sección de configuración adicional en tu archivo README."
+
#: ../../tutorials/add-readme.md:115
msgid ""
"Here, briefly document (or link to documentation for) any additional "
"setup that is required to use your package. This might include:"
msgstr ""
+"Aquí, documenta brevemente (o enlaza a la documentación) cualquier "
+"configuración adicional necesaria para usar tu paquete. Esto podría incluir:"
+
#: ../../tutorials/add-readme.md:119
msgid "authentication information, if it is applicable to your package."
-msgstr ""
+msgstr "información de autenticación, si aplica a tu paquete."
#: ../../tutorials/add-readme.md:120
msgid "additional tool installations, such as GDAL."
-msgstr ""
+msgstr "instalación de herramientas adicionales, como GDAL."
#: ../../tutorials/add-readme.md:123
msgid ""
"Many packages won't need an additional setup section in their README. In "
"that case you can always skip this section."
msgstr ""
+"Muchos paquetes no necesitarán una sección de configuración adicional en su "
+"README. En ese caso, puedes omitir esta sección."
+
#: ../../tutorials/add-readme.md:128
msgid "Step 6: Add a get started section"
-msgstr ""
+msgstr "Paso 6: Agregar una sección de inicio rápido"
#: ../../tutorials/add-readme.md:130
msgid ""
@@ -817,32 +977,46 @@ msgid ""
"example that demonstrates importing and using some of the functionality "
"in your package."
msgstr ""
+"A continuación, agrega una sección de inicio rápido. Dentro de esta sección, "
+"incluye un pequeño ejemplo de código que demuestre cómo importar y utilizar "
+"algunas de las funcionalidades de tu paquete."
+
#: ../../tutorials/add-readme.md:133
msgid "Provide a fully functional code snippet if possible"
-msgstr ""
+msgstr "Proporciona un ejemplo de código completamente funcional si es posible"
#: ../../tutorials/add-readme.md:136
msgid ""
"It is important to try to make the code examples that you provide your "
"users as useful as possible."
msgstr ""
+"Es importante intentar que los ejemplos de código que proporcionas a las "
+"personas usuarias sean lo más útiles posible."
+
#: ../../tutorials/add-readme.md:138
msgid ""
"Be sure to provide a copy/paste code example that will work as-is when "
"pasted into a Jupyter Notebook or .py file if that is possible."
msgstr ""
+"Asegúrate de proporcionar un ejemplo de código que se pueda copiar y pegar y "
+"que funcione tal cual en un Jupyter Notebook o archivo .py, si es posible."
+
#: ../../tutorials/add-readme.md:140
msgid ""
"If there are tokens and other steps needed to run your package, be sure "
"to be clear about what those steps are."
msgstr ""
+"Si se requieren tokens u otros pasos para ejecutar tu paquete, asegúrate de "
+"ser claro acerca de cuáles son esos pasos."
+
#: ../../tutorials/add-readme.md:143
msgid "For the pyosPackage, a short get started demo might look like this:"
-msgstr ""
+msgstr "Para pyosPackage, una breve demostración de inicio rápido podría verse así:"
+
#: ../../tutorials/add-readme.md:151
msgid ""
@@ -850,16 +1024,23 @@ msgid ""
"created. If you don't have this yet, you can leave it empty for the time "
"being."
msgstr ""
+"O también puede ser simplemente un enlace a un tutorial de inicio que hayas "
+"creado. Si aún no lo tienes, puedes dejarlo vacío por el momento."
+
#: ../../tutorials/add-readme.md:154
msgid ""
"This would also be a great place to add links to tutorials that help "
"users understand how to use your package for common workflows."
msgstr ""
+"Este también es un excelente lugar para agregar enlaces a tutoriales que "
+"ayuden a las personas usuarias a entender cómo usar tu paquete en flujos de "
+"trabajo comunes."
+
#: ../../tutorials/add-readme.md:159
msgid "Step 7: Community section"
-msgstr ""
+msgstr "Paso 7: Sección de comunidad"
#: ../../tutorials/add-readme.md:161
msgid ""
@@ -867,6 +1048,10 @@ msgid ""
"information for users who may want to engage with your project. This "
"engagement will likely happen on a platform like GitHub or GitLab."
msgstr ""
+"La sección de comunidad de tu archivo README es un lugar para incluir "
+"información para personas usuarias que quieran interactuar con tu proyecto. "
+"Esta interacción probablemente ocurrirá en una plataforma como GitHub o GitLab."
+
#: ../../tutorials/add-readme.md:163
msgid ""
@@ -874,6 +1059,10 @@ msgid ""
"and `CODE_OF_CONDUCT.md`. You will create a code of conduct file in the "
"[next lesson](add-license-coc)."
msgstr ""
+"En la sección de comunidad, agregarás enlaces a tu guía de contribución y al "
+"`CODE_OF_CONDUCT.md`. Crearás un archivo de código de conducta en la "
+"[siguiente lección](add-license-coc)."
+
#: ../../tutorials/add-readme.md:167
msgid ""
@@ -881,32 +1070,39 @@ msgid ""
"that contributors and your maintainer team will follow. The development "
"guide outlines how to perform maintenance tasks such as:"
msgstr ""
+"A medida que tu paquete crezca, también podrías agregar un enlace a una guía "
+"de desarrollo que sigan las personas colaboradoras y el equipo de mantenimiento. "
+"La guía de desarrollo describe cómo realizar tareas de mantenimiento como:"
+
#: ../../tutorials/add-readme.md:170
msgid "running tests"
-msgstr ""
+msgstr "ejecutar pruebas"
#: ../../tutorials/add-readme.md:171
msgid "making package releases"
-msgstr ""
+msgstr "publicar versiones del paquete"
#: ../../tutorials/add-readme.md:172
msgid "building documentation"
-msgstr ""
+msgstr "generar documentación"
#: ../../tutorials/add-readme.md:173
msgid "and more."
-msgstr ""
+msgstr "y más."
#: ../../tutorials/add-readme.md:177
msgid "Step 8: Citation information"
-msgstr ""
+msgstr "Paso 8: Información de citación"
#: ../../tutorials/add-readme.md:179
msgid ""
"Finally it is important to let users know how to cite your package. You "
"can communicate citation information in a few different ways."
msgstr ""
+"Finalmente, es importante indicar a las personas usuarias cómo citar tu paquete. "
+"Puedes comunicar la información de citación de varias maneras."
+
#: ../../tutorials/add-readme.md:182
msgid ""
@@ -915,6 +1111,10 @@ msgid ""
"GitHub. [Check out this short tutorial that covers setting that "
"up.](https://coderefinery.github.io/github-without-command-line/doi/)"
msgstr ""
+"Puedes usar una herramienta como Zenodo para crear un DOI y la información de "
+"citación asociada a tu paquete, si está alojado en una plataforma como GitHub. "
+"Consulta este breve tutorial: https://coderefinery.github.io/github-without-command-line/doi/"
+
#: ../../tutorials/add-readme.md:186
msgid ""
@@ -924,15 +1124,24 @@ msgid ""
" in scope, you can be accepted by the Journal of Open Source Software and"
" get a cross-ref DOI through [our partnership with the Journal of Open "
"Source Software.](https://www.pyopensci.org/about-peer-review/index.html)"
+
msgstr ""
+"Alternativamente, puedes enviar tu paquete a un proceso de revisión por pares "
+"como el de pyOpenSci: https://www.pyopensci.org/about-peer-review/index.html. "
+"Después de ser aceptado por pyOpenSci, si tu paquete está dentro del alcance, "
+"puedes ser aceptado por el Journal of Open Source Software y obtener un DOI "
+"mediante su sistema de Crossref gracias a esta colaboración: "
+"https://www.pyopensci.org/about-peer-review/index.html"
+
#: ../../tutorials/add-readme.md:190
msgid "The finished README file"
-msgstr ""
+msgstr "El archivo README final"
#: ../../tutorials/add-readme.md:192
msgid "Your finished `README.md` file should look something like this:"
-msgstr ""
+msgstr "Tu archivo `README.md` final debería verse similar a esto:"
+
#: ../../tutorials/add-readme.md:242
msgid ""
@@ -943,6 +1152,11 @@ msgid ""
"this file as you further develop your package and as a community begins "
"to use your package."
msgstr ""
+"Es importante considerar qué información podría necesitar una persona usuaria "
+"o colaboradora nueva al crear tu archivo `README.md`. Aunque no existe una "
+"plantilla perfecta, lo anterior es un conjunto de recomendaciones para empezar. "
+"Es posible que necesites agregar otros elementos a este archivo a medida que tu "
+"paquete evolucione y la comunidad comience a utilizarlo."
#: ../../tutorials/add-readme.md:248
msgid ""
@@ -950,18 +1164,22 @@ msgid ""
"your Python package. A license file is critical as it tells users how "
"they legally can (and can't) use your package. It also:"
msgstr ""
+"En la [siguiente lección](add-license-coc.md), agregarás un archivo LICENSE a "
+"tu paquete de Python. Este archivo es fundamental, ya que indica a las personas "
+"usuarias cómo pueden (y no pueden) usar legalmente tu paquete. Además:"
+
#: ../../tutorials/add-readme.md:252
msgid "Builds trust with your users"
-msgstr ""
+msgstr "Genera confianza en las personas usuarias"
#: ../../tutorials/add-readme.md:253
msgid "Discourages misuse of your package and associated code"
-msgstr ""
+msgstr "Desincentiva el uso indebido de tu paquete y su código asociado"
#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:63
msgid "Command Line Reference Guide"
-msgstr ""
+msgstr "Guía de referencia de línea de comandos"
#: ../../tutorials/command-line-reference.md:9
msgid ""
@@ -971,6 +1189,12 @@ msgid ""
"installing [Hatch](get-to-know-hatch) to publishing the package on [PyPI"
"](publish-pypi) and conda-forge."
msgstr ""
+"**Qué son estas tablas:** Estas tablas resumen los comandos de línea de comandos "
+"(por ejemplo, `pipx install hatch`, `hatch build` o `python -m build`) necesarios "
+"para completar todos los pasos del proceso de creación de un paquete, desde la "
+"instalación de [Hatch](get-to-know-hatch) hasta la publicación del paquete en [PyPI"
+"](publish-pypi) y conda-forge."
+
#: ../../tutorials/command-line-reference.md:14
#, python-brace-format
@@ -979,6 +1203,10 @@ msgid ""
"non-automated steps (e.g., create a PyPI account, create a {term}`API "
"token`) you have to complete throughout the package creation process."
msgstr ""
+"**Qué no son estas tablas:** Estas tablas no cubren los pasos manuales o no "
+"automatizados (por ejemplo, crear una cuenta de PyPI, generar un {term}`token de API`) "
+"que debes completar durante el proceso de creación del paquete."
+
#: ../../tutorials/command-line-reference.md:18
msgid ""
@@ -988,22 +1216,28 @@ msgid ""
" the command, e.g., [COMMAND_DESCRIPTION] (Windows). Corresponding "
"commands for macOS and Linux will be added in the future."
msgstr ""
+"**Nota sobre el sistema operativo:** La versión actual de esta guía ha sido "
+"probada únicamente en Windows. Muchos comandos son específicos de este sistema. "
+"Los comandos específicos del sistema operativo se indican entre paréntesis después "
+"de la descripción del comando, por ejemplo, [DESCRIPCIÓN_DEL_COMANDO] (Windows). "
+"Los comandos equivalentes para macOS y Linux se agregarán en el futuro."
+
#: ../../tutorials/command-line-reference.md:21
msgid "Environment Setup"
-msgstr ""
+msgstr "Configuración del entorno"
#: ../../tutorials/command-line-reference.md:43
msgid "Package Development"
-msgstr ""
+msgstr "Desarrollo del paquete"
#: ../../tutorials/command-line-reference.md:62
msgid "Package Publishing"
-msgstr ""
+msgstr "Publicación del paquete"
#: ../../tutorials/command-line-reference.md:81
msgid "Versions and Environments"
-msgstr ""
+msgstr "Versiones y entornos"
#: ../../tutorials/create-python-package.md:7
msgid "Create a pure Python package"
@@ -1025,7 +1259,6 @@ msgstr ""
#: ../../tutorials/create-python-package.md:18
#: ../../tutorials/setup-py-to-pyproject-toml.md:23
-#, fuzzy
msgid "In this lesson, you will learn:"
msgstr "En esta lección aprenderas:"
@@ -2638,7 +2871,7 @@ msgstr ""
#: ../../tutorials/intro.md:53
msgid "Add a license & code of conduct"
-msgstr ""
+msgstr "Añadir una licencia y un código de conducta"
#: ../../tutorials/intro.md:53
msgid "Update metadata in pyproject.toml"
@@ -6319,9 +6552,8 @@ msgid ""
msgstr ""
#: ../../tutorials/trusted-publishing.md:8
-#, fuzzy
msgid "In the previous Python packaging lessons, you learned:"
-msgstr "En esta lección aprenderas:"
+msgstr "En la lección anterior sobre empaquetamiento en Python, aprendiste:"
#: ../../tutorials/trusted-publishing.md:10
msgid "[How to create a Python package](create-python-package)"
@@ -6334,9 +6566,8 @@ msgid ""
msgstr ""
#: ../../tutorials/trusted-publishing.md:16
-#, fuzzy
msgid "In this lesson, you will learn how to:"
-msgstr "En esta lección aprenderas:"
+msgstr "En esta lección aprenderas como:"
#: ../../tutorials/trusted-publishing.md:18
msgid "Automate building and publishing the package on GitHub Actions"
diff --git a/locales/it/LC_MESSAGES/CONTRIBUTING.po b/locales/it/LC_MESSAGES/CONTRIBUTING.po
new file mode 100644
index 000000000..cbcb44ae8
--- /dev/null
+++ b/locales/it/LC_MESSAGES/CONTRIBUTING.po
@@ -0,0 +1,760 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../CONTRIBUTING.md:4
+msgid "Contributing to the Python Packaging Guide"
+msgstr "Contribuire alla Python Packaging Guide"
+
+#: ../../CONTRIBUTING.md:6
+msgid "The guide is a community resource."
+msgstr "La guida è una risorsa della community."
+
+#: ../../CONTRIBUTING.md:8
+msgid "TL;DR"
+msgstr "TL;DR"
+
+#: ../../CONTRIBUTING.md:10
+msgid "We welcome contributions in the form of issues and pull requests:"
+msgstr "Sono benvenuti i contributi sotto forma di issues e pull requests:"
+
+#: ../../CONTRIBUTING.md:12
+msgid ""
+"If you have an idea for something that should be included in the guide, "
+"[please open an issue here](https://github.com/pyOpenSci/python-package-"
+"guide/issues)."
+msgstr "Se hai un'idea per qualcosa che dovrebbe essere inclusa nella guida, "
+"per favore [apri un issue qui](https://github.com/pyOpenSci/python-package-"
+"guide/issues)."
+
+#: ../../CONTRIBUTING.md:13
+msgid ""
+"If you find a typo, feel free to [submit a pull "
+"request](https://github.com/pyOpenSci/python-package-guide/pulls) to "
+"modify the text directly. Or, if you are less comfortable with pull "
+"requests, feel free to open an issue."
+msgstr "Se trovi un typo, sentiti libero di [inviare una pull "
+"request](https://github.com/pyOpenSci/python-package-guide/pulls) per "
+"modificare direttamente il testo. In alternativa, se non ti senti pronto per "
+"una pull request, puoi aprire un issue."
+
+#: ../../CONTRIBUTING.md:14
+msgid ""
+"If you are interested in helping translate the guide into other "
+"languages, take a look at the [translation guide](./TRANSLATING.md)."
+msgstr "Se sei interessato a contribuire alla traduzione della guida "
+"in altre lingue, dai un'occhiata alla nostra [guida alla traduzione](./TRANSLATING.md)."
+
+#: ../../CONTRIBUTING.md:15
+msgid ""
+"If you want to see a larger change to the content of the guide book, "
+"please submit an issue first!"
+msgstr "Se vuoi proporre un cambiamento più grande al contenuto della guida, "
+"per favore, prima apri un issue!"
+
+#: ../../CONTRIBUTING.md:17
+msgid ""
+"If you are unsure about how to contribute or are not familiar with git "
+"and github, this guide will help you through the process."
+msgstr "Se non sei sicuro di come puoi contribuire oppure non hai familiarità "
+"con git e github, questa guida ti aiuterà nel processo."
+
+#: ../../CONTRIBUTING.md:19
+msgid "How the Python Packaging Guide is structured"
+msgstr "Come è strutturata la Python Guide"
+
+#: ../../CONTRIBUTING.md:21
+msgid ""
+"The Python Packaging Guide is written in myST (a variant of MarkDown and "
+"rST) and we use **Sphinx**, a documentation engine built in `Python` to "
+"build the HTML version you see online."
+msgstr "La Python Packaging Guide è scritta in myST (una variante di MarkDown"
+"e rST) ed utilizza **Sphinx**, un generatore di documentazione scritto in Python, "
+"per costruire la versione HTML che vedi online."
+
+#: ../../CONTRIBUTING.md:23
+msgid "We use a tool called Nox to manage the process of building the guide."
+msgstr "Usiamo uno strumento chiamato Nox per gestire il processo di costruzione della guida."
+
+#: ../../CONTRIBUTING.md:25
+msgid "Two approaches to contributing"
+msgstr "I due metodi per contribuire"
+
+#: ../../CONTRIBUTING.md:27
+msgid "You can contribute to the guide using two approaches."
+msgstr "Puoi contribuire alla guida utilizzando due metodi."
+
+#: ../../CONTRIBUTING.md:29
+msgid ""
+"The first approach is using a local copy of the guide in your computer. "
+"This option requires a more involved setup, but allows you to build the "
+"guide locally to verify your contribution did not introduce any bugs "
+"before submitting a pull request. It is the recommended approach for "
+"larger contribution, like writing a whole new section."
+msgstr "Il primo metodo consiste nell'usare una copia locale della guida nel tuo computer. "
+"Questa opzione richiede un setup leggermente più complesso, ma ti permette di costruire "
+"la guida localmente per verificare che il tuo contributo non abbia introdotto alcun bug "
+"prima di inviare una pull request. Questo è l'approccio consigliato "
+"per contributi consistenti, come ad esempio la scrittura di un'intera nuova sezione."
+
+#: ../../CONTRIBUTING.md:31
+msgid ""
+"The second approach is making your contribution directly in the GitHub "
+"website. This option does not require any setup on your computer and "
+"while your contribution will still be tested when you submit a PR "
+"(continuous integration), it will take longer for you to get any feedback"
+" in case of issue. It is the best way to make small contribution, like "
+"fixing typos, or if this is your first contribution to open source and "
+"the first approach feels too intimidating."
+msgstr "Il secondo metodo consiste nel fare le tue modifiche direttamente "
+"dal sito di GitHub. Questa opzione non richiede alcun setup sul tuo computer. "
+"In questo caso, quando invii una PR (continuous integration) le tue "
+"modifiche saranno testate o verificate e ci vorrà più tempo perché tu "
+"riceva un feedback in caso di problemi. Questo è il modo migliore per "
+"dare piccoi contributi, come ad esempio correggere dei typo, oppure se "
+"è la prima volta che contribuisci all'open source e il primo metodo ti intimorisce."
+
+#: ../../CONTRIBUTING.md:33
+msgid "Forking the repository"
+msgstr "Forkare la repository"
+
+#: ../../CONTRIBUTING.md:35
+msgid ""
+"Independently of the approach you choose, the first step is to fork the "
+"Python Packaging Guide repository into your personal GitHub space. You "
+"can do this by clicking the \"Fork\" button in the top right corner of "
+"the repository page."
+msgstr "Indipendentemente dall'approccio che hai scelto, il primo step è "
+"forkare la repository della Python Packaging Guide nel tuo spazio GitHub personale. "
+"Per farlo, devi cliccare sul tasto \"Fork\" nell'angolo in alto a destra della pagina "
+"della repository."
+
+#: ../../CONTRIBUTING.md:38
+msgid ""
+"[Learn more: Fork and Clone GitHub "
+"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
+"clone/) is a good resource to learn more about forking."
+msgstr "[Learn more: Fork and Clone GitHub "
+"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
+"clone/) è una buona risorsa per saperne di più riguardo il forking."
+
+#: ../../CONTRIBUTING.md:40
+msgid "To fork a repo,"
+msgstr "Per forkare una repo,"
+
+#: ../../CONTRIBUTING.md:42
+msgid "Make sure you are logged into GitHub."
+msgstr "Assicurati di essere loggato in GitHub."
+
+#: ../../CONTRIBUTING.md:44
+msgid ""
+"Go to the repo you would like to fork, in this case the [Python Packaging"
+" Guide](https://github.com/pyopensci/python-package-guide) repo."
+msgstr "Vai alla pagina della repository che vuoi forkare, in questo caso "
+"[Python Packaging Guide](https://github.com/pyopensci/python-package-guide)."
+
+#: ../../CONTRIBUTING.md:46
+msgid ""
+"In the top right-hand corner of the page there is a 'Fork' button. Click "
+"that button. You will be brought to a new page where you will 'Create a "
+"new fork'. Feel free to keep all the default inputs and click 'Create "
+"fork'. This will create a copy of the repo at "
+"`https://github.com//python-package-guide`, where `` "
+"is your GitHub username."
+msgstr "Nell'angolo in alto a destra della pagina c'è il tasto 'Fork'. "
+"Cliccalo. Sarai indirizzato ad una nuova pagina dove dovrai cliccare "
+"'Create a new fork'. Questo creerà una copia della repository al link "
+"`https://github.com//python-package-guide`, dove `` "
+"è il tuo username GitHub."
+
+#: ../../CONTRIBUTING.md:51
+msgid "Contributing via the GitHub website"
+msgstr "Contribuire tramite il sito web di GitHub"
+
+#: ../../CONTRIBUTING.md:53
+msgid "How to edit a MarkDown file"
+msgstr "Come editare un file MarkDown"
+
+#: ../../CONTRIBUTING.md:55
+msgid ""
+"The Python Packaging Guide is written in myST, a variant of MarkDown. You"
+" can edit the files directly in the GitHub website. To do so, navigate to"
+" the file you want to edit and click the pencil icon in the top right "
+"corner of the file."
+msgstr "La Python Packaging Guide è scritta in myST, una variante di MarkDown. "
+"Puoi editare il file direttamente dal sito web di GutHub. Per farlo, naviga "
+"fino al file che vuoi editare e clicca l'icona della matita nell'angolo in "
+"alto a destra del file. "
+
+#: ../../CONTRIBUTING.md:58
+msgid "Edit button in GitHub"
+msgstr "Bottone 'Edit' in GitHub"
+
+#: ../../CONTRIBUTING.md:64
+msgid ""
+"An image showing how to edit a file in GitHub. The pencil icon is "
+"highlighted with a red rectangle."
+msgstr "L'immagine mostra come editare un file in GitHub. L'icona della matita "
+"è evidenziata dal rettangolo rosso."
+
+#: ../../CONTRIBUTING.md:66
+msgid "Edit file in GitHub"
+msgstr "Editare un file in GitHub"
+
+#: ../../CONTRIBUTING.md:72
+msgid ""
+"An image showing when a file is being edited in GitHub. The file content "
+"is displayed in a text editor."
+msgstr "L'immagine mostra un file in corso di modifica su GitHub. Il contenuto "
+"del file è mostrato in un editor di testo."
+
+#: ../../CONTRIBUTING.md:75
+msgid "To preview your changes, click the \"Preview changes\" tab."
+msgstr "Per visualizzare la preview delle tue modifiche, clicca sul tab \"Preview changes\"."
+
+#: ../../CONTRIBUTING.md:77
+msgid "Preview changes in GitHub"
+msgstr "Visualizzare la preview delle modifiche in GitHub"
+
+#: ../../CONTRIBUTING.md:83
+msgid ""
+"An image showing how to preview changes in GitHub. The file content is "
+"displayed in a text editor. The preview changes tab is highlighted with a"
+" red rectangle."
+msgstr "L'immagine mostra come visualizzare in preview le modifiche effettuate su GitHub. "
+"Il contenuto del file è mostrato in un editor di testo. Il tab di preview è evidenziato dal "
+"rettangolo rosso."
+
+#: ../../CONTRIBUTING.md:86
+msgid "How to commit your changes"
+msgstr "Come committare le tue modifiche"
+
+#: ../../CONTRIBUTING.md:88
+msgid ""
+"When you are done editing the file, scroll down to the bottom of the "
+"page. You will see a section called \"Commit changes\". Here you can "
+"write a title and a description for your changes. Make sure to write a "
+"clear and concise title that describes the changes you made."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:91
+msgid "Commit changes in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:97
+msgid ""
+"An image showing how to commit changes in GitHub. The commit message is "
+"displayed in a text editor. The commit changes section is highlighted "
+"with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:100
+msgid ""
+"After writing your commit message, click the \"Commit changes\" button to"
+" save your changes."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:102
+msgid "Contributing locally on your computer"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:104
+msgid "Clone your forked repository"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:106
+msgid ""
+"To clone your forked repository to your computer, you need to copy the "
+"URL of your forked repository and run the following command in your "
+"terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:111
+msgid ""
+"Replace `` with the URL of your forked repository. You can find the "
+"URL by clicking the green \"Code\" button on your forked repository page."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:113
+msgid "Clone repository in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:119
+msgid ""
+"An image showing how to clone a repository in GitHub. The URL of the "
+"repository is displayed in a text editor. The code button is highlighted "
+"with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:122
+msgid "Create a new branch"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:124
+msgid ""
+"Before making any changes, you should create a new branch to work on. "
+"This will help keep your changes separate from the main branch and make "
+"it easier to submit a pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:126
+msgid "To create a new branch, run the following command in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:132
+msgid "Create a virtual environment"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:134
+msgid ""
+"To build the guide locally, you need to create a virtual environment and "
+"install the dependencies. You can do this by running the following "
+"commands in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:136
+msgid "**On Windows**:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:142
+msgid "**On MacOS and Linux**:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:148
+msgid "Install the development dependencies"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:150
+msgid ""
+"To install the development dependencies, run the following command in "
+"your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:156
+msgid "Commit your changes"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:158
+msgid ""
+"After making your changes, you need to commit them to your local "
+"repository. To do this, run the following commands in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:160
+msgid "To see the changes you made:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:164
+msgid "To add the changes to the staging area:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:168
+msgid "To commit the changes:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:172
+msgid ""
+"Replace `\"Your commit message here\"` with a clear and concise message "
+"that describes the changes you made."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:174
+msgid "How to build the guide locally"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:176
+msgid ""
+"To build the guide locally, you can use the `nox` command. This will run "
+"the default `nox` session, which builds the guide and opens it in your "
+"browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:178
+msgid ""
+"To see the different sessions available, you can run the following "
+"command in your terminal:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:183
+msgid ""
+"There are different sessions in nox related to building the docs: `docs`,"
+" `docs-test`, `docs-live`. You can run them by specifying the session "
+"name after the `nox` command."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:185
+msgid "`docs`: this session builds the guide and opens it in your browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:189
+msgid ""
+"To see the guide built locally, open the file `_build/html/index.html` in"
+" your browser."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:191
+msgid "`docs-linkcheck`: this session checks that links in documentation work"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:195
+msgid ""
+"If the tests fail, you will see logs in the terminal and in "
+"`_build/linkcheck_output/output.txt`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:197
+msgid "`docs-test`: this session runs the tests for the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:201
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:203
+msgid ""
+"`docs-live`: this session builds the guide and opens it in your browser "
+"with live reloading."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:207
+msgid ""
+"open the local version of the guide in your browser at ``localhost`` "
+"shown in the terminal."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:209
+msgid "Before you submit your pull request"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:211
+msgid ""
+"Before submitting your pull request, make sure to run the tests and check"
+" the formatting of your code."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:216
+msgid ""
+"If the tests fail, you will see an error message in your terminal. You "
+"need to fix the errors before submitting your pull request. Also make "
+"sure to check the formatting of your documentation by building the docs "
+"locally and checking that your changes look correct."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:220
+msgid "Submitting a pull request with your contribution"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:222
+msgid "How to make a pull request"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:224
+msgid ""
+"To open a pull request on GitHub, navigate to the main page of your "
+"forked repository and click on the \"Pull requests\" tab."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:226
+msgid "Pull requests tab in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:232
+msgid ""
+"An image showing how to navigate to the pull requests tab in GitHub. The "
+"pull requests tab is highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:235
+msgid "Click on the \"New pull request\" button."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:237
+msgid "New pull request button in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:243
+msgid ""
+"An image showing how to create a new pull request in GitHub. The new pull"
+" request button is highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:246
+msgid ""
+"Write a clear and concise title and description for your pull request. "
+"Make sure to describe the changes you made and why they are necessary."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:248
+msgid "What happens when you submit a pull request (CI/CD)"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:250
+msgid ""
+"Once you submit a pull request, a series of checks will be run to ensure "
+"that your changes do not introduce any bugs or errors. These checks "
+"include:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:252
+msgid ""
+"**Code formatting and styles**: checks that your code is formatted "
+"correctly, by `pre-commit.ci - pr check`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:253
+msgid ""
+"**docs build**: checks that the documentation builds correctly, using "
+"`circleci`."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:255
+msgid "You will see the status of these checks in your pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:257
+msgid "Pull request checks in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:263
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks are highlighted with a red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:265
+msgid ""
+"If any of these checks fail, you will see an error message in your pull "
+"request. You need to fix the errors before your changes can be merged."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:267
+msgid "Pull request checks failed in GitHub"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:273
+msgid ""
+"An image showing the status of the checks in a pull request in GitHub. "
+"The checks are displayed in a table with a status icon next to each "
+"check. The checks that failed and the details link are highlighted with a"
+" red rectangle."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:276
+msgid ""
+"To get more information about the errors, you can click on the "
+"\"Details\" link next to the failed check."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:278
+msgid "What to expect from the review process"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:280
+msgid ""
+"Once you submit a pull request, a maintainer of the repository will "
+"review your changes and provide feedback. The review process may involve:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:282
+msgid ""
+"**Comments**: the reviewer may leave comments on your pull request to ask"
+" questions or provide feedback."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:283
+msgid ""
+"**Suggestions**: the reviewer may suggest changes to your code or "
+"documentation."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:284
+msgid ""
+"**Approvals**: once the reviewer is satisfied with your changes, they "
+"will approve the pull request."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:286
+msgid ""
+"You can make changes to your pull request by pushing new commits to the "
+"branch. The pull request will be updated automatically with your new "
+"changes."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:288
+msgid ""
+"Once your pull request is approved, it will be merged into the main "
+"branch and your changes will be included in the guide."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:290
+msgid "Additional help"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:292
+msgid "How to get help"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:294
+msgid ""
+"*__TODO__: This section should describe the options for finding more help"
+" in case beginner contributors need more help (e.g., create an issue, "
+"post in a forum, etc).*"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:296
+msgid "Additional resources"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:298
+msgid ""
+"*__TODO__: It should also include links to beginner documentation, like "
+"the GitHub docs.*"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:300
+msgid "Annex"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:302
+msgid "Code examples"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:304
+msgid ""
+"This guide uses the [literalinclude Sphinx directive](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/directives.html#directive-"
+"literalinclude) whenever possible to keep code and prose separate. Code "
+"for use in the documentation is kept in the `examples/` folder."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:308
+msgid "Referencing code in documentation"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:310
+msgid ""
+"If an example is present elsewhere in the documentation that you want to "
+"use, you can copy the `literalinclude` directive verbatim and the "
+"examples will stay in sync."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:313
+msgid ""
+"If you already see code in the examples folder that you can use for new "
+"documentation, a new `literalinclude` can be made to extract it into the "
+"site. Only a relative path to the code is required for a working "
+"`literalinclude`, but you should in almost all cases also provide a "
+"`:language:` and `:lines:`. The former makes code examples prettier, and "
+"the later can protect your example from future modifications to the code."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:318
+msgid ""
+"**Pro tip**: As an alternative to `:lines:` there are also the `:start-"
+"after:`, `:start-at:`, `:end-before:`, and `:end-at:` options. And if the"
+" example code is Python, `:pyobject:` can be an even more future-proof "
+"way to keep the same documentation content even through code refactors."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:322
+msgid ""
+"If you need example code that doesn't yet exist in `examples/` see "
+"[creating code for documentation](#creating-code-for-documentation)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:325
+msgid "Creating code for documentation"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:327
+msgid ""
+"Whenever you come across a place that could benefit from a code block, "
+"instead of writing it in-line with a code fence (`` ``` `` blocked text) "
+"you can write it as a file in its own format. Your example may even "
+"already exist; [see referencing code in documentation ](#referencing-"
+"code-in-documentation)."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:331
+msgid ""
+"If you want to add a new example that doesn't fit into any of the "
+"existing example files, you can create a new file and reference it in a "
+"`literalinclude` block. If it makes sense for that file to live within "
+"one of the existing example projects please add it there; otherwise "
+"create a new folder in the `examples` directory."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:335
+msgid ""
+"If an existing example is incomplete or a new example makes sense to be "
+"added to an existing file, go ahead and add it, but take care to not "
+"break the rest of the guide. Whenever possible, extend the example rather"
+" that rewrite it. So for instance, add new functions to the end of the "
+"file, new methods after all existing ones in a class."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:339
+msgid ""
+"Example code is checked for correctness, so adding a new example may "
+"require adding additional tests for coverage, and will require fixing any"
+" failing tests."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:342
+msgid ""
+"***⚠️ WARNING***: great care should be taken when modifying existing "
+"example code, especially any modification beyond appending to the end of "
+"the file. All code examples are (potentially) shared examples. This makes"
+" for more consistent examples in the guide but can mean action-"
+"at-a-distance when modifying the examples for one particular use case. If"
+" you find yourself modifying existing examples try running this command "
+"and then checking those pages in a new build."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:350
+msgid "Example:"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:352
+msgid "Instead of writing example code in markdown like this"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:363
+msgid "The python can be extracted into a `.py` file"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:377
+msgid ""
+"As another example, if you only need to show part of a `pyproject.toml`, "
+"we already have complete project definitions, you need only to find the "
+"relevant part."
+msgstr ""
+
+#: ../../CONTRIBUTING.md:380
+msgid "Instead of writing this"
+msgstr ""
+
+#: ../../CONTRIBUTING.md:391
+msgid "an example could be extracted from an existing toml file"
+msgstr ""
diff --git a/locales/it/LC_MESSAGES/TRANSLATING.po b/locales/it/LC_MESSAGES/TRANSLATING.po
new file mode 100644
index 000000000..ee7ed3b9c
--- /dev/null
+++ b/locales/it/LC_MESSAGES/TRANSLATING.po
@@ -0,0 +1,790 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../TRANSLATING.md:5
+msgid "Translation Guide for the Python Packaging Guide"
+msgstr ""
+
+#: ../../TRANSLATING.md:7
+msgid ""
+"This guide will help you get started contributing to the translation of "
+"the Python Packaging Guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:9
+msgid ""
+"The process of contributing to the translation of the guide is similar to"
+" the process of contributing to the guide itself, except that instead of "
+"working on the guide source files directly, you will be working on the "
+"translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:11
+msgid "Translation Status"
+msgstr ""
+
+#: ../../TRANSLATING.md:16
+msgid ""
+"The translation status graph updates every time the book is build with "
+"translations. You can see the status of the translations by going to "
+"[this link](https://www.pyopensci.org/python-package-guide/TRANSLATING)"
+msgstr ""
+
+#: ../../TRANSLATING.md:18
+msgid "Overview of the Translation Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:20
+msgid ""
+"The process of adapting software to different languages is called "
+"internationalization, or i18n for short. Internationalization makes sure "
+"that translation can happen without having to modify the source code, or "
+"in our case, the original English source files of the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:22
+msgid ""
+"Sphinx, the documentation engine we use to build the Python Package "
+"Guide, has built-in support for internationalization, so the workflow is "
+"very straightforward."
+msgstr ""
+
+#: ../../TRANSLATING.md:24
+msgid ""
+"The process of actually translating the guide into different languages is"
+" called localization, or l10n for short. This is the step you will be "
+"helping with your contribution."
+msgstr ""
+
+#: ../../TRANSLATING.md:26
+msgid "Here is a quick overview of how the translation process works:"
+msgstr ""
+
+#: ../../TRANSLATING.md:28
+msgid ""
+"The guide is originally written in English and stored in a set of "
+"MarkDown files."
+msgstr ""
+
+#: ../../TRANSLATING.md:29
+msgid ""
+"The source files are processed by Sphinx to generate a set of translation"
+" files stored in a folder for each target language."
+msgstr ""
+
+#: ../../TRANSLATING.md:30
+msgid ""
+"Contributors (like you!) translate these files into the different "
+"languages."
+msgstr ""
+
+#: ../../TRANSLATING.md:31
+msgid ""
+"When the guide is built, Sphinx creates a version of the guide in the "
+"original language (English) and the translated versions for the languages"
+" defined in the configuration."
+msgstr ""
+
+#: ../../TRANSLATING.md:34
+msgid ""
+"You don't need to understand the technical details to contribute, but if "
+"you are interested in learning how Sphinx handles internationalization "
+"and localization, you can find more information [here](https://www"
+".sphinx-doc.org/en/master/usage/advanced/intl.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:37
+msgid "Two Ways to Contribute a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:39
+msgid ""
+"There are two ways to contribute a translation, and the first one does "
+"not require you to install anything on your computer."
+msgstr ""
+
+#: ../../TRANSLATING.md:41
+msgid ""
+"**From the GitHub website.** Translation files are plain text, so you can"
+" edit them right in your browser. Fork the repository, edit a `.po` file "
+"in your fork, and open a pull request. This is the best place to start if"
+" this is your first open source contribution. The contributing guide "
+"walks through the browser workflow in [Contributing via the GitHub "
+"website](CONTRIBUTING.md#contributing-via-the-github-website). Once you "
+"have a fork, you can skip ahead to [Editing the Translation Files"
+"](#editing-the-translation-files)."
+msgstr ""
+
+#: ../../TRANSLATING.md:43
+msgid ""
+"**From a local copy on your computer.** This takes more setup, but it "
+"lets you check how much of a file is translated with `sphinx-intl stat` "
+"and preview the translated guide in your browser before you open a pull "
+"request. Choose this if you plan to translate a lot of strings or want to"
+" see your work in context."
+msgstr ""
+
+#: ../../TRANSLATING.md:45
+msgid "Setting up Your Local Environment"
+msgstr ""
+
+#: ../../TRANSLATING.md:47
+msgid "You only need this if you chose the second approach above."
+msgstr ""
+
+#: ../../TRANSLATING.md:49
+msgid ""
+"Setting up to translate is no different from setting up to contribute "
+"anything else to the guide, so rather than repeat the steps here, follow "
+"these sections of the contributing guide in order:"
+msgstr ""
+
+#: ../../TRANSLATING.md:51
+msgid "[Forking the repository](CONTRIBUTING.md#forking-the-repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:52
+msgid ""
+"[Clone your forked repository](CONTRIBUTING.md#clone-your-forked-"
+"repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:53
+msgid "[Create a new branch](CONTRIBUTING.md#create-a-new-branch)"
+msgstr ""
+
+#: ../../TRANSLATING.md:54
+msgid ""
+"[Create a virtual environment](CONTRIBUTING.md#create-a-virtual-"
+"environment), which gives the commands for both Windows and macOS/Linux"
+msgstr ""
+
+#: ../../TRANSLATING.md:55
+msgid ""
+"[Install the development dependencies](CONTRIBUTING.md#install-the-"
+"development-dependencies)"
+msgstr ""
+
+#: ../../TRANSLATING.md:58
+msgid ""
+"Installing the development dependencies is what makes `sphinx-intl` and "
+"`nox` available in your environment. Both are used later in this guide: "
+"`sphinx-intl` reports how much of each file has been translated, and "
+"`nox` builds the guide so you can preview your work."
+msgstr ""
+
+#: ../../TRANSLATING.md:61
+msgid "Starting a New Language Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:63
+msgid ""
+"If you plan to work on an existing translation, you can skip this step "
+"and go directly to the next section."
+msgstr ""
+
+#: ../../TRANSLATING.md:65 ../../TRANSLATING.md:231
+msgid "Important"
+msgstr ""
+
+#: ../../TRANSLATING.md:66
+msgid ""
+"If you would like to start the translation of the guide into a new "
+"language, start by [creating an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:69
+msgid ""
+"To generate the translation files for a new language, add the language to"
+" the `languages` list in the `conf.py` configuration file. "
+"[Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to "
+"manage the building of the guide and its translations, and it reads this "
+"list from `conf.py`."
+msgstr ""
+
+#: ../../TRANSLATING.md:71
+msgid ""
+"Inside `conf.py`, find the `languages` list and add the corresponding "
+"two-letter code. For example, if you want to start the translation of the"
+" guide into French, you would add `'fr'`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:80
+msgid ""
+"You can find a list of the two-letter Sphinx language option "
+"[here](https://www.sphinx-doc.org/en/master/usage/configuration.html"
+"#confval-language)."
+msgstr ""
+
+#: ../../TRANSLATING.md:83
+msgid "Preparing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:85
+msgid ""
+"The translation files contain the original English text and a space for "
+"you to enter the translated text. Before starting to translate, you need "
+"to make sure the translation files are up to date with the latest changes"
+" to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:87
+msgid ""
+"You can do this by running the following command, replacing LANG by the "
+"language code you plan to work on (e.g., `es` for Spanish):"
+msgstr ""
+
+#: ../../TRANSLATING.md:93
+msgid ""
+"This command will create the translation files if they don't exist yet, "
+"or update them with the latest changes if they already exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:95
+msgid ""
+"The translation files are text files with the `.po` extension stored in "
+"`./locales`, in folders corresponding to each language. For example, the "
+"translation files for Spanish are stored in the `locales/es/LC_MESSAGES` "
+"directory."
+msgstr ""
+
+#: ../../TRANSLATING.md:97
+msgid ""
+"Because the translation files map the original English text to translated"
+" text, they are sometimes referred to as \"catalog\" files or \"portable "
+"object\" files."
+msgstr ""
+
+#: ../../TRANSLATING.md:100
+msgid ""
+"You don't need to know all the details about the PO format in order to "
+"translate. If you are interested in learning more, you can find "
+"additional details in the [GNU gettext "
+"documentation](https://www.gnu.org/software/gettext/manual/html_node/PO-"
+"Files.html)."
+msgstr ""
+
+#: ../../TRANSLATING.md:103
+msgid "Working on a Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:105
+msgid ""
+"In order to start translating, go to the folder inside `./locales` "
+"corresponding to the target language you want to translate to (for "
+"example, `./locales/es/LC_MESSAGES/` for the Spanish translation)."
+msgstr ""
+
+#: ../../TRANSLATING.md:107
+msgid ""
+"In this folder you will find a set of `.po` files, corresponding to the "
+"different sections of the guide:"
+msgstr ""
+
+#: ../../TRANSLATING.md:125
+msgid ""
+"You may also see some `.mo` files in the same folder. These are compiled "
+"versions of the `.po` files create by Sphinx during the build process, "
+"and used to generate the translated version of the guide. They are "
+"intermediary files and are not meant to be edited directly or stored in "
+"the repository."
+msgstr ""
+
+#: ../../TRANSLATING.md:128
+msgid ""
+"If you are working on a new translation, choose one of the `.po` files to"
+" start with. If you are working on an existing translation, you can start"
+" with the `.po` files that need the most work."
+msgstr ""
+
+#: ../../TRANSLATING.md:130
+msgid ""
+"To see how much of each file has been translated, use the `sphinx-intl "
+"stat`. You will be able to see the number of translated, fuzzy, and "
+"untranslated strings in each `.po` file."
+msgstr ""
+
+#: ../../TRANSLATING.md:132
+msgid ""
+"For example, to see the statistics for the Spanish translation, you would"
+" run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:146
+msgid "What do these categories mean:"
+msgstr ""
+
+#: ../../TRANSLATING.md:148
+msgid ""
+"Translated strings are strings that have been translated into the target "
+"language."
+msgstr ""
+
+#: ../../TRANSLATING.md:149
+msgid ""
+"Fuzzy strings are strings that have been translated but need to be "
+"reviewed because the original English string in the guide changed."
+msgstr ""
+
+#: ../../TRANSLATING.md:150
+msgid "Untranslated strings are strings that have not been translated yet."
+msgstr ""
+
+#: ../../TRANSLATING.md:153
+msgid ""
+"When Sphinx is building the guide in another language, it will look into "
+"the corresponding folder in `./locales/` for translated strings. If the "
+"translation is available, Sphinx will replace the English text with the "
+"equivalent text in the target language. If the translation is not "
+"available, Sphinx will use the original English strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:156
+msgid "Editing the Translation Files"
+msgstr ""
+
+#: ../../TRANSLATING.md:158
+msgid ""
+"You can use any text editor to edit the `.po` file. But if you prefer, "
+"there are also tools like [Poedit](https://poedit.net/) that provide a "
+"graphic use interface."
+msgstr ""
+
+#: ../../TRANSLATING.md:160
+msgid ""
+"Depending on your editor of choice, you may be able to install a plugin "
+"or extension that can provide syntax highlighting and other features for "
+"working with `.po` files. Like for example, the "
+"[gettext](https://marketplace.visualstudio.com/items?itemName=mrorz"
+".language-gettext) extension for Visual Studio Code."
+msgstr ""
+
+#: ../../TRANSLATING.md:162
+msgid ""
+"When you open a `.po` file, you will see a series of entries that look "
+"like this:"
+msgstr ""
+
+#: ../../TRANSLATING.md:172
+msgid ""
+"The first line of an entry starts with `#:` and is a reference to the "
+"original source file and line number from which the text was extracted. "
+"This information is useful for finding the context of the text in the "
+"guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:174
+msgid ""
+"The `msgid` field contains the original English text that needs to be "
+"translated. The `msgstr` field is where you will enter the translated "
+"text. This field might contain text if someone else already translated "
+"the entry."
+msgstr ""
+
+#: ../../TRANSLATING.md:184
+msgid ""
+"Sometimes the original English text may be too long for a single line, "
+"and it may be split into multiple lines. In this case, you can keep the "
+"same structure in the translated text. Notice that both the `msgid` and "
+"`msgstr` fields in the example below start with an empty string, "
+"indicating that the text continues in the next line."
+msgstr ""
+
+#: ../../TRANSLATING.md:200
+msgid ""
+"The English text will sometimes contain Markdown formatting, such as bold"
+" or italic text. You should keep the formatting in the translated text, "
+"making sure to translate the text inside the formatting tags."
+msgstr ""
+
+#: ../../TRANSLATING.md:202
+msgid ""
+"The English text may also contain links to other sections of the guide or"
+" external resources. You should keep the links in the translated text, "
+"making sure to update the link text when appropriate."
+msgstr ""
+
+#: ../../TRANSLATING.md:210
+msgid ""
+"An entry may be marked as `fuzzy`, which means that the original English "
+"text has changed since the translation was made, and the translation may "
+"need to be revised. When this is the case you will see an additional line"
+" in the entry, starting with `#,`:"
+msgstr ""
+
+#: ../../TRANSLATING.md:227
+msgid ""
+"You can review the translation and make any necessary changes, removing "
+"the `fuzzy` tag once you are satisfied with the translation."
+msgstr ""
+
+#: ../../TRANSLATING.md:229
+msgid ""
+"You can also add comments to the translation file, by adding lines that "
+"start with a `#` character to the entry. This can be helpful to add "
+"context to the translation for other translators or reviewers to see, but"
+" this might be only necessary in special circumstances."
+msgstr ""
+
+#: ../../TRANSLATING.md:232
+msgid ""
+"When working on a translation, you **should not** modify the original "
+"English text in the `msgid` field. If you see a typo or an error in the "
+"original text, please consider fixing it in the original source file (use"
+" the first line of the entry to locate it) and submit a separate pull "
+"request."
+msgstr ""
+
+#: ../../TRANSLATING.md:235
+msgid "Building the Translated Documentation"
+msgstr ""
+
+#: ../../TRANSLATING.md:237
+msgid ""
+"Once you finished translating or when you want to check the translation "
+"in context, you can build the guide locally on your computer, using the "
+"following command, replacing LANG by the proper language code (e.g., `es`"
+" for Spanish)"
+msgstr ""
+
+#: ../../TRANSLATING.md:243
+msgid ""
+"This command builds a single translated version of the guide: the one for"
+" LANG. The result is stored in `_build/html`, in a folder named after the"
+" language code (e.g., `es`). If you want to build every language at once "
+"instead, use `nox -s build-all-languages`."
+msgstr ""
+
+#: ../../TRANSLATING.md:245
+msgid ""
+"To view the translated version of the guide in your browser, open the "
+"corresponding `index.html` file. For example, to view the Spanish "
+"translation, you would open `_build/html/es/index.html`."
+msgstr ""
+
+#: ../../TRANSLATING.md:247
+msgid ""
+"You can also build a live version of the guide that updates automatically"
+" as you make changes to the translation files. To do this, use the `nox "
+"-s docs-live-lang` command. Note that in this case you need to specify "
+"which language you want to build. For example, if you are working on the "
+"Spanish translation, you would run:"
+msgstr ""
+
+#: ../../TRANSLATING.md:253
+msgid ""
+"Note the `--` before the language code, it indicates that the following "
+"arguments should be passed into the nox session and not be interpreted "
+"directly by nox. If you forget the `--`, nox will look instead for a "
+"session named 'es' and raise an error that it does not exist."
+msgstr ""
+
+#: ../../TRANSLATING.md:255
+msgid ""
+"This command will use `sphinx-autobuild` to launch a local web server "
+"where you can access the translated version of the guide. You can open "
+"the guide in your browser by navigating to `http://localhost:8000`."
+msgstr ""
+
+#: ../../TRANSLATING.md:257
+msgid ""
+"This is a great way to see how the translated version of the guide looks "
+"as you make changes to the translation files."
+msgstr ""
+
+#: ../../TRANSLATING.md:259
+msgid "Submitting a PR for Your Contribution"
+msgstr ""
+
+#: ../../TRANSLATING.md:261
+msgid ""
+"Once you are finished translating and before you submit a pull request "
+"(PR) for your translation, you need to make sure that the translated "
+"version of the guide builds without any errors or warning and looks "
+"correctly in the browser."
+msgstr ""
+
+#: ../../TRANSLATING.md:263
+msgid "You can follow these steps:"
+msgstr ""
+
+#: ../../TRANSLATING.md:265
+msgid ""
+"Build the translations of the guide with same parameters that will be "
+"used during the release:"
+msgstr ""
+
+#: ../../TRANSLATING.md:271
+msgid ""
+"Make sure there are no warnings or errors in the output. If there are, "
+"you will need to fix them before submitting the PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:272
+msgid ""
+"Make sure the translated version of the guide looks good in the browser "
+"by opening the `_build/html//index.html` file, where `` is "
+"the language you have been working on."
+msgstr ""
+
+#: ../../TRANSLATING.md:274
+msgid "If everything looks good, you can submit a PR with your changes."
+msgstr ""
+
+#: ../../TRANSLATING.md:277
+msgid ""
+"When you submit a PR for a translation, you should only include changes "
+"to one language. If you worked in multiple languages, please submit a "
+"separate PR for each language."
+msgstr ""
+
+#: ../../TRANSLATING.md:280
+msgid ""
+"Translations PRs will be tagged with a label indicating the language to "
+"make them easier to identify and review. For example, contributions to "
+"the Spanish translation will be tagged with 'lang-es'."
+msgstr ""
+
+#: ../../TRANSLATING.md:282
+msgid "TODO: This tagging could be automated with a GitHub Actions."
+msgstr ""
+
+#: ../../TRANSLATING.md:284
+msgid ""
+"When you submit the PR, make sure to include a short description of the "
+"changes you made and any context that might be helpful for the reviewer "
+"(e.g., you translated new strings, you reviewed fuzzy entries, you fixed "
+"typos, etc.)"
+msgstr ""
+
+#: ../../TRANSLATING.md:286
+msgid "The Review Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:288
+msgid ""
+"The review process for a translation contribution is similar to the "
+"review process for any other contribution to the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:290
+msgid ""
+"TODO: This section needs more work, depending on the review workflow we "
+"decide to adopt. Other projects usually assign a coordinator/editor for "
+"each language, who is responsible for reviewing and merging translation "
+"contributions."
+msgstr ""
+
+#: ../../TRANSLATING.md:292
+msgid ""
+"Each language has an assigned editor who is responsible for reviewing and"
+" merging translation contributions. The editor will review the changes to"
+" make sure they are accurate and consistent with the style and tone of "
+"the guide."
+msgstr ""
+
+#: ../../TRANSLATING.md:294
+msgid ""
+"Sometimes the editor may ask for clarification or suggest changes to "
+"improve the translation. If this happens, you can make the requested "
+"changes and push them to the same branch where you submitted the original"
+" PR."
+msgstr ""
+
+#: ../../TRANSLATING.md:296
+msgid ""
+"When the editor is satisfied with the translation, they will merge the "
+"PR. The translated version of the guide will be available on the "
+"pyOpenSci website once the language is released."
+msgstr ""
+
+#: ../../TRANSLATING.md:298
+msgid "The Release Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:300
+msgid ""
+"If a language is ready to go live, the maintainers will add the language "
+"code to the `release_languages` list in the `conf.py` configuration file."
+msgstr ""
+
+#: ../../TRANSLATING.md:302
+msgid ""
+"When the guide is built for release in CI, Sphinx will also generate the "
+"translated versions of the guide for the languages in the "
+"`release_languages` list."
+msgstr ""
+
+#: ../../TRANSLATING.md:304
+msgid ""
+"Translations are released in the same way as the English version of the "
+"guide, and the translated versions will be available in folders named "
+"after the language code. For example, the Spanish translation will be "
+"available at: `https://www.pyopensci.org/python-package-guide/es/` when "
+"it is published online."
+msgstr ""
+
+#: ../../TRANSLATING.md:306
+msgid "Frequently Asked Questions (FAQ)"
+msgstr ""
+
+#: ../../TRANSLATING.md:308
+msgid "How do I know which strings need to be translated?"
+msgstr ""
+
+#: ../../TRANSLATING.md:310
+msgid ""
+"When you run the `sphinx-intl stat` command, you will see a list of `.po`"
+" files with the number of translated, fuzzy, and untranslated strings. "
+"You can start by working on the files with the most untranslated strings."
+msgstr ""
+
+#: ../../TRANSLATING.md:312
+msgid "What happens when a string has changed in the original English text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:314
+msgid ""
+"If a string has changed in the original English version, it will be "
+"marked as `fuzzy` in the translation file the next time it is updated "
+"(`update-language` or `update-release-languages`). Contributors working "
+"on the translation can then review the fuzzy entries and make the "
+"necessary changes to ensure it is accurate, before removing the `fuzzy` "
+"tag."
+msgstr ""
+
+#: ../../TRANSLATING.md:316
+msgid "How do I handle links in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:318
+msgid ""
+"You should keep the links in the translated text, but make sure to update"
+" the link text if necessary. For example, if the original English text "
+"contains a link to `[What is a Python package?](/tutorials/intro)`, you "
+"should keep the link in the translated text but update the link text to "
+"`[¿Que es un paquete de Python?](/tutorials/intro)`."
+msgstr ""
+
+#: ../../TRANSLATING.md:320
+msgid "How do I handle formatting in the translated text?"
+msgstr ""
+
+#: ../../TRANSLATING.md:322
+msgid ""
+"You should keep the formatting in the translated text, but make sure to "
+"translate the text inside the formatting tags as well. For example, if "
+"the original English text is `**Test special cases:**`, you should keep "
+"the bold formatting in the translated text but update the text inside the"
+" formatting tags to `**Prueba casos especiales:**`."
+msgstr ""
+
+#: ../../TRANSLATING.md:324
+msgid "How do I handle strings that are too long for a single line?"
+msgstr ""
+
+#: ../../TRANSLATING.md:326
+msgid ""
+"If the original English text is too long for a single line, it may be "
+"split into multiple lines. Multiline strings in the `.po` file are "
+"indicated by an empty string in the `msgid` and `msgstr` fields, followed"
+" by the continuation of the text in the next line. For example:"
+msgstr ""
+
+#: ../../TRANSLATING.md:339
+msgid "How do I translate images?"
+msgstr ""
+
+#: ../../TRANSLATING.md:341
+msgid ""
+"You should not translate images in the guide. Producing translated "
+"versions of images is a complex process that requires additional tools "
+"and resources, and it is not typically done unless the translated images "
+"are created alongside the original images. More often, the text around "
+"the image is modified to include any necessary translations."
+msgstr ""
+
+#: ../../TRANSLATING.md:343
+msgid ""
+"In some special cases, an image might be critical to the understanding of"
+" the content. In those cases, the translations will be handled by the "
+"maintainers and editors outside this workflow."
+msgstr ""
+
+#: ../../TRANSLATING.md:345
+msgid ""
+"I am interested in translating the guide into a language that is not "
+"listed. How can I get started?"
+msgstr ""
+
+#: ../../TRANSLATING.md:347
+msgid ""
+"If you want to start a new translation of the guide into a language that "
+"is not listed, you should [create an issue](https://github.com/pyOpenSci"
+"/python-package-guide/issues) in the repository to let the maintainers "
+"know that you intend to work on it. This will help avoid duplication of "
+"effort and ensure that the maintainers are ready to review your "
+"contribution when you are done."
+msgstr ""
+
+#: ../../TRANSLATING.md:349
+msgid "How do I know when a translation is ready to be released?"
+msgstr ""
+
+#: ../../TRANSLATING.md:351
+msgid ""
+"When a translation is ready to be included in the next release of the "
+"guide, the maintainers will add the language code to the "
+"`release_languages` list in the `conf.py` configuration file. This will "
+"trigger the build of the translation during the release process, and the "
+"translated version of the guide will be available on the pyOpenSci "
+"website."
+msgstr ""
+
+#: ../../TRANSLATING.md:353
+msgid ""
+"TODO: There are many approaches here, some projects release a translation"
+" as soon as some strings are translated, others wait until a certain "
+"percentage of the content is translated."
+msgstr ""
+
+#: ../../TRANSLATING.md:355
+msgid "How can I get help with my translation?"
+msgstr ""
+
+#: ../../TRANSLATING.md:357
+msgid ""
+"If you have any questions or need help with your translation, you can "
+"create an [issue](https://github.com/pyOpenSci/python-package-"
+"guide/issues) in the [Packaging Guide "
+"repository](https://github.com/pyOpenSci/python-package-guide)"
+msgstr ""
+
+#: ../../TRANSLATING.md:359
+msgid ""
+"You can also ask in the PyOpenSci Discord server ([click "
+"here](https://discord.gg/NQtTTqtv) to join), you will find a general "
+"channel for questions related to our workflow, processes, and tools "
+"(translation-general) and channels for each of the languages we are "
+"working on (spanish-translation, japanese-translation, etc)."
+msgstr ""
diff --git a/locales/it/LC_MESSAGES/continuous-integration.po b/locales/it/LC_MESSAGES/continuous-integration.po
new file mode 100644
index 000000000..7a1104ef8
--- /dev/null
+++ b/locales/it/LC_MESSAGES/continuous-integration.po
@@ -0,0 +1,241 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2025, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2025.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2025-01-18 13:00-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.16.0\n"
+
+#: ../../continuous-integration/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:11
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:13
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:15
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:20
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:22
+msgid ""
+"When you’re ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:25
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:26
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:27
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:29
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:31
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:32
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:34
+msgid "What is Continuous Deployment (CD)?"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:36
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:38
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:39
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:41
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:43
+msgid "Why use CI"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:45
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:47
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:49
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:52
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:55
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:57
+msgid "CI / CD platforms"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:59
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:62
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:65
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:67
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:72
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:75
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:76
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:77
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../continuous-integration/ci.md:80
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../continuous-integration/ci.md:82
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "What is CI?"
+msgstr ""
+
+#: ../../continuous-integration/index.md:5
+msgid "Continuous Integration"
+msgstr ""
+
+#: ../../continuous-integration/index.md:2
+msgid ""
+"Continuous Integration (CI) and Continuous Deployment (CD) for your "
+"Python package"
+msgstr ""
diff --git a/locales/it/LC_MESSAGES/documentation.po b/locales/it/LC_MESSAGES/documentation.po
new file mode 100644
index 000000000..a82e6d36f
--- /dev/null
+++ b/locales/it/LC_MESSAGES/documentation.po
@@ -0,0 +1,3405 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../documentation/glossary.md:7
+msgid "Python packaging glossary"
+msgstr ""
+
+#: ../../documentation/glossary.md:9
+msgid "Core packaging"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "`__init__.py`"
+msgstr ""
+
+#: ../../documentation/glossary.md:13
+msgid ""
+"A special Python file that marks a directory as a Python package. When "
+"Python sees this file, it knows the folder contains importable code. It "
+"can either be empty or contain code that runs when the package is "
+"imported."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "API token"
+msgstr ""
+
+#: ../../documentation/glossary.md:19
+msgid ""
+"A secret key used to authenticate with PyPI or TestPyPI when publishing a"
+" package. You generate one in your account settings and use it in place "
+"of a password. **Treat it like a password and never share it or commit it"
+" to version control**."
+msgstr ""
+
+#: ../../documentation/glossary.md:12
+msgid "Build backend"
+msgstr ""
+
+#: ../../documentation/glossary.md:25
+msgid ""
+"The tool that does the actual work of building your package into "
+"distribution files. In this guide, the build backend is Hatchling. You "
+"specify it in your `pyproject.toml` file under `[build-system]`."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid ""
+"You execute a build by running `hatch build`. Alternatively, you can run"
+" `python -m build`. [Reference: official Python Packaging "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend)"
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Distribution files"
+msgstr ""
+
+#: ../../documentation/glossary.md:33
+msgid ""
+"The files you upload to PyPI so others can install your package. There "
+"are two common types: a wheel (`.whl`) and a source distribution "
+"(`.tar.gz`). See also `Wheel (.whl)` and `Source distribution (sdist)`."
+msgstr ""
+
+#: ../../documentation/glossary.md:26
+msgid "Module"
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid ""
+"A single Python file (`.py`) containing code such as functions, classes, "
+"or variables that can be imported. A package is made up of one or more "
+"modules."
+msgstr ""
+
+#: ../../documentation/glossary.md:31
+msgid "`pyproject.toml`"
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid ""
+"The configuration file at the root of your Python package. Written in "
+"TOML format, it stores metadata such as name, version, authors, and "
+"license. It can also configure tools such as Hatch, uv, and pytest. See "
+"also [Make your Python package PyPI ready](../tutorials/pyproject-toml)."
+msgstr ""
+
+#: ../../documentation/glossary.md:37
+msgid "Python package"
+msgstr ""
+
+#: ../../documentation/glossary.md:50
+msgid ""
+"A directory of Python code structured so it can be installed, imported, "
+"and shared with others. A package includes at least an `__init__.py` file"
+" and a `pyproject.toml` file. This is sometimes referred to as a "
+"**regular package**."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid ""
+"Info: You may hear the term **namespaced package** which is not really a "
+"package at all but a container of subpackages. This is out of scope for "
+"this guide. If interested, consult the [Python "
+"documentation](https://docs.python.org/3/glossary.html#term-namespace-"
+"package)."
+msgstr ""
+
+#: ../../documentation/glossary.md:47
+msgid "PyPI / TestPyPI"
+msgstr ""
+
+#: ../../documentation/glossary.md:60
+msgid ""
+"PyPI (the Python Package Index) is the official repository where Python "
+"packages are published and installed from. TestPyPI is a separate "
+"practice environment used for learning and testing publishing workflows. "
+"See [pypi.org](https://pypi.org) and "
+"[test.pypi.org](https://test.pypi.org). See also [Publish your Python "
+"package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid "Source distribution (sdist)"
+msgstr ""
+
+#: ../../documentation/glossary.md:68
+msgid ""
+"One of the two distribution file types for a Python package. The sdist "
+"(`.tar.gz`) contains source code and project files. When someone installs"
+" from an sdist, tools build the package locally first. See also [Publish "
+"your Python package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:61
+msgid "TOML"
+msgstr ""
+
+#: ../../documentation/glossary.md:74
+msgid ""
+"Tom's Obvious Minimal Language, a simple format for configuration files. "
+"TOML organizes data into tables such as `[project]` or `[tool.hatch]` and"
+" arrays. `pyproject.toml` uses TOML."
+msgstr ""
+
+#: ../../documentation/glossary.md:66
+msgid "Trusted publishing"
+msgstr ""
+
+#: ../../documentation/glossary.md:79
+msgid ""
+"A secure way to publish to PyPI using GitHub Actions instead of an API "
+"token. Rather than storing a secret token, you configure PyPI to trust "
+"your repository directly. See also [Setup Trusted Publishing for secure "
+"and automated publishing via GitHub Actions](../tutorials/trusted-"
+"publishing)."
+msgstr ""
+
+#: ../../documentation/glossary.md:72
+msgid "Wheel (.whl)"
+msgstr ""
+
+#: ../../documentation/glossary.md:85
+msgid ""
+"The binary distribution type for a Python package. A wheel is a pre-built"
+" binary format (`.whl`, a ZIP file) that installs directly without a "
+"build step. For many pure Python packages, one wheel can work across "
+"platforms. See also [Publish your Python package to PyPI](../tutorials"
+"/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:92
+msgid "Tools"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "copier"
+msgstr ""
+
+#: ../../documentation/glossary.md:96
+msgid ""
+"A command-line tool for creating new projects from templates. In this "
+"guide, you can use copier with the pyOpenSci package template to set up "
+"structure, configuration, and tooling quickly. See "
+"[copier.readthedocs.io](https://copier.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "coverage.py"
+msgstr ""
+
+#: ../../documentation/glossary.md:102
+msgid ""
+"A tool that measures how much of your code is exercised by tests, often "
+"as a percentage. It shows which lines and branches are covered. See "
+"[coverage.readthedocs.io](https://coverage.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:11
+msgid "Hatch"
+msgstr ""
+
+#: ../../documentation/glossary.md:107
+msgid ""
+"A modern Python packaging and project management tool. In this guide, "
+"Hatch is used to build packages, manage environments, run scripts, and "
+"publish. Configuration lives in `pyproject.toml`. See "
+"[hatch.pypa.io](https://hatch.pypa.io). See also [Get to know "
+"Hatch](../tutorials/get-to-know-hatch)."
+msgstr ""
+
+#: ../../documentation/glossary.md:18
+msgid "Hatchling"
+msgstr ""
+
+#: ../../documentation/glossary.md:114
+msgid ""
+"The build backend used by Hatch. When you run `python -m build` or `hatch"
+" build`, Hatchling reads `pyproject.toml` and creates sdist and wheel "
+"files. See "
+"[hatch.pypa.io/latest/backend](https://hatch.pypa.io/latest/backend/)."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "pip"
+msgstr ""
+
+#: ../../documentation/glossary.md:120
+msgid ""
+"Python's default package installer. You can use it to install packages "
+"from PyPI into an environment with commands such as `pip install package-"
+"name`. See [pip.pypa.io](https://pip.pypa.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid "pytest"
+msgstr ""
+
+#: ../../documentation/glossary.md:125
+msgid ""
+"A widely used Python testing framework for discovering and running tests."
+" In this guide, pytest often runs through Hatch scripts. See "
+"[docs.pytest.org](https://docs.pytest.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:34
+msgid "Ruff"
+msgstr ""
+
+#: ../../documentation/glossary.md:130
+msgid ""
+"A fast Python linter and formatter. It checks style and can automatically"
+" fix many styling issues. See "
+"[docs.astral.sh/ruff](https://docs.astral.sh/ruff)."
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid "Sphinx"
+msgstr ""
+
+#: ../../documentation/glossary.md:135
+msgid ""
+"A documentation generator for Python projects. Sphinx reads docstrings "
+"and documentation files to build a docs site. See [sphinx-"
+"doc.org](https://www.sphinx-doc.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid "Twine"
+msgstr ""
+
+#: ../../documentation/glossary.md:140
+msgid ""
+"A tool for securely uploading distribution files to PyPI or TestPyPI. See"
+" [twine.readthedocs.io](https://twine.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:48
+msgid "uv"
+msgstr ""
+
+#: ../../documentation/glossary.md:144
+msgid ""
+"A fast Python package and environment manager. In this guide, you can use"
+" uv to manage dependencies and run commands in project environments. See "
+"[docs.astral.sh/uv](https://docs.astral.sh/uv)."
+msgstr ""
+
+#: ../../documentation/glossary.md:149
+msgid "Hatch-specific concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Hatch environment"
+msgstr ""
+
+#: ../../documentation/glossary.md:153
+msgid ""
+"An isolated Python environment managed by Hatch. You can define multiple "
+"environments in `pyproject.toml` for testing, docs, builds, and style "
+"checks, each with its own dependencies and scripts."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Script (Hatch)"
+msgstr ""
+
+#: ../../documentation/glossary.md:158
+msgid ""
+"A named command defined inside a Hatch environment in `pyproject.toml`. "
+"Scripts provide shortcuts such as `hatch run build:check` and `hatch run "
+"test:run`."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Task runner"
+msgstr ""
+
+#: ../../documentation/glossary.md:163
+msgid ""
+"A tool that automates repetitive development workflows. Hatch can "
+"function as a task runner by letting you define scripts that run in "
+"specific environments."
+msgstr ""
+
+#: ../../documentation/glossary.md:168
+msgid "Development concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code coverage"
+msgstr ""
+
+#: ../../documentation/glossary.md:172
+msgid ""
+"A measure of how much source code executes during tests, usually as a "
+"percentage. High coverage does not guarantee no bugs, but low coverage "
+"can indicate untested areas."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Dependencies"
+msgstr ""
+
+#: ../../documentation/glossary.md:177
+msgid ""
+"Other Python packages needed for your package to work. Common classes "
+"include required dependencies, optional dependencies, and development "
+"dependencies."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Docstring"
+msgstr ""
+
+#: ../../documentation/glossary.md:182
+msgid ""
+"A string at the top of a function, class, or module that describes "
+"behavior, inputs, and outputs. Docstrings can be used by tools such as "
+"Sphinx to generate API documentation."
+msgstr ""
+
+#: ../../documentation/glossary.md:15
+msgid "End-to-end test"
+msgstr ""
+
+#: ../../documentation/glossary.md:187
+msgid ""
+"A test that simulates a complete user workflow from start to finish. In "
+"scientific packages, tutorials executed during docs builds can serve as "
+"end-to-end tests."
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Integration test"
+msgstr ""
+
+#: ../../documentation/glossary.md:192
+msgid ""
+"A test that checks how multiple functions or components work together. "
+"Unlike a unit test, it verifies behavior across a broader workflow."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "Linting"
+msgstr ""
+
+#: ../../documentation/glossary.md:196
+msgid ""
+"Automatic checks for style issues, formatting problems, and potential "
+"errors in code."
+msgstr ""
+
+#: ../../documentation/glossary.md:28
+msgid "Unit test"
+msgstr ""
+
+#: ../../documentation/glossary.md:200
+msgid ""
+"A test that checks one function or method in isolation. Unit tests are "
+"fast and help pinpoint where failures occur."
+msgstr ""
+
+#: ../../documentation/glossary.md:32
+msgid "Version specifier / lower bound"
+msgstr ""
+
+#: ../../documentation/glossary.md:204
+msgid ""
+"A constraint on which dependency versions are accepted. For example, "
+"`numpy>=1.24` sets a lower bound so versions older than 1.24 are not "
+"used."
+msgstr ""
+
+#: ../../documentation/glossary.md:209
+msgid "Git / GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "git"
+msgstr ""
+
+#: ../../documentation/glossary.md:213
+msgid "A tool for version control."
+msgstr ""
+
+#: ../../documentation/glossary.md:3
+msgid "GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md:216
+msgid ""
+"A service providing accounts and organizations to facilitate sharing "
+"repositories."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "GitHub Codespace"
+msgstr ""
+
+#: ../../documentation/glossary.md:219
+msgid ""
+"A cloud-based development environment that runs in a browser. See "
+"[github.com/features/codespaces](https://github.com/features/codespaces)."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Scoped commit"
+msgstr ""
+
+#: ../../documentation/glossary.md:223
+msgid ""
+"A git commit that makes one focused change, such as one fix or one "
+"feature update. Scoped commits improve reviewability and history clarity."
+msgstr ""
+
+#: ../../documentation/glossary.md:228
+msgid "Documentation"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Code of conduct"
+msgstr ""
+
+#: ../../documentation/glossary.md:232
+msgid ""
+"A document that sets expectations for how contributors and community "
+"members treat one another in a project."
+msgstr ""
+
+#: ../../documentation/glossary.md:4
+msgid "Contributing guide"
+msgstr ""
+
+#: ../../documentation/glossary.md:236
+msgid ""
+"A document, often `CONTRIBUTING.md`, that explains how others can "
+"contribute, including setup steps, workflow, and code style."
+msgstr ""
+
+#: ../../documentation/glossary.md:8
+msgid "MyST Markdown"
+msgstr ""
+
+#: ../../documentation/glossary.md:240
+msgid ""
+"Markedly Structured Text, a Markdown flavor that supports Sphinx "
+"directives and roles. It allows Markdown-based docs while keeping Sphinx "
+"features. See [myst-parser.readthedocs.io](https://myst-"
+"parser.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:14
+msgid "README"
+msgstr ""
+
+#: ../../documentation/glossary.md:246
+msgid ""
+"The front page of your package on GitHub and often on PyPI. A good README"
+" explains purpose, installation, usage, and support options."
+msgstr ""
+
+#: ../../documentation/glossary.md:250
+msgid "AI"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Generative AI / LLM"
+msgstr ""
+
+#: ../../documentation/glossary.md:254
+msgid ""
+"Generative AI systems produce content such as text, code, or images. LLM "
+"stands for Large Language Model, the technology behind tools such as "
+"ChatGPT, GitHub Copilot, and Claude."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:1
+msgid "Tools to Build and Host your Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:3
+msgid ""
+"The most common tool for building documentation in the Python ecosystem "
+"currently is Sphinx. However, some maintainers are using tools like "
+"[mkdocs](https://www.mkdocs.org/) for documentation. It is up to you to "
+"use the platform that you prefer for your documentation!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:8
+msgid ""
+"In this section, we introduce Sphinx as a common tool to build "
+"documentation. We talk about various syntax options that you can use when"
+" writing Sphinx documentation including mySt and rST."
+msgstr ""
+
+#: ../../documentation/hosting-tools/intro.md:12
+msgid ""
+"We also talk about ways to publish your documentation online and Sphinx "
+"tools that might help you optimize your documentation website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:1
+msgid "Documentation syntax: markdown vs. myST vs. rst syntax to create your docs"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:3
+msgid "There are three commonly used syntaxes for creating Python documentation:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:4
+msgid ""
+"[markdown](https://www.markdownguide.org/): Markdown is an easy-to-learn "
+"text syntax. It is the default syntax used in Jupyter Notebooks. There "
+"are tools that you can add to a Sphinx website that allow it to render "
+"markdown as html. However, using markdown to write documentation has "
+"limitations. For instance if you want to add references, colored call out"
+" blocks and other custom elements to your documentation, you will need to"
+" use either **myST** or **rST**."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:8
+msgid ""
+"[rST (ReStructured Text):](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/basics.html). **rST** is the "
+"native syntax that sphinx supports. rST was the default syntax used for "
+"documentation for many years. However, in recent years myST has risen to "
+"the top as a favorite for documentation given the flexibility that it "
+"allows."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:9
+msgid ""
+"[myST:](https://myst-parser.readthedocs.io/en/latest/intro.html) myST is "
+"a combination of `markdown` and `rST` syntax. It is a nice option if you "
+"are comfortable writing markdown. `myst` is preferred by many because it "
+"offers both the rich functionality of rST combined with a simple-to-write"
+" markdown syntax."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:12
+msgid ""
+"While you can chose to use any of the syntaxes listed above, we suggest "
+"using `myST` because:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:15
+msgid "It is a simpler syntax and thus easier to learn;"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:16
+msgid ""
+"The above simplicity will make it easier for more people to contribute to"
+" your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:17
+msgid ""
+"Most of your core Python package text files, such as your README.md file,"
+" are already in `.md` format"
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:18
+msgid ""
+"`GitHub` and `Jupyter Notebooks` support markdown thus it's more widely "
+"used in the scientific ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/myst-markdown-rst-doc-syntax.md:22
+msgid ""
+"If you are on the fence about myST vs rst, you might find that **myST** "
+"is easier for more people to contribute to."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:1
+msgid "How to publish your Python package documentation online"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:3
+msgid ""
+"We suggest that you setup a hosting service for your Python package "
+"documentation. Two free and commonly used ways to quickly create a "
+"documentation website hosting environment are below."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:7
+msgid ""
+"You can host your documentation yourself using [GitHub "
+"Pages](https://pages.github.com/) or another online hosting service."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:8
+msgid ""
+"You can host your documentation using [Read the "
+"Docs](https://readthedocs.org/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:10
+msgid "What is Read the Docs ?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:11
+msgid ""
+"[Read the Docs](https://readthedocs.org/) is a documentation hosting "
+"service that supports publishing your project's documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:13
+msgid ""
+"Read the Docs is a fully featured, free, documentation hosting service. "
+"Some of its many features include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:16
+msgid ""
+"Is free to host your documentation (but there are also paid tiers if you "
+"wish to customize hosting)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:17
+msgid "Automates building your documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:18
+msgid ""
+"Allows you to turn on integration with pull requests where you can view "
+"documentation build progress (success vs failure)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:19
+msgid ""
+"Supports versioning of your documentation which allows users to refer to "
+"older tagged versions of the docs if they are using older versions of "
+"your package."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:20
+msgid "Supports downloading of documentation in PDF and other formats."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:21
+msgid ""
+"You can customize the documentation build using a **.readthedocs.yaml** "
+"file in your GitHub repository."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:24
+msgid "What is GitHub Pages?"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:25
+msgid ""
+"[GitHub Pages](https://docs.github.com/en/pages/getting-started-with-"
+"github-pages/what-is-github-pages) is a free web hosting service offered "
+"by GitHub. Using GitHub pages, you can build your documentation locally "
+"or using a Continuous Integration setup, and then push to a branch in "
+"your GitHub repository that is setup to run the GitHub Pages web build."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:33
+msgid "Read the Docs vs GitHub Pages"
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:35
+msgid ""
+"GitHub pages is a great option for your documentation deployment. "
+"However, you will need to do a bit more work to build and deploy your "
+"documentation if you use GitHub pages."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:39
+msgid ""
+"Read the Docs can be setup in your Read the Docs user account. The "
+"service automates the entire process of building and deploying your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/publish-documentation-online.md:42
+msgid ""
+"If you don't want to maintain a documentation website for your Python "
+"package, we suggest using the Read the Docs website."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:1
+msgid "Using Sphinx to Build Python Package Documentation"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:17
+msgid ""
+"On this page we discuss using [Sphinx](https://www.sphinx-doc.org/) to "
+"build your user-facing package documentation. While Sphinx is currently "
+"the most commonly-used tool in the scientific Python ecosystem, you are "
+"welcome to explore other tools to build documentation such as "
+"[mkdocs](https://www.mkdocs.org/) which is gaining popularity in the "
+"Python packaging ecosystem."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:25
+msgid "Examples of documentation websites that we love:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:27
+msgid "[GeoPandas](https://geopandas.org/en/stable/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:28
+msgid ""
+"[View rst to create landing "
+"page](https://raw.githubusercontent.com/geopandas/geopandas/main/doc/source/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:29
+msgid "[verde](https://www.fatiando.org/verde/latest/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:30
+msgid ""
+"[View verde landing page code - rst "
+"file.](https://github.com/fatiando/verde/blob/main/doc/index.rst)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:31
+msgid ""
+"[Here is our documentation if you want to see a myST example of a landing"
+" page.](https://github.com/pyOpenSci/python-package-"
+"guide/blob/main/index.md)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:34
+msgid "Sphinx - a static site generator"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:36
+msgid ""
+"Sphinx is a [static-site "
+"generator](https://www.cloudflare.com/learning/performance/static-site-"
+"generator/). A static site generator is a tool that creates html for a "
+"website based upon a set of templates. The html files are then served "
+"\"Statically\" which means that there is no generation or modification of"
+" the files on the fly."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:39
+msgid "Sphinx is written using Python."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:41
+msgid "Sphinx sites can be customized using extensions and themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:43
+msgid ""
+"The functionality of Sphinx can be extended using extensions and themes. "
+"A few examples include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:46
+msgid ""
+"You can apply documentation themes for quick generation of beautiful "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:47
+msgid ""
+"You can [automatically create documentation for your package's functions "
+"and classes (the package's API) from docstrings in your code using the "
+"autodoc extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/autodoc.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:48
+msgid ""
+"You can [run and test code examples in your docstrings using the doctest "
+"extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:49
+msgid ""
+"While Sphinx natively supports the `rST` syntax, you can add custom "
+"syntax parsers to support easier-to-write syntax using tools such as [the"
+" MyST parser](https://myst-parser.readthedocs.io/)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:51
+msgid "Commonly used Sphinx themes"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:53
+msgid ""
+"You are free to use whatever Sphinx theme that you prefer. However, the "
+"most common Sphinx themes used in the Python scientific community "
+"include:"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:57
+msgid "[pydata-sphinx-theme](https://pydata-sphinx-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:58
+msgid "[sphinx-book-theme](https://sphinx-book-theme.readthedocs.io/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:59
+msgid "[furo](https://pradyunsg.me/furo/quickstart/)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/sphinx-python-package-documentation-tools.md:63
+msgid "This book is created using Sphinx and the `furo` theme."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:1
+msgid "Optimizing your documentation so search engines (and other users) find it"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:3
+msgid ""
+"If you are interested in more people finding your package, you may want "
+"to add some core Sphinx extensions (and theme settings) that will help "
+"search engines such as Google find your documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:7
+msgid "Google Analytics"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:11
+msgid ""
+"Google analytics [is not compliant with the European General Data "
+"Protection Regulation (GDPR)](https://matomo.org/blog/2022/05/google-"
+"analytics-4-gdpr/). While there are many components to this regulation, "
+"one of the core elements is that you have to let users know on your site "
+"that you are collecting data and they have to consent. While it is "
+"possible to add infrastructure around Google Analytics to make it close "
+"to following GDPR regulations, the community is slowly shifting away from"
+" Google using open tools such as [Plausible](https://plausible.io/), "
+"[Cloudflare Web Analytics](https://www.cloudflare.com/web-analytics/) and"
+" [Matomo](https://matomo.org) for web analytics."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:13
+msgid ""
+"pyOpenSci is currently looking into free options for open source "
+"developers."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:16
+msgid ""
+"Some of the [sphinx themes such as the `pydata-sphinx-theme` and sphinx-"
+"book-theme have built in support for Google Analytics](https://pydata-"
+"sphinx-theme.readthedocs.io/en/latest/user_guide/analytics.html#google-"
+"analytics). However, if the theme that you chose does not offer Google "
+"Analytics support, you can use the [`sphinxcontrib-gtagjs` "
+"extension](https://github.com/attakei/sphinxcontrib-gtagjs). This "
+"extension will add a Google Analytics site tag to each page of your "
+"documentation."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:22
+msgid ""
+"[sphinx-sitemap](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/index.html) for search engine "
+"optimization"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:24
+msgid ""
+"While we are trying to move away from Google Analytics do to compliance "
+"and privacy issues, search engine optimization is still important. Google"
+" is the most popular search engine. And if your documentation is search "
+"optimized, users are more likely to find your package!"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:30
+msgid ""
+"If you are interested in optimizing your documentation for search engines"
+" such as Google, you want a **sitemap.xml** file. You can submit this "
+"sitemap to Google and it will index your entire site. This over time can "
+"make the content on your site more visible to others when they search."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:36
+msgid "This extension is lightweight."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:38
+msgid ""
+"It [requires that you to add it to your Sphinx `conf.py` extension list "
+"and site your documentation base url](https://sphinx-"
+"sitemap.readthedocs.io/en/latest/getting-started.html)."
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:40
+msgid "[sphinxext.opengraph](https://github.com/sphinx-doc/sphinxext-opengraph)"
+msgstr ""
+
+#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:42
+msgid ""
+"OpenGraph is an extension that allows you to add metadata to your "
+"documentation content pages. [The OpenGraph protocol allows other "
+"websites to provide a useful preview of the content on your page when "
+"shared](https://www.freecodecamp.org/news/what-is-open-graph-and-how-"
+"can-i-use-it-for-my-website/#heading-what-is-open-graph). This is "
+"important for when the pages in your documentation are shared on social "
+"media and even for shares on collaboration platforms like Slack and "
+"Discourse."
+msgstr ""
+
+#: ../../documentation/index.md:3
+msgid "Documentation Overview"
+msgstr ""
+
+#: ../../documentation/index.md:3 ../../documentation/index.md:10
+#: ../../documentation/index.md:21 ../../documentation/index.md:42
+msgid "Intro"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Document Your Code (API)"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Create Package Tutorials"
+msgstr ""
+
+#: ../../documentation/index.md:10
+msgid "Write User Documentation"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Contributing File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Development Guide"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Changelog File"
+msgstr ""
+
+#: ../../documentation/index.md:21
+msgid "Docs for Contributors & Maintainers"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "README file"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Code of Conduct File"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "LICENSE files"
+msgstr ""
+
+#: ../../documentation/index.md:32
+msgid "Community Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Sphinx for Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "myST vs Markdown vs rst"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publish Your Docs"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Website Hosting and Optimization"
+msgstr ""
+
+#: ../../documentation/index.md:42
+msgid "Publication tools for your docs"
+msgstr ""
+
+#: ../../documentation/index.md:1
+msgid "Documentation for your Open Source Python Package"
+msgstr ""
+
+#: ../../documentation/index.md:55
+msgid ""
+"Please note that the tools discussed here are those that we see commonly "
+"used in the community. As tools evolve we will update this guide. If you "
+"are submitting a package for pyOpenSci peer review and use other tools "
+"that are not listed in our guide to build your package you can still "
+"submit for review! The tools listed here are suggestions, not "
+"requirements. Our requirements are focused on the documentation content "
+"of your package."
+msgstr ""
+
+#: ../../documentation/index.md:65
+msgid "Documentation is critical for your Python package's success"
+msgstr ""
+
+#: ../../documentation/index.md:67
+msgid ""
+"Documentation is as important to the success of your Python open source "
+"package as the code itself."
+msgstr ""
+
+#: ../../documentation/index.md:70
+msgid ""
+"Quality code is of course valuable as its how your package gets the tasks"
+" done. However, if users don't understand how to use your package in "
+"their workflows, then they won't use it."
+msgstr ""
+
+#: ../../documentation/index.md:73
+msgid ""
+"Further, explicitly documenting how to contribute is important if you "
+"wish to build a base of contributors to your package."
+msgstr ""
+
+#: ../../documentation/index.md:76
+msgid "Two types of Python package users"
+msgstr ""
+
+#: ../../documentation/index.md:78
+msgid ""
+"The documentation that you write for your package should target two types"
+" of users:"
+msgstr ""
+
+#: ../../documentation/index.md:81
+msgid "1. Basic Tool Users"
+msgstr ""
+
+#: ../../documentation/index.md:83
+msgid ""
+"Basic tool users are the people who will use your package code in their "
+"Python workflows. They might be new(er) to Python and/or data science. Or"
+" expert programmers. But they might not have a background in software "
+"development. These users need to know:"
+msgstr ""
+
+#: ../../documentation/index.md:88
+msgid "How to install your package"
+msgstr ""
+
+#: ../../documentation/index.md:89
+msgid "How to install dependencies that your package requires"
+msgstr ""
+
+#: ../../documentation/index.md:90
+msgid "How to get started using the code base"
+msgstr ""
+
+#: ../../documentation/index.md:91
+msgid ""
+"Information on how to cite your code / give you credit if they are using "
+"it in a research application."
+msgstr ""
+
+#: ../../documentation/index.md:93
+msgid ""
+"Information on the license that your code uses so they know how they can "
+"or can't use the code in an operational setting."
+msgstr ""
+
+#: ../../documentation/index.md:96
+msgid "2. Potential tool contributors"
+msgstr ""
+
+#: ../../documentation/index.md:98
+msgid ""
+"The other subset of users are more experienced and/or more engaged with "
+"your package. As such they are potential contributors. These users:"
+msgstr ""
+
+#: ../../documentation/index.md:102
+msgid "might have a software development background,"
+msgstr ""
+
+#: ../../documentation/index.md:103
+msgid ""
+"might also be able to contribute bug fixes to your package or updates to "
+"your documentation"
+msgstr ""
+
+#: ../../documentation/index.md:104
+msgid ""
+"might also just be users who will find spelling errors in your "
+"documentation, or bugs in your tutorials."
+msgstr ""
+
+#: ../../documentation/index.md:106
+msgid ""
+"These users need all of the things that a basic user needs. But, they "
+"also need to understand how you'd like for them to contribute to your "
+"package. These potential contributors need:"
+msgstr ""
+
+#: ../../documentation/index.md:110
+msgid ""
+"A development guide to help them understand the infrastructure used in "
+"your package repository."
+msgstr ""
+
+#: ../../documentation/index.md:111
+msgid ""
+"Contributing guidelines that clarify the types of contributions that you "
+"welcome and how you'd prefer those contributions to be submitted."
+msgstr ""
+
+#: ../../documentation/index.md:114
+msgid ""
+"It's important to remember that the definition of what a contribution is "
+"can be broad. A contribution could be something as simple as a bug "
+"report. Or fixing a spelling issue in your documentation. Or it could be "
+"a code fix that includes a new test that covers an edge-case that they "
+"discovered."
+msgstr ""
+
+#: ../../documentation/index.md:120
+msgid "Documentation elements that pyOpenSci looks for reviewing a Python package"
+msgstr ""
+
+#: ../../documentation/index.md:122
+msgid ""
+"In the pyOpenSci open peer review, we look for a documentation structure "
+"that supports both your tool users and potential contributors. The files "
+"and elements that we look for specifically can be found in our peer "
+"review check list (see link below)."
+msgstr ""
+
+#: ../../documentation/index.md:127
+msgid ""
+"In this guide, we discuss each required element, and also discuss other "
+"elements that you should consider in your package's documentation in more"
+" detail."
+msgstr ""
+
+#: ../../documentation/index.md:131
+msgid "View pyOpenSci peer review check list"
+msgstr ""
+
+#: ../../documentation/index.md:138
+msgid ""
+"Image showing the files in the the MovingPandas GitHub repository. Files "
+"in the image include code of conduct.md contributing.md license.txt and "
+"readme.md."
+msgstr ""
+
+#: ../../documentation/index.md:144
+msgid ""
+"An example from the MovingPandas GitHub repository with all of the major "
+"files in it including CONTRIBUTING.md, README.md, CODE_OF_CONDUCT.md and "
+"a LICENSE.txt file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/index.md:147
+msgid "What's next in this Python package documentation section?"
+msgstr ""
+
+#: ../../documentation/index.md:149
+msgid ""
+"In this section of the pyOpenSci package guide, we will walk you through "
+"best practices for setting up documentation for your Python package. We "
+"will also suggest tools that you can use to build your user-facing "
+"documentation website."
+msgstr ""
+
+#: ../../documentation/index.md:154
+msgid "Todo"
+msgstr ""
+
+#: ../../documentation/index.md:156
+msgid ""
+"Python version support You should always be explicit about which versions"
+" of Python your package supports. Keeping compatibility with old Python "
+"versions can be difficult as functionality changes. A good rule of thumb "
+"is that the package should support, at least, the latest three Python "
+"versions (e.g., 3.8, 3.7, 3.6)."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:1
+msgid "CHANGELOG.md Guide"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:3
+msgid "Introduction"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:5
+msgid ""
+"The `CHANGELOG.md` document serves as a valuable resource for developers "
+"and users alike to track the evolution of a project over time. "
+"Understanding the structure and purpose of a changelog helps users and "
+"contributors stay informed about new features, bug fixes, and other "
+"changes introduced in each release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:7
+msgid "What is CHANGELOG.md?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:9
+msgid ""
+"The primary purpose of `CHANGELOG.md` is to provide a record of notable "
+"changes made to the project with each new release. This document helps "
+"users understand what has been added, fixed, modified, or removed with "
+"each version of the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:11
+msgid ""
+"[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) is a great, "
+"simple resource for understanding what a changelog is and how to create a"
+" good changelog. It also includes examples of things to avoid."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:13
+msgid "Versioning your Python package and semantic versioning"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:16
+msgid ""
+"An important component of a package that serves as the backbone behind "
+"the changelog file is a good versioning scheme. Semantic Versioning is "
+"widely used across Python packages."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:17
+msgid ""
+"[Creating New Versions of Your Python Package](../../package-structure-"
+"code/python-package-versions.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:18
+msgid "[Semantic Versioning](https://semver.org)"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:21
+msgid "Why is it important?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:23
+msgid ""
+"A well-maintained changelog is essential for transparent communication "
+"with users and developers. It serves as a centralized hub for documenting"
+" changes and highlights the progress made in each release. By keeping the"
+" changelog up-to-date, project maintainers can build trust with their "
+"user base and demonstrate their commitment to improving the software."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:25
+msgid "What does it include?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:27
+msgid ""
+"The contents of a `CHANGELOG.md` file typically follow a structured "
+"format, detailing the changes introduced in each release. While the exact"
+" format may vary depending on the project's conventions, some common "
+"elements found in changelogs for Python packages include:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:29
+msgid ""
+"**Versioning**: Clear identification of each release version using "
+"semantic versioning or another versioning scheme adopted by the project."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:31
+msgid ""
+"**Release Date**: The date when each version was released to the public, "
+"providing context for the timeline of changes."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:33
+msgid ""
+"**Change Categories**: Organizing changes into categories such as "
+"\"Added,\" \"Changed,\" \"Fixed,\" and \"Removed\" to facilitate "
+"navigation and understanding."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:35
+msgid ""
+"**Description of Changes**: A concise description of the changes made in "
+"each category, including new features, enhancements, bug fixes, and "
+"deprecated functionality."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:37
+msgid ""
+"**Links to Issues or Pull Requests**: References to relevant issue "
+"tracker items or pull requests associated with each change, enabling "
+"users to access more detailed information if needed."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:39
+msgid ""
+"**Upgrade Instructions**: Guidance for users on how to upgrade to the "
+"latest version, including any breaking changes or migration steps they "
+"need to be aware of."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:41
+msgid ""
+"**Contributor Recognition**: Acknowledgment of contributors who made "
+"significant contributions to the release, fostering a sense of community "
+"and appreciation for their efforts."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:43
+msgid "How do maintainers use it?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:45
+msgid "Often you will see a changelog that documents a few things:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:47
+msgid "Unreleased Section"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:49
+msgid ""
+"Unreleased commits are at the top of the changelog, commonly in an "
+"`Unreleased` section. This is where you can add new fixes, updates and "
+"features that have been added to the package since the last release."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:51
+msgid "This section might look something like this:"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:59
+msgid "Release Sections"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:61
+msgid ""
+"When you are ready to make a new release, you can move the elements into "
+"a section that is specific to that new release number."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:63
+msgid ""
+"This specific release section will sit below the unreleased section and "
+"can include any updates, additions, deprecations and contributors."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:65
+msgid ""
+"The unreleased section then always lives at the top of the file and new "
+"features continue to be added there. At the same time, after releasing a "
+"version like v1.0 all of its features remain in that specific section."
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:83
+msgid "What does it look like?"
+msgstr ""
+
+#: ../../documentation/repository-files/changelog-file.md:85
+msgid ""
+"This example comes from [Devicely](https://github.com/hpi-"
+"dhc/devicely/blob/main/CHANGELOG.md), a pyOpenSci accepted package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:3
+msgid "The CODE_OF_CONDUCT file - Python Packaging"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:5
+msgid "Example CODE_OF_CONDUCT files"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:8
+msgid ""
+"[SciPy Code of Conduct file - notice they included theirs in their "
+"documentation](https://docs.scipy.org/doc/scipy/dev/conduct/code_of_conduct.html)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:9
+msgid ""
+"[fatiando CODE_OF_CONDUCT.md "
+"file](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:12
+msgid ""
+"Your package should have a `CODE_OF_CONDUCT.md` file located the root of "
+"the repository. Once you have people using your package, you can consider"
+" the package itself as having a community around it. Some of this "
+"community uses your tool. These users may have questions or encounter "
+"challenges using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:18
+msgid ""
+"Others in the community might want to contribute to your tool. They might"
+" fix bugs, update documentation and engage with the maintainer team."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:22
+msgid "Why you need a CODE_OF_CONDUCT"
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:24
+msgid ""
+"In order to keep this community healthy and to protect yourself, your "
+"maintainer team and your users from unhealthy behavior, it is important "
+"to have a [`CODE_OF_CONDUCT`](https://opensource.guide/code-of-conduct/)."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:28
+msgid ""
+"The `CODE_OF_CONDUCT` is important as it establishes what you expect in "
+"terms of how users and contributors interact with maintainers and each "
+"other. It also establishes rules and expectations which can then be "
+"enforced if need be to protect others from harmful and/or negative "
+"behaviors."
+msgstr ""
+
+#: ../../documentation/repository-files/code-of-conduct-file.md:34
+msgid ""
+"If you are not comfortable with creating your own `CODE_OF_CONDUCT` text,"
+" we encourage you to adopt the `CODE_OF_CONDUCT` language used in the "
+"[Contributor Covenant](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/). [Many other "
+"communities](https://www.contributor-covenant.org/adopters/) have adopted"
+" this `CODE_OF_CONDUCT` as their own. See the [Fatiando a Terra "
+"Geoscience Python community's example "
+"here.](https://github.com/fatiando/community/blob/main/CODE_OF_CONDUCT.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:2
+msgid "Your Python Package CONTRIBUTING File"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:4
+msgid ""
+"The **CONTRIBUTING.md** is the landing page guide for your project's "
+"contributors. It outlines how contributors can get involved, the "
+"contribution types that you welcome, and how contributors should interact"
+" or engage with you and your maintainer team. The contributor guide "
+"should also link to get-started resources that overview how to set up "
+"development environments, what type of workflow you expect on "
+"GitHub/GitLab, and anything else that contributors might need to get "
+"started."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:6
+msgid ""
+"This file benefits maintainers and contributors. For contributors, it "
+"provides a roadmap that helps them get started and makes their first "
+"contribution easier. For maintainers, it answers commonly asked questions"
+" and reduces the burden of explaining your process to every person who "
+"wants to contribute. This document creates a more collaborative and "
+"efficient development process for everyone."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:8
+msgid "CONTRIBUTING files lower barriers to entry"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:10
+msgid ""
+"The contributing file lowers barriers to entry for new and seasoned "
+"contributors as it provides a roadmap."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:12
+msgid ""
+"**For Contributors**: It provides clear instructions on contributing, "
+"from reporting issues to submitting pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:13
+msgid ""
+"**For Maintainers**: It streamlines contributions by setting expectations"
+" and standardizing processes, reducing the time spent clarifying common "
+"questions or handling incomplete issues or pull requests."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:15
+msgid ""
+"Including a well-written CONTRIBUTING.md file in your project is one way "
+"of making it more welcoming and open to new and seasoned contributors. It"
+" also helps create a smoother workflow for everyone involved."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:17
+msgid "Make it welcoming"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:19
+msgid ""
+"Make the guide welcoming. Use accessible language to encourage "
+"participation from contributors of all experience levels. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:21
+msgid ""
+"Avoid technical jargon or explain terms when necessary (for example, "
+"\"fork the repository\")."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:22
+msgid ""
+"Include a friendly introduction, such as \"Thank you for your interest in"
+" contributing! We're excited to collaborate with you.\""
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:23
+msgid "Highlight that all contributions, no matter how small, are valued."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:25
+msgid "What a CONTRIBUTING.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:27
+msgid "Example contributing files"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:30
+msgid ""
+"[PyGMT contributing "
+"file](https://github.com/GenericMappingTools/pygmt/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:31
+msgid ""
+"[Verde's contributing "
+"file](https://github.com/fatiando/verde/blob/main/CONTRIBUTING.md)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:34
+msgid ""
+"Your Python package should include a file called **CONTRIBUTING.md** "
+"located in the root of your repository next to [your **README.md** file"
+"](readme-file)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:37
+msgid "The CONTRIBUTING.md file should include information about:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:39
+msgid "The types of contributions that you welcome"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:41
+msgid ""
+"Example: We welcome contributions of all kinds. If you want to address an"
+" existing issue, check out our issues in this repository and comment on "
+"the one that you'd like to help with. Otherwise, you can open a new "
+"issue..."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:43
+msgid ""
+"How you'd like contributions to happen. Clearly outline your contribution"
+" process. For example:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:44
+msgid "Should contributors address open issues"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:45
+msgid "Are new issues welcome?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:46
+msgid ""
+"Should contributors open a pull request (PR) directly or discuss changes "
+"first?"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:48
+msgid ""
+"Include instructions for the fork and pull request workflow and link to "
+"resources or guides explaining these steps (if available)."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:49
+msgid ""
+"Guidelines that you have in place for users submitting issues, pull "
+"requests, or asking questions."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:51
+msgid ""
+"If you have a [development guide](development-guide), link to it. This "
+"guide should provide clear instructions on how to set up your development"
+" environment locally. It also should overview CI tools that you have that"
+" could simplify the contribution process (for example, pre-[commit.ci "
+"bot](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/code-style-linting-format.html#pre-commit-ci), and so on), [linters,"
+" code formatters](https://www.pyopensci.org/python-package-guide/package-"
+"structure-code/code-style-linting-format.html#code-linting-formatting-"
+"and-styling-tools), and so on."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:53
+msgid ""
+"This guide should also include information for someone interested in "
+"asking questions. Some projects accept questions as GitHub or GitLab "
+"issues. Others use GitHub Discussions, Discourse, or even a Discord "
+"server."
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:56
+msgid "The contributing file should also include:"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:58
+msgid "A link to your [code of conduct](coc-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:59
+msgid "A link to your project's [LICENSE](license-file)"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:60
+msgid "A link to a [development guide](development-guide) if you have one"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:62
+msgid "Summary"
+msgstr ""
+
+#: ../../documentation/repository-files/contributing-file.md:64
+msgid ""
+"A well-crafted CONTRIBUTING.md file is welcome mat for your project! By "
+"providing clear instructions, helpful resources, and a welcoming tone, "
+"you make it easier for contributors to get involved and build a stronger,"
+" more collaborative community around your project."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:2
+msgid "What the development guide for your Python package should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:4
+msgid ""
+"Ideally, your package should also have a development guide. This file may"
+" live in your package documentation and should be linked to from your "
+"CONTRIBUTING.md file (discussed above). A development guide should "
+"clearly show technically proficient users how to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:8
+msgid "Set up a development environment locally to work on your package"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:9
+msgid "Run the test suite"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:10
+msgid "Build documentation locally"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:12
+msgid "The development guide should also have guidelines for:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:14
+msgid ""
+"code standards including docstring style, code format and any specific "
+"code approaches that the package follows."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:16
+msgid ""
+"It's also helpful to specify the types of tests you request if a "
+"contributor submits a new feature or a change to an existing feature that"
+" will not be covered by your existing test suite."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:18
+msgid ""
+"If you have time to document it, it's also helpful to document your "
+"maintainer workflow and release processes."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:20
+msgid "Why a development guide is important"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:22
+msgid "It's valuable to have a development guide, in the case that you wish to:"
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:25
+msgid "Onboard new maintainers."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:26
+msgid ""
+"Allow technically inclined contributors to make thoughtful and useful "
+"code based pull requests to your repository."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:28
+msgid ""
+"It also is important to pyOpenSci that the maintenance workflow is "
+"documented in the case that we need to help you onboard new maintainers "
+"in the future."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:33
+msgid ""
+"A well thought out continuous integration setup in your repository can "
+"allow users to skip building the package locally (especially if they are "
+"just updating text)."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:38
+msgid ""
+"A development guide, while strongly recommended, is not a file that "
+"pyOpenSci requires a package to have in order to be eligible for review. "
+"Some maintainers may also opt to include the development information in "
+"their contributing guide."
+msgstr ""
+
+#: ../../documentation/repository-files/development-guide.md:44
+msgid ""
+"[The Mozilla Science Lab website has a nice outline of things to consider"
+" when creating a contributing guide](https://mozillascience.github.io"
+"/working-open-workshop/contributing/)"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:1
+msgid "Documentation Files That Should be in your Python Package Repository"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:3
+msgid ""
+"In this section of the Python packaging guide, we review all of the files"
+" that you should have in your Python package repository. Your Python "
+"package should, at a minimum have the following files:"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:7
+msgid ""
+"The files mentions above (README, Code of Conduct, license file, etc) are"
+" used as a measure of package community health on many online platforms. "
+"Below, you can see an example how GitHub evaluates community health. This"
+" community health link is available for all GitHub repositories."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:13
+msgid ""
+"Image showing that the MovingPandas GitHub repository community health "
+"page with green checks next to each file including a description, README,"
+" code of conduct, contributing, license and issue templates. Note that "
+"Security policy has a yellow circle next to it as that is missing from "
+"the repo."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:19
+msgid ""
+"GitHub community health looks for a readme file among other elements when"
+" it evaluates the community level health of your repository. This example"
+" is from the [MovingPandas GitHub "
+"repo](https://github.com/movingpandas/movingpandas/community) *(screen "
+"shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:22
+msgid ""
+"[Snyk](https://snyk.io/advisor/python) is another well-known company that"
+" keeps tabs on package health. Below you can see a similar evaluation of "
+"files in the GitHub repo as a measure of community health."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:26
+msgid ""
+"Screenshot of the Snyk page for movingpandas. It shows that the "
+"repository has a README file, contributing file, code of conduct. It also"
+" shows that it has 30 contributors and no funding. The package health "
+"score is 78/100."
+msgstr ""
+
+#: ../../documentation/repository-files/intro.md:32
+msgid ""
+"Screenshot showing [SNYK](https://snyk.io/advisor/python/movingpandas) "
+"package health for moving pandas. Notice both platforms look for a README"
+" file. *(screen shot taken Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:8
+msgid "License files for Python open source software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:10
+msgid ""
+"Want to learn how to add a license file to your GitHub repository? Check "
+"out this lesson."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:17
+msgid "What is a Open Source License file?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:19
+msgid ""
+"When we talk about LICENSE files, we are referring to a file in your "
+"GitHub or GitLab repository that contains legally binding language that "
+"describes to your users how they can legally use (and not use) your "
+"package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:23
+msgid "Why licenses are important"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:25
+msgid ""
+"A license file is important for all open source projects because it "
+"protects both you as a maintainer and your users. The license file helps "
+"your users and the community understand:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:27
+msgid "How they can use your software"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:28
+msgid "Whether the software can be reused or adapted for other purposes"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:29
+msgid "How people can contribute to your project"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:31
+msgid "and more."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:33
+msgid ""
+"[Read more about why license files are critical in protecting both you as"
+" a maintainer and your users of your scientific Python open source "
+"package.](https://opensource.guide/legal/#just-give-me-the-tldr-on-what-i"
+"-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:35
+msgid "Where to store your license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:37
+msgid ""
+"Your `LICENSE` file should be stored at root of your GitHub / GitLab "
+"repository."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:39
+msgid ""
+"Some maintainers customize the language in their license files for "
+"specific reasons. However, if you are just getting started, we suggest "
+"that you select a permissive license and then use the legal language "
+"templates provided both by GitHub and/or the "
+"[choosealicense.com](https://choosealicense.com/) website."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:42
+msgid ""
+"Licenses are legally binding, as such you should avoid trying to create "
+"your own license unless you have the guidance of legal council."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:44
+msgid "Use open permissive licenses when possible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:46
+msgid ""
+"We generally suggest that you use a permissive, license that is [Open "
+"Software Initiative (OSI) approved](https://opensource.org/license). If "
+"you are [submitting your package to pyOpenSci for peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), then we "
+"require an OSI approved license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:50
+msgid "Copyleft licenses"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:51
+msgid ""
+"The other major category of licenses are [\"copyleft\" "
+"licenses](https://en.wikipedia.org/wiki/Copyleft). Copyleft licenses "
+"require people that use your work to redistribute it with the same (or "
+"greater) rights to modify, copy, share, and redistribute it. In other "
+"words, copyleft licenses prohibit someone taking your work, making a "
+"proprietary version of it, and redistributing it without providing the "
+"source code so others can do the same. Copyleft licenses are \"sticky\" "
+"in that they are designed to ensure that more free software is created."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:56
+#, python-brace-format
+msgid ""
+"The difference between copyleft and permissive licenses is an important "
+"cultural divide in free and open source software (e.g., see "
+"{footcite}`hunterReclaimingComputingCommons2016`, "
+"{footcite}`gnuprojectWhatFreeSoftware2019`, "
+"{footcite}`gnuprojectWhatCopyleft2022`). It is important to understand "
+"this difference when choosing your license. Copyleft licenses represents "
+"the \"free\" part of \"free and open source software\". Free and open "
+"source software is intrinsically political, and it is important to be "
+"aware of power dynamics in computing as well as the practical problems of"
+" license compatibility (discussed below)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:61
+msgid "How to choose a license"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:63
+msgid ""
+"To select your license, we suggest that you use GitHub's [Choose a "
+"License tool](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:66
+msgid ""
+"If you choose your license when creating a new GitHub repository, you can"
+" also automatically get a text copy of the license file to add to your "
+"repository. However in some cases the license that you want is not "
+"available through that online process."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "License recommendations from the SciPy package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:72
+msgid ""
+"[The SciPy documentation has an excellent overview of "
+"licenses.](https://docs.scipy.org/doc/scipy/dev/core-"
+"dev/index.html#licensing) One of the key elements that these docs "
+"recommend is ensuring that the license that you select is compatible with"
+" licenses used in many parts of the scientific Python ecosystem. Below is"
+" a highlight of this text which outlines license that are compatible with"
+" the modified BSD license that SciPy uses."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:78
+msgid ""
+"Other licenses that are compatible with the modified BSD license that "
+"SciPy uses are 2-clause BSD, MIT and PSF. Incompatible licenses are GPL, "
+"Apache and custom licenses that require attribution/citation or prohibit "
+"use for commercial purposes."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:80
+msgid ""
+"If your primary goal is for your code to be used by other, major packages"
+" in the scientific ecosystem, we also recommend that you consider using "
+"either BSD or MIT as your license. If you are unsure, the MIT license "
+"tends to be a simpler easier-to-understand option."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:85
+msgid ""
+"Important: make sure that you closely follow the guidelines outlines by "
+"the License that you chose"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:87
+msgid ""
+"Every license has different guidelines in terms of what code you can use "
+"in your package and also how others can (or can not) use the code in your"
+" package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:90
+msgid ""
+"If you borrow code from other tools or online sources, make sure that the"
+" license for the code that you are using also complies with the license "
+"that you selected for your package."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:94
+msgid ""
+"A useful way to think about license compatibility is the distinction "
+"between **\"inbound\"** and **\"outbound\"** compatibility. \"Inbound\" "
+"licenses are those that cover the software you plan to include in your "
+"package. Your package is protected by an \"outbound\" license."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:98
+msgid ""
+"**Permissive licenses** like BSD and MIT have few **outbound** "
+"restrictions - they can be used in any way by downstream consumers, "
+"including making them proprietary. This is why they are favored by many "
+"businesses and large packages that want to be adopted by businesses. "
+"Permissive licenses have more **inbound** restrictions - they can't use "
+"software that requires more freedoms to be preserved than they do, like "
+"copyleft licenses. A package licensed under MIT needs to take special "
+"care when including or modifying a package licensed under the GPL-3."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:103
+msgid ""
+"**Copyleft licenses** like GPL-3 have more **outbound** restrictions - "
+"they require more of packages that include, use, modify, and reproduce "
+"them. This is the purpose of copyleft licenses, to ensure that derivative"
+" works remain free and open source. They have fewer **inbound** "
+"restrictions - a GPL-3 licensed package can include any other "
+"permissively licensed and most copyleft licensed packages."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Compatible"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Dependency (\"Inbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Your Package"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Downstream Package (\"Outbound\")"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Permissive"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid ""
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:71
+msgid "Copyleft"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:118
+msgid "An example of how a license determine how code can be reused"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:121
+msgid ""
+"Let's use StackOverflow as an example that highlights how a license "
+"determines how code can or can not be used."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:123
+msgid ""
+"[Stack Overflow uses a Creative Commons Share Alike "
+"license.](https://stackoverflow.com/help/licensing). The sharealike "
+"license requires you to use the same sharealike license when you reuse "
+"any code from Stack Overflow."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:125
+#, python-brace-format
+msgid ""
+"This means that from a legal perspective, if you copy code from the Stack"
+" Overflow website and use it in your package that is licensed "
+"differently, say with a MIT license, you are violating Stack Overflow's "
+"license requirements! This would not be true with a GPL licensed package."
+" `GPL-3` packages can include code licensed by `CC-BY-SA` "
+"{footcite}`creativecommonsShareAlikeCompatibilityGPLv32015`."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:128
+msgid "🚨 Proceed with caution! 🚨"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:131
+msgid "What about software citation?"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:133
+msgid ""
+"While many permissive licenses do not require citation, we strongly "
+"encourage that you cite all software that you use in papers, blogs, and "
+"other publications. You tell your users how to cite your package by using"
+" a [citation.cff file](https://docs.github.com/en/repositories/managing-"
+"your-repositorys-settings-and-features/customizing-your-repository/about-"
+"citation-files)."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:136
+msgid ""
+"Additional resources on software citation The Turing Way has excellent "
+"guides on this topic:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:139
+msgid ""
+"[CITATION.cff files](https://book.the-turing-"
+"way.org/communication/citable/citable-cff) — detailed guide on creating "
+"and maintaining citation files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:140
+msgid ""
+"[Software citation pathways](https://book.the-turing-way.org/pathways"
+"/pathways-software-citation) — overview of how software citation works in"
+" practice"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:142
+msgid "Citation.cff files: Making your software citable"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:144
+msgid ""
+"A `CITATION.cff` file is a machine-readable file that provides citation "
+"information for your software package. The \"cff\" stands for \"Citation "
+"File Format,\" which is a standardized format for software citation "
+"metadata."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:146
+msgid "What citation.cff files add to your repository"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:148
+msgid ""
+"When you add a `CITATION.cff` file to your repository, GitHub "
+"automatically detects it and displays a \"Cite this repository\" button. "
+"This makes it easy for users to properly cite your software. The file "
+"contains standardized citation information that tools and services can "
+"automatically read and use. GitHub will generate both APA and BibTeX "
+"citation formats for users."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:150
+msgid "How dates are tracked in citation.cff files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:152
+msgid ""
+"The citation file tracks important dates for your software. The `date-"
+"released` field shows when the current version was released. The `date-"
+"published` field shows when the software was first made available. You "
+"also include a `version` field with the specific version number."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:154
+msgid ""
+"You should update these dates with each new release so people cite the "
+"correct version of your software."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:156
+msgid "Integration with Zenodo"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:158
+msgid ""
+"Citation.cff files work well with Zenodo, which is a popular place to "
+"store research software and get DOIs. When you create a Zenodo release, "
+"it can automatically pull information from your citation file. This keeps"
+" your citation information the same between GitHub and Zenodo. You can "
+"also include your Zenodo DOI in the citation file. Each time you make a "
+"new GitHub release, it can create a new Zenodo version with updated "
+"citation information."
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:161
+msgid "Here's a basic example of what a `CITATION.cff` file might look like:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:177
+msgid "References"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:3
+msgid "README File Guidelines and Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:5
+msgid ""
+"Your **README.md** file should be located in the root of your GitHub "
+"repository. The **README.md** file is important as it is often the first "
+"thing that someone sees before they install your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:9
+msgid "The README.md file is the landing page of:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:11
+msgid ""
+"Your package as it appears on a repository site such as PyPI or "
+"Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:12
+msgid "Your package's GitHub repository"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:14
+msgid ""
+"Your README.md file is also used as a measure of package and community "
+"health on sites such as:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:17
+msgid ""
+"[GitHub community health for MovingPandas (available for all "
+"repositories)](https://github.com/movingpandas/movingpandas/community) "
+"and [Snyk - MovingPandas "
+"example](https://snyk.io/advisor/python/movingpandas)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:19
+msgid ""
+"README landing page screenshot for the Pandera package. It has the "
+"Pandera logo at the top - which has two arrows in a chevron pattern "
+"pointing downward within a circle. Subtitle is statistical data testing "
+"toolkit. A data validation library for scientists, engineering, and "
+"analytics seeking correctness. Below that are a series of badges "
+"including CI tests passing, docs passing, version of Pandera on pypi "
+"(0.13.4), MIT license and that it has been pyOpenSci peer reviewed. There"
+" are numerous badges below that. Finally below the badges the text says, "
+"Pandera provides a flexible and expressive API for performing data "
+"validation on dataframe-like objects to make data processing pipelines "
+"more readable and robust."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:25
+msgid ""
+"Your GitHub repository landing page highlights the README.md file. Here "
+"you can see the README.md file for the pyOpenSci package "
+"[Pandera](https://github.com/unionai-oss/pandera). *(screen shot taken "
+"Nov 23 2022)*"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:28
+msgid ""
+"Thus, it is important that you spend some time up front creating a high "
+"quality **README.md** file for your Python package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:32
+msgid ""
+"An editor or the editor in chief will ask you to revise your README file "
+"before a review begins if it does not meet the criteria specified below."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:35
+msgid "Please go through this list before submitting your package to pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:52
+msgid "What your README.md file should contain"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:54
+msgid ""
+"Your **README.md** file should contain the following things (listed from "
+"top to bottom):"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:56
+msgid "✔️ Your package's name"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:58
+msgid ""
+"Ideally your GitHub repository's name is also the name of your package. "
+"The more self explanatory that name is, the better."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:61
+msgid ""
+"✔️ Badges for current package version, continuous integration and test "
+"coverage"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:63
+msgid ""
+"Badges are a useful way to draw attention to the quality of your project."
+" Badges assure users that your package is well-designed, tested, and "
+"maintained. They are also a useful maintenance tool to evaluate if things"
+" are building properly. A great example of this is adding a [Read the "
+"Docs status badge](https://docs.readthedocs.io/en/stable/badges.html) to "
+"your README.md file to quickly see when the build on that site fails."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:69
+msgid ""
+"It is common to provide a collection of badges towards the top of your "
+"README file for others to quickly browse."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:72
+msgid "Some badges that you might consider adding to your README file include:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:74
+msgid "Current version of the package on PyPI / Anaconda.org"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid ""
+"Example: [](https://pypi.org/project/pandera/)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:76
+msgid "PyPI version shields.io"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid ""
+"Status of tests (pass or fail) - Example: [](https://github.com"
+"/unionai-"
+"oss/pandera/actions?query=workflow%3A%22CI+Tests%22+branch%3Amain)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:78
+msgid "CI Build"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid ""
+"Documentation build - Example: "
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:80
+msgid "Docs Building"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid ""
+"DOI (for citation) Example: "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:82
+msgid "DOI"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid ""
+"Once you package is accepted to pyOpenSci, we will provide you with a "
+"badge to add to your repository that shows that it has been reviewed. "
+"[](https://github.com/pyOpenSci/software-"
+"submission/issues/12)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:85
+msgid "pyOpenSci"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:92
+msgid ""
+"Beware of the overuse of badges! There is such a thing as too much of a "
+"good thing (which can overload a potential user!)."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:95
+msgid "✔️ A short, easy-to-understand description of what your package does"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:97
+msgid ""
+"At the top of your README file you should have a short, easy-to-"
+"understand, 1-3 sentence description of what your package does. This "
+"section should clearly state your goals for the package. The language in "
+"this description should use less technical terms so that a variety of "
+"users with varying scientific (and development) backgrounds can "
+"understand it."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:103
+msgid ""
+"In this description, it's useful to let users know how your package fits "
+"within the broader scientific Python package ecosystem. If there are "
+"other similar packages or complementary package mentions them here in 1-2"
+" sentences."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:108
+msgid ""
+"Consider writing for a high school level (or equivalent) level. This "
+"level of writing is often considered an appropriate level for scientific "
+"content that serves a variety of users with varying backgrounds."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:112
+msgid ""
+"The goal of this description is to maximize accessibility of your "
+"**README** file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:116
+msgid "✔️ Installation instructions"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:118
+msgid ""
+"Include instructions for installing your package. If you have published "
+"the package on both PyPI and Anaconda.org, be sure to include "
+"instructions for both."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:121
+msgid "✔️ Document any additional setup required"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:123
+msgid ""
+"Add any additional setup required such as authentication tokens, to get "
+"started using your package. If setup is complex, consider linking to an "
+"installation page in your online documentation here rather than over "
+"complicating your README file."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:128
+msgid "✔️ Brief demonstration of how to use the package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:130
+msgid ""
+"This description ideally includes a brief, quick start code example that "
+"shows a user how to get started using your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:133
+msgid "✔️ Descriptive links to package documentation, short tutorials"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:135
+msgid "Include descriptive links to:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:137
+msgid "The package's documentation page."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:138
+msgid "Short tutorials that demonstrate application of your package."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:140
+msgid "Too Much Of A Good Thing"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:143
+msgid ""
+"Try to avoid including several tutorials in the README.md file itself. "
+"This too will overwhelm the user with information."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:145
+msgid ""
+"A short quick-start code example that shows someone how to use your "
+"package is plenty of content for the README file. All other tutorials and"
+" documentation should be presented as descriptive links."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:151
+msgid "✔️ A Community Section with Links to Contributing Guide, Code of Conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:153
+msgid "Use your README.md file to direct users to more information on:"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:155
+msgid "Contributing to your package"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:156
+msgid "Development setup for more advanced technical contributors"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:157
+msgid "Your code of conduct"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:158
+msgid "Licensing information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:160
+msgid ""
+"All of the above files are important for building community around your "
+"project."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:163
+msgid "✔️ Citation information"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:165
+msgid ""
+"Finally be sure to include instructions on how to cite your package. "
+"Citation should include the DOI that you want used when citing your "
+"package, and any language that you'd like to see associated with the "
+"citation."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:169
+msgid "README Resources"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:173
+msgid ""
+"Below are some resources on creating great README.md files that you might"
+" find helpful."
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:176
+msgid ""
+"[How to Write a Great README - Bane "
+"Sullivan](https://github.com/banesullivan/README)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:177
+msgid ""
+"[Art of README - Kira (@hackergrrl)](https://github.com/hackergrrl/art-"
+"of-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+#, python-format
+msgid ""
+"[Standard Readme - Richard Littauer](https://github.com/RichardLitt"
+"/standard-readme) [](https://github.com/RichardLitt/standard-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+msgid "standard-readme compliant"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:179
+msgid ""
+"[Standard Readme pre-commit hooks](https://github.com/tkoyama010"
+"/standard-readme-pre-commit)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:1
+msgid "Create tutorials in your Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:6
+msgid ""
+"Your package should have tutorials that make it easy for a user to get "
+"started using your package. Ideally, those tutorials also can be run from"
+" start to finish providing a second set of checks (on top of your test "
+"suite) to your package's code base."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:11
+msgid ""
+"On this page, we review two Sphinx extensions (`sphinx-gallery` and "
+"`nbsphinx`) that allow you to create reproducible tutorials that are run"
+" when your Sphinx documentation builds."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:15
+msgid "Create Python package tutorials that run when you build your docs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:17
+msgid ""
+"Adding well constructed tutorials to your package will make it easier for"
+" someone new to begin using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:20
+msgid ""
+"There are two Sphinx tools that make it easy to add tutorials to your "
+"package:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:22
+msgid "[Sphinx Gallery](https://sphinx-gallery.github.io/stable/index.html) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:23
+msgid "[NbSphinx](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:25
+msgid "Both of these tools act as Sphinx extensions and:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:27
+msgid ""
+"Support creating a gallery type page in your Sphinx documentation where "
+"users can explore tutorials via thumbnails."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:28
+msgid ""
+"Run the code in your tutorials adding another level of \"testing\" for "
+"your package as used."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:29
+msgid "Render your tutorials with Python code and plot outputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:31
+msgid "[sphinx gallery:](https://sphinx-gallery.github.io/stable/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:33
+msgid ""
+"If you prefer to write your tutorials using Python **.py** scripts, you "
+"may enjoy using Sphinx gallery. Sphinx gallery uses **.py** files with "
+"text and code sections that mimic the Jupyter Notebook format. When you "
+"build your documentation, the gallery extension:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:38
+msgid ""
+"Runs the code in each tutorial. Running your tutorial like this acts as a"
+" check to ensure your package's functions, classes, methods, and "
+"attributes (ie the API) are working as they should."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:39
+msgid ""
+"Creates a downloadable Jupyter Notebook **.ipynb** file and a **.py** "
+"script for your tutorial that a user can quickly download and run."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:40
+msgid ""
+"Creates a rendered **.html** page with the code elements and code "
+"outputs in a user-friendly tutorial gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:41
+msgid ""
+"Creates a gallery landing page with visual thumbnails for each tutorial "
+"that you create."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:44
+msgid ""
+"Image showing the gallery output provided by sphinx-gallery where each "
+"tutorial is in a grid and the tutorial thumbnails are created from a "
+"graphic in the tutorial."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:50
+msgid ""
+"`sphinx-gallery` makes it easy to create a user-friendly tutorial "
+"gallery. Each tutorial has a download link where the user can download a "
+"**.py** file or a Jupyter Notebook. And it renders the tutorials in a "
+"user-friendly grid."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:54
+msgid "Below you can see what a tutorial looks like created with sphinx-gallery."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:56
+msgid ""
+"Image showing ta single tutorial from Sphinx gallery. The tutorial shows "
+"a simple matplotlib created plot and associated code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:62
+msgid ""
+"`sphinx-gallery` tutorials by default include download links for both the"
+" python script (**.py** file) and a Jupyter notebook (**.ipynb** file) at"
+" the bottom."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:66
+msgid "Sphinx Gallery benefits"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:67
+msgid "easy-to-download notebook and .py outputs for each tutorials."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:68
+msgid ".py files are easy to work with in the GitHub pull request environment."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:69
+msgid "Nice gridded gallery output."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:70
+msgid ""
+"Build execution time data per tutorial. [Example](https://sphinx-"
+"gallery.github.io/stable/auto_examples/sg_execution_times.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:72
+msgid "Sphinx gallery challenges"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:74
+msgid "The downsides of using Sphinx gallery include:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:76
+msgid ""
+"the **.py** files can be finicky to configure, particularly if you have "
+"matplotlib plot outputs."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:78
+msgid ""
+"For example: To allow for plots to render, you need to name each file "
+"with `plot_` at the beginning."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:81
+msgid ""
+"Many users these days are used to working in Jupyter Notebooks. .py may "
+"be slightly less user friendly to work with"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:83
+msgid ""
+"These nuances can make it challenging for potential contributors to add "
+"tutorials to your package. This can also present maintenance challenge."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:86
+msgid "Add about the gallery setup:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:93
+msgid "File directory structure:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:114
+msgid ""
+"[nbsphinx - tutorials using Jupyter "
+"Notebooks](https://nbsphinx.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:116
+msgid ""
+"If you prefer to use Jupyter Notebooks to create tutorials you can use "
+"nbsphinx. nbsphinx operates similarly to Sphinx gallery in that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:119
+msgid "It runs your notebooks and produces outputs in the rendered tutorials"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:121
+msgid ""
+"Pro/con By default it does not support downloading of **.py** and "
+"**.ipynb** files. However you can add a [link to the notebook at the top "
+"of the page with some additional conf.py settings (see: epilog "
+"settings)](https://nbsphinx.readthedocs.io/en/0.8.10/prolog-and-"
+"epilog.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:125
+msgid ""
+"Image showing the gallery output provided by nbsphinx using the sphinx-"
+"gallery front end interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/create-package-tutorials.md:131
+msgid ""
+"`nbsphinx` can be combined with Sphinx gallery to create a gallery of "
+"tutorials. However, rather than rendering the gallery as a grid, it lists"
+" all of the gallery elements in a single column."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:2
+msgid "Document the code in your package's API using docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:4
+msgid "What is an API?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:6
+msgid ""
+"API stands for **A**pplied **P**rogramming **I**nterface. When discussed "
+"in the context of a (Python) package, the API refers to the functions, "
+"classes, methods, and attributes that a package maintainer creates for "
+"users."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:10
+msgid ""
+"A simple example of a package API element: For instance, a package might "
+"have a function called `add_numbers()` that adds up a bunch of numbers. "
+"To add up numbers, you as the user simply call `add_numbers(1,2,3)` and "
+"the package function calculates the value and returns `6`. By calling the"
+" `add_numbers` function, you are using the package's API."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:16
+msgid ""
+"Package APIs consist of functions, classes, methods and attributes that "
+"create a user interface."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:18
+msgid "What is a docstring and how does it relate to documentation?"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:20
+msgid ""
+"In Python, a docstring refers to text in a function, method or class that"
+" describes what the function does and its inputs and outputs. Python "
+"programmers usually refer to the inputs to functions as "
+"[\"parameters\"](https://docs.python.org/3/glossary.html#term-parameter) "
+"or [\"arguments\"](https://docs.python.org/3/faq/programming.html#faq-"
+"argument-vs-parameter), and the outputs are often called \"return "
+"values\""
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:23
+msgid "The docstring is thus important for:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:25
+msgid ""
+"When you call `help()` in Python, for example, `help(add_numbers)` will "
+"show the text of the function's docstring. The docstring thus helps a "
+"user better understand how to apply the function more effectively to "
+"their workflow."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:26
+msgid ""
+"When you build your package's documentation, the docstrings can also be "
+"used to automatically create full API documentation that provides a clean"
+" view of all its functions, classes, methods, and attributes."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:29
+msgid ""
+"Example API Documentation for all functions, classes, methods, and "
+"attributes in a package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:30
+msgid ""
+"[View example high-level API documentation for the Verde package. This "
+"page lists every function and class in the package along with a brief "
+"explanation of what it "
+"does](https://www.fatiando.org/verde/latest/api/index.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:31
+msgid ""
+"[You can further dig down to see what a specific function does within the"
+" package by clicking on an API "
+"element](https://www.fatiando.org/verde/latest/api/generated/verde.grid_coordinates.html#verde.grid_coordinates)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:34
+msgid "Python package API documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:36
+msgid ""
+"If you have a descriptive docstring for every user-facing class, method, "
+"attribute and/or function in your package (_within reason_), then your "
+"package's API is considered well-documented."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:39
+msgid ""
+"In Python, this means that you need to add a docstring for every user-"
+"facing class, method, attribute and/or function in your package (_within "
+"reason_) that:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:43
+msgid "Explains what the function, method, attribute, or class does"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:44
+msgid "Defines the `type` inputs and outputs (ie. `string`, `int`, `np.array`)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:45
+msgid "Explains the expected output `return` of the object, method or function."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:48
+msgid "Three Python docstring formats and why we like NumPy style"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:50
+msgid ""
+"There are several Python docstring formats that you can choose to use "
+"when documenting your package including:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:53
+msgid ""
+"[NumPy-style](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:54
+msgid ""
+"[google style](https://sphinxcontrib-"
+"napoleon.readthedocs.io/en/latest/example_google.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:55
+msgid ""
+"[reST style](https://sphinx-rtd-"
+"tutorial.readthedocs.io/en/latest/docstrings.html)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:59
+msgid ""
+"We suggest using [NumPy-style "
+"docstrings](https://numpydoc.readthedocs.io/en/latest/format.html"
+"#docstring-standard) for your Python documentation because:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:62
+msgid ""
+"NumPy style docstrings are core to the scientific Python ecosystem and "
+"defined in the [NumPy style "
+"guide](https://numpydoc.readthedocs.io/en/latest/format.html). Thus you "
+"will find them widely used there."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:63
+msgid ""
+"The Numpy style docstring is simplified and thus easier to read both in "
+"the code and when calling `help()` in Python. In contrast, some feel that"
+" reST style docstrings are harder to quickly scan, and can take up more "
+"lines of code in modules."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:66
+msgid ""
+"If you are using NumPy style docstrings, be sure to include the [sphinx "
+"napoleon extension](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/napoleon.html) in your documentation "
+"`conf.py` file. This extension allows Sphinx to properly read and format "
+"NumPy format docstrings."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:71
+msgid "Docstring examples Better and Best"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:73
+msgid ""
+"Below is a good example of a well-documented function. Notice that this "
+"function's docstring describes the function's inputs and the function's "
+"output (or return value). The initial description of the function is "
+"short (one line). Following that single-line description, there is a "
+"slightly longer description of what the function does (2 to 3 sentences)."
+" The return of the function is also specified."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:107
+msgid "Best: a docstring with example use of the function"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:109
+msgid ""
+"This example contains an example of using the function that is also "
+"tested in sphinx using "
+"[doctest](https://docs.python.org/3/library/doctest.html)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:160
+msgid ""
+"Using the above NumPy format docstring in sphinx, the autodoc extension "
+"will create the about documentation section for the `extent_to_json` "
+"function. The output of the `es.extent_to_json(rmnp)` command can even be"
+" tested using doctest adding another quality check to your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:166
+msgid ""
+"Using doctest to run docstring examples in your package's methods and "
+"functions"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:171
+msgid ""
+"Above, we provided some examples of good, better, best docstring formats."
+" If you are using Sphinx to create your docs, you can add the "
+"[doctest](https://www.sphinx-"
+"doc.org/en/master/usage/extensions/doctest.html) extension to your Sphinx"
+" build. Doctest provides an additional check for docstrings with example "
+"code in them. Doctest runs the example code in your docstring `Examples` "
+"checking that the expected output is correct. Similar to running "
+"tutorials in your documentation, `doctest` can be a useful step that "
+"assures that your package's code (API) runs as you expect it to."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:178
+msgid ""
+"It's important to keep in mind that examples in your docstrings help "
+"users using your package. Running `doctest` on those examples provides a "
+"check of your package's API. The doctest ensures that the functions and "
+"methods in your package run as you expect them to. Neither of these items"
+" replace a separate, stand-alone test suite that is designed to test your"
+" package's core functionality across operating systems and Python "
+"versions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:186
+msgid ""
+"Below is an example of a docstring with an example. doctest will run the "
+"example below and test that if you provide `add_me` with the values 1 and"
+" 3 it will return 4."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:219
+msgid "Adding type hints to your docstrings"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:221
+msgid ""
+"In the example above, you saw the use of numpy-style docstrings to "
+"describe data types that are passed into functions as parameters or into "
+"classes as attributes. In a numpy-style docstring you add those types in "
+"the Parameters section of the docstring. Below you can see that the "
+"parameter `num1` and `num2` should both be a Python `int` (integer) "
+"value."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:236
+msgid ""
+"Describing the expected data type that a function or method requires "
+"helps users better understand how to call a function or method."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:239
+msgid ""
+"Type-hints add another layer of type documentation to your code. Type-"
+"hints make it easier for new developers, your future self or contributors"
+" to get to know your code base quickly."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:243
+msgid ""
+"Type hints are added to the definition of your function. In the example "
+"below, the parameters aNum and aNum2 are defined as being type = int "
+"(integer)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:250
+msgid ""
+"You can further describe the expected function output using `->`. Below "
+"the output of the function is also an int."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:258
+msgid "Why use type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:260
+msgid "Type hints:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:262
+msgid "Make development and debugging faster,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:263
+msgid ""
+"Make it easier for a user to see the data format inputs and outputs of "
+"methods and functions,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:264
+msgid ""
+"Support using static type checking tools such as [`mypy`](https://mypy-"
+"lang.org/) which will check your code to ensure types are correct."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:266
+msgid "You should consider adding type hinting to your code if:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:268
+msgid "Your package performs data processing,"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:269
+msgid "You use functions that require complex inputs"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:270
+msgid ""
+"You want to lower the entrance barrier for new contributors to help you "
+"with your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:272
+msgid "Beware of too much type hinting"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:275
+msgid "As you add type hints to your code consider that in some cases:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:277
+msgid ""
+"If you have a complex code base, type hints may make code more difficult "
+"to read. This is especially true when a parameter’s input takes multiple "
+"data types and you list each one."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:278
+msgid ""
+"Writing type hints for simple scripts and functions that perform obvious "
+"operations don't make sense."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:281
+msgid "Gradually adding type hints"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:283
+msgid ""
+"Adding type hints can take a lot of time. However, you can add type hints"
+" incrementally as you work on your code."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/document-your-code-api-docstrings.md:287
+msgid ""
+"Adding type hints is also a great task for new contributors. It will help"
+" them get to know your package's code and structure better before digging"
+" into more complex contributions."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:1
+msgid "Create User Facing Documentation for your Python Package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:14
+msgid "Core components of user-facing Python package documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:15
+msgid "Below we break documentation into two broad types."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:17
+msgid ""
+"**User-facing documentation** refers to documentation that describes the "
+"way the tools within a package are broadly used in workflows. **API "
+"documentation** refers to documentation of functions, classes, methods, "
+"and attributes in your code and is written at a more granular level. This"
+" documentation is what a user sees when they type `help(function-name)`."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:23
+msgid ""
+"Your user-facing documentation for your Python package should include "
+"several core components."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:26
+msgid ""
+"**Documentation Website:** This refers to easy-to-read documentation that"
+" helps someone use your package. This documentation should help users "
+"both install and use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:27
+msgid ""
+"**Short Tutorials:** Your user-facing documentation should also include "
+"[**short tutorials** that showcase core features of your package](create-"
+"package-tutorials)."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:28
+msgid ""
+"**Package Code / API documentation:** You package's functions, classes, "
+"methods, and attributes (the API) should also be documented. API "
+"documentation can be generated from "
+"[docstrings](https://pandas.pydata.org/docs/development/contributing_docstring.html)"
+" found in your code. Ideally, you have docstrings for all user-facing "
+"functions, classes, and methods in your Python package. [We discuss code "
+"documentation and docstrings in greater detail here.](document-your-code-"
+"api-docstrings)"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:32
+msgid "Write usable documentation"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:34
+msgid ""
+"User-facing documentation should be published on a easy-to-navigate "
+"website. The documentation should be written keeping in mind that users "
+"may not be developers or expert-level programmers. Rather, the language "
+"that you use in your documentation should not be highly technical."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:39
+msgid ""
+"To make the language of your documentation more accessible to a broader "
+"audience:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:42
+msgid "Whenever possible, define technical terms and jargon."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:43
+msgid "Consider writing instructions for a high-school level reader."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:44
+msgid ""
+"Include step-by-step code examples, tutorials or vignettes that support "
+"getting started using your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:46
+msgid "Four elements of a good open source documentation landing page"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:48
+msgid ""
+"To make it easy for users to find what they need quickly, consider adding"
+" quick links on your package's landing page to the following elements:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:52
+msgid ""
+"**Getting started:** This section should provide the user with a quick "
+"start for installing your package. A small example of how to use the "
+"package is good to have here as well. Or you can link to useful tutorials"
+" in the get started section."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:53
+msgid ""
+"**About:** Describe your project, stating its goals and its "
+"functionality."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:54
+msgid ""
+"**Community:** Instructions for how to help and/or get involved. This "
+"might include links to your issues (if that is where you let users ask "
+"questions) or the discussion part of your GitHub repo. This section might"
+" include a development guide for those who might contribute to your "
+"package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:55
+msgid ""
+"**API Documentation:** This is the detailed project documentation. Here "
+"you store documentation for your package's API including all user-facing "
+"functions, classes, methods, and attributes as well as any additional "
+"high level discussion that will help people use your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:58
+msgid ""
+"Image showing the landing page for GeoPandas documentation which has 4 "
+"sections including Getting started, Documentation, About GeoPandas, "
+"Community."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:64
+msgid ""
+"The documentation landing page of GeoPandas, a spatial Python library, "
+"has the 4 element specified above. Notice that the landing page is simple"
+" and directs users to each element using a Sphinx card."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:67
+msgid ""
+"NOTE: in many cases you can include your **README** file and your "
+"**CONTRIBUTING** files in your documentation given those files may have "
+"some of the components listed above."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/get-started.md:71
+msgid ""
+"You can include files in Sphinx using the include directive. Below is an "
+"example of doing this using `myst` syntax."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:1
+msgid "Writing user-facing documentation for your Python package"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:3
+msgid ""
+"This section walks you through best practices for with writing "
+"documentation for your Python package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:6
+msgid ""
+"We talk about the elements that you should consider adding to your "
+"documentation, the different types of users who might read your "
+"documentation and how to create tutorials for your package."
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:10
+msgid ""
+"Here we also cover sphinx extensions that you can user to make "
+"documentation easier such as:"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:13
+msgid ""
+"autodoc to automagically populate documentation for your code's "
+"functions, classes, methods and attributes (API documentation) and"
+msgstr ""
+
+#: ../../documentation/write-user-documentation/intro.md:15
+msgid "sphinx gallery for tutorials."
+msgstr ""
diff --git a/locales/it/LC_MESSAGES/index.po b/locales/it/LC_MESSAGES/index.po
new file mode 100644
index 000000000..0915f9831
--- /dev/null
+++ b/locales/it/LC_MESSAGES/index.po
@@ -0,0 +1,595 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../index.md:257
+msgid "Tutorials"
+msgstr "Tutorial"
+
+#: ../../index.md:264
+msgid "Packaging"
+msgstr "Packaging"
+
+#: ../../index.md:135 ../../index.md:272
+msgid "Documentation"
+msgstr "Documentazione"
+
+#: ../../index.md:175 ../../index.md:280
+msgid "Tests"
+msgstr "Test"
+
+#: ../../index.md:280
+msgid "Testing"
+msgstr "Esecuzione dei test"
+
+#: ../../index.md:288
+msgid "Maintain"
+msgstr "Manutenzione"
+
+#: ../../index.md:288
+msgid "Continuous Integration"
+msgstr "Integrazione continua"
+
+#: ../../index.md:296
+msgid "Glossary"
+msgstr "Glossario"
+
+#: ../../index.md:296
+msgid "Reference"
+msgstr "Riferimento"
+
+#: ../../index.md:1
+msgid "pyOpenSci Python Package Guide"
+msgstr "Guida ai Python package di pyOpenSci"
+
+#: ../../index.md:3
+msgid ""
+"We support the Python tools that scientists need to create open science "
+"workflows."
+msgstr ""
+"Supportiamo gli strumenti Python di cui gli scienziati hanno bisogno per "
+"creare flussi di lavoro di scienza aperta."
+
+#: ../../index.md:20
+msgid ""
+" "
+"[](https://github.com/pyopensci/python-package-guide) "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+msgstr ""
+" "
+"[](https://github.com/pyopensci/python-package-guide) "
+"[](https://zenodo.org/badge/latestdoi/556814582)"
+
+#: ../../index.md:20
+msgid "GitHub release (latest by date)"
+msgstr "Rilascio GitHub (ultimo per data)"
+
+#: ../../index.md:20
+msgid "DOI"
+msgstr "DOI"
+
+#: ../../index.md:27
+msgid "About this guide"
+msgstr "Informazioni su questa guida"
+
+#: ../../index.md:29
+msgid ""
+"Image with the pyOpenSci flower logo in the upper right hand corner. The "
+"image shows the packaging lifecycle. The graphic shows a high level "
+"overview of the elements of a Python package. The inside circle has 5 "
+"items - user documentation, code/api, test suite, contributor "
+"documentation, project metadata / license / readme. In the middle of the "
+"circle is says maintainers and has a small icon with people. On the "
+"outside circle there is an arrow and it says infrastructure."
+msgstr ""
+"Immagine con il logo a fiore di pyOpenSci nell'angolo in alto a destra. "
+"L'immagine mostra il ciclo di vita del packaging. Il grafico offre una "
+"panoramica ad alto livello degli elementi di un Python package. Il cerchio "
+"interno contiene 5 elementi: documentazione per l'utente, codice/api, "
+"suite di test, documentazione per i contributori, metadati del progetto / "
+"licenza / readme. Al centro del cerchio è scritto manutentori ed è "
+"presente una piccola icona con delle persone. Sul cerchio esterno c'è una "
+"freccia con la scritta infrastruttura."
+
+#: ../../index.md:35
+msgid "This guide will help you:"
+msgstr "Questa guida ti aiuterà a:"
+
+#: ../../index.md:37
+msgid "Learn how to create a Python package from start to finish"
+msgstr "Imparare a creare un Python package dall'inizio alla fine"
+
+#: ../../index.md:38
+msgid "Understand the broader Python packaging tool ecosystem"
+msgstr ""
+"Comprendere l'ecosistema più ampio degli strumenti di Python packaging"
+
+#: ../../index.md:39
+msgid "Navigate and make decisions around tool options"
+msgstr "Orientarti e prendere decisioni riguardo alle opzioni degli strumenti"
+
+#: ../../index.md:40
+msgid "Understand all of the pieces of creating and maintaining a Python package"
+msgstr ""
+"Comprendere tutti gli aspetti della creazione e della manutenzione di un "
+"Python package"
+
+#: ../../index.md:42
+msgid ""
+"You will also find best practice recommendations and curated lists of "
+"community resources surrounding packaging and package documentation."
+msgstr ""
+"Troverai inoltre raccomandazioni sulle migliori pratiche ed elenchi "
+"curati di risorse della comunità relative al packaging e alla "
+"documentazione dei package."
+
+#: ../../index.md:45
+msgid "Todo"
+msgstr "Da fare"
+
+#: ../../index.md:46
+msgid "TODO: change the navigation of docs to have a"
+msgstr "DA FARE: modificare la navigazione della documentazione per avere una"
+
+#: ../../index.md:48
+msgid "user documentation contributor / maintainer documentation"
+msgstr ""
+"documentazione per l'utente documentazione per i contributori / "
+"manutentori"
+
+#: ../../index.md:50
+msgid "development guide"
+msgstr "guida allo sviluppo"
+
+#: ../../index.md:51
+msgid "contributing guide"
+msgstr "guida ai contributi"
+
+#: ../../index.md:53
+msgid "Community docs"
+msgstr "Documentazione della comunità"
+
+#: ../../index.md:54
+msgid "readme, coc, license"
+msgstr "readme, coc, licenza"
+
+#: ../../index.md:56
+msgid "Publish your docs"
+msgstr "Pubblica la tua documentazione"
+
+#: ../../index.md:59
+msgid "Tutorial Series: Create a Python Package"
+msgstr "Serie di tutorial: crea un Python package"
+
+#: ../../index.md:61
+msgid ""
+"The first round of our community-developed, how to create a Python "
+"package tutorial series for scientists is complete! Join our community "
+"review process or watch development of future tutorials in our [GitHub "
+"repo here](https://github.com/pyOpenSci/python-package-guide)."
+msgstr ""
+"Il primo ciclo della nostra serie di tutorial per scienziati su come "
+"creare un Python package, sviluppata dalla comunità, è completo! "
+"Partecipa al nostro processo di revisione della comunità o segui lo "
+"sviluppo dei tutorial futuri nel nostro [repository GitHub "
+"qui](https://github.com/pyOpenSci/python-package-guide)."
+
+#: ../../index.md:68
+msgid "✿ Create a Package Tutorials ✿"
+msgstr "✿ Tutorial per creare un package ✿"
+
+#: ../../index.md:72
+msgid "[What is a Python package?](/tutorials/intro)"
+msgstr "[Cos'è un Python package?](/tutorials/intro)"
+
+#: ../../index.md:73
+msgid "[Create a Python package](/tutorials/create-python-package)"
+msgstr "[Crea un Python package](/tutorials/create-python-package)"
+
+#: ../../index.md:74
+msgid "[Publish your package to (test) PyPI](/tutorials/publish-pypi)"
+msgstr "[Pubblica il tuo package su (test) PyPI](/tutorials/publish-pypi)"
+
+#: ../../index.md:75
+msgid "[Publish your package to conda-forge](/tutorials/publish-conda-forge)"
+msgstr "[Pubblica il tuo package su conda-forge](/tutorials/publish-conda-forge)"
+
+#: ../../index.md:78
+msgid "✿ Package Metadata Tutorials ✿"
+msgstr "✿ Tutorial sui metadati del package ✿"
+
+#: ../../index.md:82
+msgid "[How to add a README file](/tutorials/add-readme)"
+msgstr "[Come aggiungere un file README](/tutorials/add-readme)"
+
+#: ../../index.md:83
+msgid ""
+"[How to add metadata to a pyproject.toml file for publication to "
+"PyPI.](/tutorials/pyproject-toml.md)"
+msgstr ""
+"[Come aggiungere metadati a un file pyproject.toml per la pubblicazione su"
+" PyPI.](/tutorials/pyproject-toml.md)"
+
+#: ../../index.md:86
+msgid "✿ Packaging Tool Tutorials ✿"
+msgstr "✿ Tutorial sugli strumenti di packaging ✿"
+
+#: ../../index.md:90
+msgid "[Introduction to Hatch](/tutorials/get-to-know-hatch)"
+msgstr "[Introduzione a Hatch](/tutorials/get-to-know-hatch)"
+
+#: ../../index.md:91
+msgid "[Run Python scripts using Hatch](/tutorials/run-python-scripts-hatch)"
+msgstr "[Esegui script Python usando Hatch](/tutorials/run-python-scripts-hatch)"
+
+#: ../../index.md:94
+msgid "✿ Reference Guides ✿"
+msgstr "✿ Guide di riferimento ✿"
+
+#: ../../index.md:98
+msgid "[Command Line Reference Guide](/tutorials/command-line-reference)"
+msgstr "[Guida di riferimento della riga di comando](/tutorials/command-line-reference)"
+
+#: ../../index.md:102
+msgid "Python Packaging for Scientists"
+msgstr "Python packaging per scienziati"
+
+#: ../../index.md:104
+msgid ""
+"Learn about Python packaging best practices. You will also get to know "
+"the the vibrant ecosystem of packaging tools that are available to help "
+"you with your Python packaging needs."
+msgstr ""
+"Scopri le migliori pratiche per il Python packaging. Conoscerai inoltre "
+"il ricco ecosistema di strumenti di packaging disponibili per aiutarti "
+"nelle tue esigenze di Python packaging."
+
+#: ../../index.md:111
+msgid "✨ Create your package ✨"
+msgstr "✨ Crea il tuo package ✨"
+
+#: ../../index.md:115
+msgid "[Package file structure](/package-structure-code/python-package-structure)"
+msgstr ""
+"[Struttura dei file del package](/package-structure-code/python-package-"
+"structure)"
+
+#: ../../index.md:116
+msgid ""
+"[Package metadata / pyproject.toml](package-structure-code/pyproject-"
+"toml-python-package-metadata.md)"
+msgstr ""
+"[Metadati del package / pyproject.toml](package-structure-code"
+"/pyproject-toml-python-package-metadata.md)"
+
+#: ../../index.md:117
+msgid ""
+"[Build your package (sdist / wheel)](package-structure-code/python-"
+"package-distribution-files-sdist-wheel.md)"
+msgstr ""
+"[Crea il tuo Python package (sdist / wheel)](package-structure-code/python-"
+"package-distribution-files-sdist-wheel.md)"
+
+#: ../../index.md:118
+msgid "[Declare dependencies](package-structure-code/declare-dependencies.md)"
+msgstr "[Dichiara le dipendenze](package-structure-code/declare-dependencies.md)"
+
+#: ../../index.md:119
+msgid ""
+"[Navigate the packaging tool ecosystem](package-structure-code/python-"
+"package-build-tools.md)"
+msgstr ""
+"[Orientarsi nell'ecosistema degli strumenti di packaging](package-"
+"structure-code/python-package-build-tools.md)"
+
+#: ../../index.md:120
+msgid ""
+"[Non pure Python builds](package-structure-code/complex-python-package-"
+"builds.md)"
+msgstr ""
+"[Build di Python package non puri](package-structure-code/complex-python-"
+"package-builds.md)"
+
+#: ../../index.md:123
+msgid "✨ Publish your package ✨"
+msgstr "✨ Pubblica il tuo package ✨"
+
+#: ../../index.md:127
+msgid ""
+"Gain a better understanding of the Python packaging ecosystem Learn about"
+" best practices for:"
+msgstr ""
+"Approfondisci la tua conoscenza dell'ecosistema del Python packaging. "
+"Scopri le migliori pratiche per:"
+
+#: ../../index.md:130
+msgid ""
+"[Package versioning & release](/package-structure-code/python-package-"
+"versions.md)"
+msgstr ""
+"[Versionamento e rilascio del package](/package-structure-code/python-"
+"package-versions.md)"
+
+#: ../../index.md:131
+msgid ""
+"[Publish to PyPI & Conda-forge](/package-structure-code/publish-python-"
+"package-pypi-conda.md)"
+msgstr ""
+"[Pubblica su PyPI e Conda-forge](/package-structure-code/publish-python-"
+"package-pypi-conda.md)"
+
+#: ../../index.md:142
+msgid "✨ Write The Docs ✨"
+msgstr "✨ Scrivi la tua documentazione ✨"
+
+#: ../../index.md:145
+msgid ""
+"[Create documentation for your users](/documentation/write-user-"
+"documentation/intro)"
+msgstr ""
+"[Crea la documentazione per i tuoi utenti](/documentation/write-user-"
+"documentation/intro)"
+
+#: ../../index.md:146
+msgid ""
+"[Core files to include in your package repository](/documentation"
+"/repository-files/intro)"
+msgstr ""
+"[File essenziali da includere nel repository del package](/documentation"
+"/repository-files/intro)"
+
+#: ../../index.md:147
+msgid ""
+"[Write tutorials to show how your package is used](/documentation/write-"
+"user-documentation/create-package-tutorials)"
+msgstr ""
+"[Scrivi tutorial per mostrare come si usa il tuo package](/documentation"
+"/write-user-documentation/create-package-tutorials)"
+
+#: ../../index.md:150
+msgid "✨ Developer Docs ✨"
+msgstr "✨ Documentazione per sviluppatori ✨"
+
+#: ../../index.md:153
+msgid ""
+"[Create documentation for collaborating developers](/documentation"
+"/repository-files/contributing-file)"
+msgstr ""
+"[Crea documentazione per gli sviluppatori collaboratori](/documentation"
+"/repository-files/contributing-file)"
+
+#: ../../index.md:154
+msgid ""
+"[Write a development guide](/documentation/repository-files/development-"
+"guide)"
+msgstr ""
+"[Scrivi una guida allo sviluppo](/documentation/repository-files"
+"/development-guide)"
+
+#: ../../index.md:157
+msgid "✨ Document For A Community ✨"
+msgstr "✨ Crea documentazione per una comunità ✨"
+
+#: ../../index.md:160
+msgid ""
+"[Writing a README file](/documentation/repository-files/readme-file-best-"
+"practices)"
+msgstr ""
+"[Scrivere un file README](/documentation/repository-files/readme-file-"
+"best-practices)"
+
+#: ../../index.md:161
+msgid ""
+"[Set norms with a Code of Conduct](/documentation/repository-files/code-"
+"of-conduct-file)"
+msgstr ""
+"[Stabilisci delle norme con un Codice di Condotta](/documentation"
+"/repository-files/code-of-conduct-file)"
+
+#: ../../index.md:162
+msgid "[License your package](/documentation/repository-files/license-files)"
+msgstr ""
+"[Aggiungi una licenza al tuo Python package](/documentation/repository-"
+"files/license-files)"
+
+#: ../../index.md:165
+msgid "✨ Publish Your Docs ✨"
+msgstr "✨ Pubblica la tua documentazione ✨"
+
+#: ../../index.md:168
+msgid "[How to publish your docs](/documentation/hosting-tools/intro)"
+msgstr "[Come pubblicare la tua documentazione](/documentation/hosting-tools/intro)"
+
+#: ../../index.md:169
+msgid "[Using Sphinx](/documentation/hosting-tools/intro)"
+msgstr "[Usare Sphinx](/documentation/hosting-tools/intro)"
+
+#: ../../index.md:170
+msgid ""
+"[Markdown, MyST, and ReST](/documentation/hosting-tools/myst-markdown-"
+"rst-doc-syntax)"
+msgstr ""
+"[Markdown, MyST e ReST](/documentation/hosting-tools/myst-markdown-rst-"
+"doc-syntax)"
+
+#: ../../index.md:171
+msgid ""
+"[Host your docs on Read The Docs or GitHub Pages](/documentation/hosting-"
+"tools/publish-documentation-online)"
+msgstr ""
+"[Ospita la tua documentazione su Read The Docs o GitHub "
+"Pages](/documentation/hosting-tools/publish-documentation-online)"
+
+#: ../../index.md:181
+msgid "✨ Tests for your Python package ✨"
+msgstr "✨ Test per il tuo Python package ✨"
+
+#: ../../index.md:184
+msgid "[Intro to testing](tests/index.md)"
+msgstr "[Introduzione ai test](tests/index.md)"
+
+#: ../../index.md:185
+msgid "[Write tests](tests/write-tests)"
+msgstr "[Scrivi i test](tests/write-tests)"
+
+#: ../../index.md:186
+msgid "[Types of tests](tests/test-types)"
+msgstr "[Tipi di test](tests/test-types)"
+
+#: ../../index.md:189
+msgid "✨ Run your tests ✨"
+msgstr "✨ Esegui i tuoi test ✨"
+
+#: ../../index.md:192
+msgid "[Run tests locally with Hatch](tests/run-tests)"
+msgstr "[Esegui i test in locale con Hatch](tests/run-tests)"
+
+#: ../../index.md:193
+msgid "[Run tests with nox](tests/run-tests-nox)"
+msgstr "[Esegui i test con nox](tests/run-tests-nox)"
+
+#: ../../index.md:194
+msgid "[Run tests in CI](tests/tests-ci)"
+msgstr "[Esegui i test in CI](tests/tests-ci)"
+
+#: ../../index.md:198
+msgid "Contributing"
+msgstr "Contribuire"
+
+#: ../../index.md:205
+msgid "✨ Code style & Format ✨"
+msgstr "✨ Stile e formattazione del codice ✨"
+
+#: ../../index.md:208
+msgid "[Code style](package-structure-code/code-style-linting-format.md)"
+msgstr "[Stile del codice](package-structure-code/code-style-linting-format.md)"
+
+#: ../../index.md:211
+msgid "✨ Want to contribute? ✨"
+msgstr "✨ Vuoi contribuire? ✨"
+
+#: ../../index.md:216
+msgid ""
+"We welcome contributions to this guide. Learn more about how you can "
+"contribute."
+msgstr ""
+"Accogliamo con piacere i contributi a questa guida. Scopri di più su come "
+"puoi contribuire."
+
+#: ../../index.md:221
+msgid "A group of people building a pyramid with blocks"
+msgstr "Un gruppo di persone che costruisce una piramide con dei blocchi"
+
+#: ../../index.md:227
+msgid "A community-created guidebook"
+msgstr "Una guida creata dalla comunità"
+
+#: ../../index.md:229
+msgid ""
+"Every page in this guidebook goes through an extensive community review "
+"process. To ensure our guidebook is both beginner-friendly and accurate, "
+"we encourage reviews from a diverse set of pythonistas and scientists "
+"with a wide range of skills and expertise."
+msgstr ""
+"Ogni pagina di questa guida passa attraverso un approfondito processo di "
+"revisione della comunità. Per garantire che la nostra guida sia accurata "
+"e adatta ai principianti, incoraggiamo le revisioni da parte di un insieme "
+"eterogeneo di pythonisti e scienziati con un'ampia gamma di competenze ed "
+"esperienze."
+
+#: ../../index.md:232
+msgid "View guidebook contributors"
+msgstr "Visualizza i contributori della guida"
+
+#: ../../index.md:240
+msgid "Who this guidebook is for"
+msgstr "A chi è rivolta questa guida"
+
+#: ../../index.md:242
+msgid ""
+"This guidebook is for anyone interested in learning more about Python "
+"packaging. It is beginner-friendly and will provide:"
+msgstr ""
+"Questa guida è rivolta a chiunque sia interessato ad approfondire il "
+"Python packaging. È adatta ai principianti e fornirà:"
+
+#: ../../index.md:244
+msgid "Beginning-to-end guidance on creating a Python package."
+msgstr ""
+"Una guida completa, dall'inizio alla fine, sulla creazione di un Python "
+"package."
+
+#: ../../index.md:245
+msgid ""
+"Resources to help you navigate the Python packaging ecosystem of tools "
+"and approaches to packaging."
+msgstr ""
+"Risorse per aiutarti a orientarti nell'ecosistema di strumenti e approcci "
+"del Python packaging."
+
+#: ../../index.md:246
+msgid ""
+"A curated list of resources to help you get your package into documented,"
+" usable and maintainable shape."
+msgstr ""
+"Un elenco curato di risorse per aiutarti a rendere il tuo package "
+"documentato, utilizzabile e manutenibile."
+
+#: ../../index.md:248
+msgid "Where this guide is headed"
+msgstr "Dove è diretta questa guida"
+
+#: ../../index.md:250
+msgid ""
+"If you have ideas of things you'd like to see here clarified in this "
+"guide, [we invite you to open an issue on "
+"GitHub.](https://github.com/pyOpenSci/python-package-guide/issues)."
+msgstr ""
+"Se hai idee su aspetti che vorresti vedere chiariti in questa guida, [ti "
+"invitiamo ad aprire una issue su "
+"GitHub.](https://github.com/pyOpenSci/python-package-guide/issues)."
+
+#: ../../index.md:253
+msgid ""
+"If you have questions about our peer review process or packaging in "
+"general, you are welcome to use our [GitHub "
+"Discussions](https://github.com/orgs/pyOpenSci/discussions)."
+msgstr ""
+"Se hai domande sul nostro processo di revisione tra pari o sul packaging "
+"in generale, ti invitiamo a utilizzare le nostre [Discussioni "
+"GitHub](https://github.com/orgs/pyOpenSci/discussions)."
+
+#: ../../index.md:255
+msgid ""
+"This living Python packaging guide is updated as tools and best practices"
+" evolve in the Python packaging ecosystem. We will be adding new content "
+"over the next year."
+msgstr ""
+"Questa guida sul Python packaging viene aggiornata continuamente man mano "
+"che gli strumenti e le migliori pratiche si evolvono nell'ecosistema del "
+"Python packaging. Aggiungeremo nuovi contenuti nel corso del prossimo "
+"anno."
diff --git a/locales/it/LC_MESSAGES/maintain-automate.po b/locales/it/LC_MESSAGES/maintain-automate.po
new file mode 100644
index 000000000..628cca1cd
--- /dev/null
+++ b/locales/it/LC_MESSAGES/maintain-automate.po
@@ -0,0 +1,1807 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../maintain-automate/ci.md:2
+msgid ""
+"Continuous Integration and Continuous Deployment (CI/CD) For Python "
+"Packages"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:4
+msgid ""
+"When you develop, work on, and contribute to software, there is more to "
+"consider than just writing code. Having tests and checks ensures that "
+"your code runs reliably and follows a consistent format is also "
+"important. You can use **Continuous Integration (CI)** and **Continuous "
+"Deployment (CD)** to run tests and checks on your code every time someone"
+" suggests a change online in a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:12
+msgid ""
+"**Continuous Integration (CI):** Automates the process of running tests, "
+"code checks, and other workflows each time code is updated."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:14
+msgid ""
+"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
+"publishing your package to PyPI, publishing your documentation, and more."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:18
+msgid ""
+"CI and CD streamline software development by automating repetitive tasks "
+"and ensuring code quality and consistency. Having CI setup also makes it "
+"easier for new contributors to contribute to your code base without "
+"setting up all your test suites and other local checks."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:23
+msgid "What is continuous integration?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:25
+msgid ""
+"When you're ready to publish your code online, you can set up Continuous "
+"Integration (CI). CI is a platform that allows you to specify and run "
+"jobs or workflows you define. These workflows include:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:28
+msgid "Running your test suite"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:29
+msgid "Running code checkers / linters / spellcheck"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:30
+msgid "Building your documentation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:32
+msgid ""
+"CI allows you to automate running workflows across a suite of "
+"environments, including:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:34
+msgid "environments containing different Python versions and"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:35
+msgid "different operating systems (Mac, Linux, Windows)."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:37
+msgid "What is continuous deployment (CD)?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:39
+msgid ""
+"Continuous deployment (CD) extends the CI process by automating the "
+"deployment of code changes to production or staging environments. In the "
+"case of your open source tool, CD can be used to:"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:41
+msgid "Automate publishing to PyPI"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:42
+msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:44
+msgid ""
+"It is also used once your conda-forge recipe is set up to keep your "
+"package up to date on conda-forge."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:47
+msgid "Why use CI?"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:49
+msgid ""
+"CI can be configured to run a workflow on every commit pushed to GitHub "
+"and every pull request opened. This ensures that any changes made to your"
+" package are tested across environments before merging into the main "
+"branch of your code."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:54
+msgid ""
+"These checks are particularly useful if someone new is contributing to "
+"your code. Every contributor's change will be tested when pushed to your "
+"code repository."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:58
+msgid ""
+"Together, CI and CD streamline the process of building, testing, and "
+"deploying code. They aim to improve software development and publication "
+"efficiency, quality, and reliability."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:63
+msgid ""
+"All pyOpenSci packages must use some form of continuous integration. Even"
+" if you are not planning to go through peer review, we strongly recommend"
+" that you use continuous integration, too!"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:68
+msgid ""
+"In the case of GitHub actions (which we will focus on here), CI workflows"
+" are running on online servers that support GitHub."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:71
+msgid "CI/CD platforms"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:73
+msgid ""
+"There are numerous platforms available for CI/CD. Here, we will focus on "
+"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
+" platform to store scientific open-source software."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:78
+msgid ""
+"If you use [GitLab](https://about.gitlab.com/) CI/CD, many of the "
+"principles described here will apply. However, the workflow files may "
+"look different."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:83
+msgid "If you aren't sure, use GitHub Actions"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:85
+msgid ""
+"While you are welcome to use the continuous integration platform of your "
+"choice, we recommend GitHub Actions because it is free-to-use and "
+"integrated tightly into the GitHub user interface. There is also an "
+"entire store of GitHub action templates that you can easily use and adapt"
+" to your own needs."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:91
+msgid "Other platforms that you may run into"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:94
+msgid ""
+"[Appveyor:](https://www.appveyor.com/): Supports running tests on Windows"
+" operating systems and predated the release of GitHub Actions. Today, "
+"AppVeyor supports operating systems beyond Windows."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:97
+msgid ""
+"[Travis CI:](https://www.travis-ci.com/) had been a common CI platform "
+"choice in our ecosystem. Usage dropped after Travis CI ended free support"
+" for open-source projects."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:100
+msgid ""
+"[CircleCI:](https://circleci.com/) CircleCI can be useful for automated "
+"builds of websites and documentation since it offers a preview of the PR "
+"changes."
+msgstr ""
+
+#: ../../maintain-automate/ci.md:105
+msgid "Embrace automation"
+msgstr ""
+
+#: ../../maintain-automate/ci.md:107
+msgid ""
+"By embracing CI/CD, you can ensure that your code runs as you expect it "
+"to across the diverse landscapes of user environments. Further, you can "
+"automate certain checks (and, in some cases, code fixes), including "
+"linting and code style. You can even automate spell-checking your "
+"documentation and docstrings!"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:1
+msgid "Installing your own code"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:3
+msgid ""
+"You have a conda environment. It works. Maybe it has packages that were "
+"hard to install, like GDAL, HDF5, or other compiled scientific "
+"dependencies."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:5
+msgid ""
+"You also have code that you are writing locally. Maybe it started as a "
+"script, or maybe it is already organized as a Python package. You want to"
+" use that code inside the same environment with GDAL, HDF5, and the other"
+" tools you already installed."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:7
+msgid ""
+"The instructions to install your code into a conda environment is to "
+"first activate your conda environment `conda activate your_env_name` and "
+"then run this: `python -m pip install -e . --no-deps`. You may also see "
+"this written as `pip install -e .`. See [The Full Command](the-full-"
+"command) section below for more info as to the details of this command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:9
+msgid ""
+"If this is the first time you're seeing pip install commands, you may not"
+" be totally sure what is going on here. Conda created the environment, "
+"why am I using `pip` to install things now? You may have heard guidance "
+"to generally try and avoid mixing conda and pip? You may already be "
+"mixing conda and pip and things are totally fine. You may also not care "
+"at all because `pip install -e .` seems to work fine and you can get back"
+" to what you're actually trying to do. (If that last one is you, you're "
+"also probably not reading this page). In any event, all of these "
+"situations are perfectly understandable and totally okay for you to be "
+"going through."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:11
+msgid ""
+"So... why pip? The short answer is that conda and pip are doing different"
+" jobs here."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:13
+msgid ""
+"The slightly longer, mostly apologetic, answer is this is just sort of "
+"the current ergonomics of how python packaging works and, honestly? Most "
+"of us have turned this confusing pain point into muscle memory. But not "
+"you. You're new here. And you're like... wat? And you're totally "
+"justified to feel this way."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:15
+msgid ""
+"So, what is happening here? `conda` manages the environment: the Python "
+"runtime, compiled libraries, command line tools, and the packages your "
+"project depends on. This is stuff that you've already been doing and "
+"you're comfortable with (or at least familiar with). `pip` is doing one "
+"Python-packaging-specific job: installing your local package into the "
+"active environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:17
+msgid ""
+"In editable mode, the `-e` flag, `pip` connects the active environment to"
+" the source files you are editing. And... why exactly is that useful?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:19
+msgid "It's useful because it gives you a pretty quick development loop:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:21
+msgid "Edit your code in your editor."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:22
+msgid "Run it from a terminal, test suite, or Jupyter notebook."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:23
+msgid "Edit the code again."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:24
+msgid "Run it again without reinstalling your package."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:26
+msgid ""
+"So the goal is not to switch from conda to pip. The goal is to keep using"
+" your conda environment while making your local package importable inside"
+" that environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:28
+msgid "Should I use pip for everything now?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:30
+msgid "Probably not?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:32
+msgid ""
+"If conda is already working well for your project, keep using conda to "
+"manage the environment. Use pip only for this one task: installing your "
+"local package in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:34
+msgid ""
+"If you are curious about other tools like uv, pixi, Hatch, or pip-only "
+"workflows, see [Environment Managers](environment-managers.md). Those "
+"tools can be great choices. But you do not need to switch tools just to "
+"develop your local package inside a conda environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:36
+msgid ""
+"As a final note, people in the conda ecosystem are actively working on "
+"better conda/pip interoperability. In the future, this workflow may "
+"become less awkward. For now, `python -m pip install -e . --no-deps` is "
+"the standard bridge."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:39
+msgid "The full command"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:41
+msgid ""
+"`python -m pip install -e . --no-deps` is a mouthful. I know it. You know"
+" it. Why do we do these things?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:43
+msgid "The simplest version of this is:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:48
+msgid "But we recommend the longer version in conda environments for two reasons."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:50
+msgid ""
+"The `python -m pip` part ensures that you're using pip from the active "
+"conda environment. Sometimes this results in `pip not found`, which is "
+"actually a good error to get because it means you prevented an annoying-"
+"to-debug failure mode. If this happens just `conda install pip` and try "
+"again. So, why? Sometimes `pip` from a different python environment can "
+"be on your PATH which means that you'll accidentally install your code "
+"into an unrelated python environment. This can be confusing to debug. "
+"This has happened to most (all?) of us. It usually hits when you're least"
+" prepared to debug and fix it. So we recommend the `python -m` in front "
+"to prevent this from happening. But it does add to the length of the "
+"command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:52
+msgid ""
+"The `--no-deps` flag tells pip not to install your package's "
+"dependencies, if you have any listed in your project. If you do have them"
+" listed, probably in your `pyproject.toml` file, then `pip install -e .` "
+"will try to install the dependencies that are listed in that file. In a "
+"conda environment, that can range from \"mostly fine\" to \"now my "
+"environment is broken and I am not sure how to recover.\""
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:54
+msgid ""
+"With `--no-deps`, pip installs only your local package. You remain "
+"responsible for managing the environment dependencies with conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:2
+msgid "Environment Managers for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:4
+msgid "Quick Decision Guide"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:6
+msgid "**Python-only project, want simplicity?** → venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:7
+msgid "**Python-only, want speed?** → **uv** (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:8
+msgid "**Installing CLI tools globally?** → pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:9
+msgid ""
+"**Need conda packages or cross-language dependencies?** → **pixi** "
+"(recommended) or conda/mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:10
+msgid ""
+"**Creating a Python package?** → Use Hatch -- with UV as a dependency "
+"manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:12
+msgid ""
+"You can mix tools! For example, use **pipx** to install tools you use "
+"often (at the command line) like Hatch, ruff or pre-commit, then use "
+"**uv** within your projects for package and environment management."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:15
+msgid "Environment and package managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:17
+msgid ""
+"Package and environment managers are important tools in your Python "
+"packaging workflows. To make Your packaging experience when selecting a "
+"tool will be easier if you understand the difference between the two."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:20
+msgid ""
+"A **package manager** is used to install, update, and remove Python "
+"packages (libraries and tools) and their dependencies in your "
+"environment. When you use a package manager, you are often downloading "
+"packages from a repository like PyPI (Python Package Index) or a local "
+"repository like GitHub / GitLab."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:23
+msgid ""
+"When you run `pip install numpy`, pip acts as a package manager and "
+"installs numpy from PyPI. Pip's default repository when you install a "
+"package is PyPI, but it can be used to install packages from other "
+"repositories such as GitHub."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:26
+msgid ""
+"An **environment manager** creates isolated spaces (environments) for "
+"your Python projects. Each environment has its own Python installation "
+"and its own installed packages. Using isolated environments for different"
+" projects reduces the change of environment conflicts when using the same"
+" environment across different projects with different dependencies."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:28
+msgid ""
+"There are many tools listed below, but if you're short on time, you may "
+"want to consider"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:30
+msgid ""
+"Hatch combined with UV if you are managing a Python package. [Check out "
+"our tutorials for more on this workflow.](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:31
+msgid ""
+"Pixi or mamba as faster alternatives to conda if you are working in the "
+"non-Pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:33
+msgid "Where environment managers save your environment"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:35
+msgid ""
+"Environment managers save environments in different locations by default."
+" For instance, `venv`, an environment manager that ships with Python, "
+"saves an environment by default in your current working directory. UV has"
+" the same native behavior. In contrast, conda and mamba save environments"
+" in a global location, allowing you to access them easily across "
+"projects."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:38
+msgid ""
+"UV does have a global cache even tho its default behavior is to create an"
+" environment in your current working directory."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:42
+msgid "Some tools do everything"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:44
+msgid ""
+"Some modern tools handle both package installation and environment "
+"management. For instance, UV, conda and mamba can be used to both create "
+"environments, add dependencies, and build and install tools."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:46
+msgid "Comparison Table: pip ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Tool"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Type"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Language"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Speed"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Default Environment Location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Description"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pip**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Package manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+#: ../../maintain-automate/task-runners.md
+msgid "Python"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Slower"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "N/A (uses existing environment)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's standard package installer. pip also builds packages"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pipx**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (isolated per tool)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid ""
+"Installs tools that you need to regularly use across projects such as "
+"nox, pytest or ruff in a global location"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**uv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Both"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Rust"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fastest"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Fast package installer and environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**venv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python's built-in environment creator"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**virtualenv**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Moderate"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Feature-rich alternative to venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:56
+msgid "Comparison Table: conda ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**conda**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Python/C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Global (`~/anaconda3/envs/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Cross-language package and environment manager"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**mamba**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "C++"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Faster drop-in replacement for conda"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "**pixi**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Current working directory (`.pixi/`)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:37
+msgid "Modern conda-based tool with lock files"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:64
+msgid ""
+"**Speed comparison:** Rust-based tools (uv, pixi) are significantly "
+"faster when installing packages and resolving complex environments than "
+"Python-based tools. Mamba is faster than conda but might be slower than "
+"Rust-based alternatives such as Pixi."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:67
+msgid "Package Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:69
+msgid "pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:71
+msgid ""
+"Pip is Python's standard package installer. It is included with Python by"
+" default."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:72
+msgid ""
+"Pip is great for installing packages from PyPI and GitHub / GitLab into "
+"existing environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:73
+msgid ""
+"It is also great for development if you want to install your package "
+"locally in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:75
+#: ../../maintain-automate/environment-managers.md:87
+#: ../../maintain-automate/environment-managers.md:99
+#: ../../maintain-automate/environment-managers.md:127
+#: ../../maintain-automate/environment-managers.md:189
+#: ../../maintain-automate/environment-managers.md:211
+#: ../../maintain-automate/environment-managers.md:261
+#: ../../maintain-automate/environment-managers.md:280
+msgid "**Basic usage:**"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:81
+msgid "pipx"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:83
+msgid ""
+"Pipx is can be used to install a tool that you need to use across "
+"projects (like `riff`, `pytest`, `sphinx`, `nox`), globally."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:85
+msgid ""
+"Why use it: You might use it to avoid reinstalling the same tool over and"
+" over on your machine."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:93
+msgid "conda / mamba"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:95
+msgid ""
+"Conda is a cross-language package manager that installs Python packages, "
+"R packages, system libraries, and more. Mamba is a faster, drop-in "
+"replacement for conda and we highly recommend mamba over conda if you are"
+" still using conda."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:97
+msgid ""
+"These tools are best for scientific computing projects and environments "
+"that need non-Python dependencies (like C libraries, GDAL, or R "
+"packages)."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:109
+msgid "Conda and mamba also function as environment managers - see below!"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:112
+#: ../../maintain-automate/index.md:51
+msgid "Environment Managers"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:114
+msgid "hatch for pure Python packaging"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:116
+#: ../../maintain-automate/environment-managers.md:204
+#: ../../maintain-automate/environment-managers.md:273
+msgid "pyOpenSci Recommends"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:118
+msgid ""
+"We recommend **hatch** as a complete project management tool for Python "
+"packaging. Hatch manages environments, builds packages, runs tests, and "
+"handles publishing—all in one tool. It can use **uv** as its backend for "
+"even faster operations."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:121
+msgid ""
+"Hatch is a comprehensive modern Python project manager that handles "
+"environments, package building, testing, and publishing. Hatch creates "
+"isolated environments for different tasks (testing, docs, development). "
+"Hatch uses UV under the hood to install Python, and can be set to use UV "
+"to manage environment installations too."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:123
+msgid ""
+"Hatch is best for Python package developers who want an all-in-one tool "
+"that handles the entire packaging workflow from development to "
+"publication."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:125
+msgid "[Check out our tutorial](create-pure-python-package)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "hatch with uv backend"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:160
+msgid ""
+"Hatch acts as a task runner and can manage multiple environments that you"
+" define. It also handles project and dependency installation, making it "
+"ideal for package maintainers who want consistency across development "
+"tasks."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:163
+msgid "venv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:165
+msgid ""
+"venv is Python's built-in environment creator (included with Python "
+"3.3+). It is best for simple pure Python projects. Because venv ships "
+"with Python, and it is used by Hatch, UV and other tools under the hood, "
+"it is the most widely used tool."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:168
+msgid "Basic usage:"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:184
+msgid "virtualenv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:186
+msgid ""
+"virtualenv is a more feature-rich alternative to venv with better "
+"performance and additional options. It's best for you if you need more "
+"control over your environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:202
+msgid "uv"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:206
+msgid ""
+"We recommend **uv** for fast, reliable Python package and environment "
+"management. It's significantly faster than pip and easily handles both "
+"installing packages and creating environments."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:209
+msgid ""
+"UV is a fast, Rust-based tool that replaces both pip and venv. It "
+"installs packages and creates virtual environments at lightning speed. UV"
+" is best for any pure Python project. Pixi is better if are working in "
+"the non-pure Python packaging space."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "uv (recommended)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+msgid "venv + pip"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md
+#: ../../maintain-automate/environment-managers.md:272
+msgid "pixi"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:256
+msgid "conda / mamba (as environment managers)"
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:258
+msgid ""
+"Conda and mamba create isolated environments that can contain Python, R, "
+"system libraries, and more. The conda ecosystem tools are best for "
+"managing complex dependencies across languages or when you need specific "
+"system libraries."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:275
+msgid ""
+"For projects needing conda packages, we recommend **pixi** over "
+"conda/mamba. It's faster, uses lock files for reproducibility, and works "
+"cross-platform."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:278
+msgid ""
+"Pixi is a modern, fast package and environment manager built on conda "
+"ecosystems. Similar to UV, Pixi uses lock files for reproducible "
+"environments. Pixi is best suited for scientific projects that require "
+"conda packages, teams that require exact reproducibility, or cross-"
+"platform development."
+msgstr ""
+
+#: ../../maintain-automate/environment-managers.md:299
+msgid ""
+"Pixi automatically creates a lock file (`pixi.lock`) ensuring everyone on"
+" your team gets identical environments."
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "What is CI?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Task runners"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Development installs with conda"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
+msgid "Maintain & Automate"
+msgstr ""
+
+#: ../../maintain-automate/index.md:2
+msgid "Automate Workflows and Maintain Your Package"
+msgstr ""
+
+#: ../../maintain-automate/index.md:4
+msgid ""
+"Once you've [created your package](create-pure-python-package), "
+"[published it](publish-pypi-tutorial), and set up a repository for it, "
+"the next step is to automate development and maintenance workflows. "
+"Automation makes maintaining your package easier, more robust, and more "
+"secure. It also helps new contributors get started quickly without having"
+" to manually set up complex development environments and testing "
+"workflows."
+msgstr ""
+
+#: ../../maintain-automate/index.md:11
+msgid "Why automate?"
+msgstr ""
+
+#: ../../maintain-automate/index.md:13
+msgid ""
+"When you automate repetitive tasks like running tests, checking code "
+"style, and building documentation, you ensure that these important steps "
+"happen consistently every time. This consistency helps you catch bugs "
+"early, maintain code quality, and make it easier for others to contribute"
+" to your package. Automation also saves you time—instead of remembering "
+"and typing long command sequences, you can run everything with simple "
+"commands or have workflows run automatically when you push code to "
+"GitHub."
+msgstr ""
+
+#: ../../maintain-automate/index.md:22
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../maintain-automate/index.md:24
+msgid ""
+"This section will walk you through two key automation strategies for "
+"Python packages:"
+msgstr ""
+
+#: ../../maintain-automate/index.md:27
+msgid ""
+"[**Task runners**](task-runners-intro) help you automate common "
+"development tasks locally— things like running tests, building "
+"documentation, formatting code, and checking for errors. Instead of "
+"typing out long command sequences every time, you define tasks once and "
+"run them with simple commands. Task runners like Hatch and Nox also "
+"manage isolated environments for different workflows, ensuring you have "
+"the right dependencies for each task."
+msgstr ""
+
+#: ../../maintain-automate/index.md:35
+msgid ""
+"[**Continuous Integration (CI)**](ci-cd) takes automation further by "
+"running your tests and checks automatically every time code is pushed to "
+"GitHub or when someone opens a pull request. CI ensures that all changes "
+"are tested across different Python versions and operating systems before "
+"they're merged. You can also use Continuous Deployment (CD) to automate "
+"publishing your package to PyPI and deploying your documentation."
+msgstr ""
+
+#: ../../maintain-automate/index.md:42
+msgid ""
+"Together, task runners and CI/CD create a robust development workflow "
+"that makes your package easier to maintain and more welcoming to "
+"contributors."
+msgstr ""
+
+#: ../../maintain-automate/index.md:46
+msgid ""
+"[**Development installs in conda environments**](dev-installs) help you "
+"connect conda-based scientific development environments with local Python"
+" package development. This is especially useful when your package depends"
+" on compiled or system-level dependencies that conda manages well."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:2
+msgid "Task Runners for Python Packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:4
+msgid "What is a Task Runner?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:6
+msgid ""
+"A task runner is a tool that automates repetitive development workflows. "
+"Instead of typing out long command sequences every time you need to test "
+"your code, build documentation, or check your package, you define these "
+"tasks once and run them with simple commands."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:11
+msgid "For example, rather than running:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:19
+msgid "You can define a task and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:25
+msgid ""
+"Most modern task runners also include environment management features "
+"that make it quick and easy to run tasks. Task runners ensure that "
+"workflows are executed consistently every time, whether you're running "
+"them on your laptop or in continuous integration, and they also make it "
+"easier for contributors to recreate the same workflows in their local "
+"environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:32
+msgid "Benefits of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:34
+msgid ""
+"Task runners provide several benefits for package development. When you "
+"use a task runner, everyone on your team runs tasks the same way, "
+"reducing environment-specific issues and \"works on my machine\" "
+"problems. Complex multi-step processes become single commands, so "
+"contributors don't need to memorize or look up lengthy command sequences."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:41
+msgid ""
+"Many task runners also create isolated environments for different "
+"workflows, ensuring the right dependencies are available for each task "
+"without conflicts. This means your tasks run the same way locally and in "
+"continuous integration, making debugging easier and builds more reliable."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:47
+msgid "Two types of task runners"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:49
+msgid ""
+"The most common task runners used in the Python ecosystem fall into two "
+"categories:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:51
+msgid "Environment + command managers"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:53
+msgid ""
+"You can use these to both create custom isolated environments and also to"
+" run your tasks."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:55
+msgid ""
+"**[Hatch](https://hatch.pypa.io/):** Hatch is an all-in-one package "
+"management tool that includes a built-in task runner. It uses a "
+"declarative TOML configuration in your `pyproject.toml` file, which means"
+" everything related to your package—metadata, dependencies, and "
+"tasks—lives in one place. Hatch also integrates with UV for fast "
+"environment creation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:56
+msgid ""
+"**[Nox](https://nox.thea.codes/):** Nox is a flexible Python-based task "
+"runner that uses a code-based (imperative) configuration approach. You "
+"write Python functions to define your tasks in a `noxfile.py`, which "
+"gives you maximum flexibility for complex testing scenarios and "
+"conditional logic. It's especially popular in the Scientific Python "
+"ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:57
+msgid ""
+"**[Tox](https://tox.wiki/):** Tox is a mature declarative tool that uses "
+"INI or TOML configuration files. It's particularly well-suited for "
+"testing across multiple Python versions and dependency combinations, and "
+"has been a standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:59
+msgid "Command-only tools"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:61
+msgid "These tools execute your commands but don't manage environments."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:63
+msgid ""
+"**[Make](https://www.gnu.org/software/make/):** Make is a traditional "
+"build automation tool that uses Makefiles. It's widely known and "
+"available on most systems, making it a good choice for simple task "
+"automation when you don't need Python-specific features. However, it can "
+"have cross-platform compatibility issues, especially on Windows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:64
+msgid ""
+"**[Just](https://just.systems/):** Just is a modern command runner "
+"written in Rust with simple, Make-like syntax. It's fast, cross-platform,"
+" and easy to learn, making it a good lightweight alternative when you "
+"need basic task running without environment management."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:66
+msgid ""
+"Generally the two task runners that pyOpenSci suggests and uses are "
+"[Nox](https://nox.thea.codes/en/stable/) and [Hatch (also a package "
+"management tool)](https://hatch.pypa.io/latest/). Below, you will learn "
+"about the differences between all of the tools and can make a decision "
+"for yourself depending on your needs."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:71
+msgid "pyOpenSci recommends: Hatch and Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:73
+msgid ""
+"At pyOpenSci, the recommendation is **Hatch** for Python package "
+"development. Hatch also includes a task and environment system feature. "
+"Using Hatch means you don't need to setup another tool like Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:77
+msgid ""
+"However, **Nox** is also an excellent choice, particularly if you need "
+"complex testing, build or workflow logic."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:80
+msgid ""
+"You'll find many of the pyOpenSci documentation repositories use Nox to "
+"automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:83
+msgid "Why use Hatch?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:85
+msgid ""
+"Hatch is an all-in-one tool that helps you manage metadata, dependencies,"
+" build configuration, and tasks together in `pyproject.toml`. Using "
+"Hatch, everything related to your package lives in one place. It combines"
+" packaging (building and publishing) with everyday development tasks like"
+" testing, docs, and formatting, making workflows easier to run and share."
+" Hatch also integrates with UV making it extremely fast. Finally, Hatch "
+"follows modern packaging practices (for example, PEP 621), so your "
+"project stays aligned with community standards."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:95
+msgid "Why use Nox?"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:97
+msgid ""
+"Python-based configuration gives Nox maximum flexibility, making it easy "
+"to express complex logic and conditionals directly. Because sessions are "
+"written in Python, they are explicit and easy to inspect and debug. Nox "
+"is particularly powerful for handling complex test and build scenarios "
+"that some packages require."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:103
+msgid "Declarative vs. imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:105
+msgid "An important distinction between these tools is how you configure them:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:107
+msgid ""
+"Hatch is a **Declarative tool**. This means it uses a configuration file "
+"where you specify *what* you want. See the example below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:119
+msgid ""
+"Nox uses an **Imperative** approach to defining workflows. With Nox, you "
+"write Python code that defines how to perform a task. An example of a Nox"
+" function (which would live in a separate noxfile.py file) is shown "
+"below:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:132
+msgid "Trade-offs: declarative vs. imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:134
+msgid ""
+"**Declarative (Hatch, Tox):** Simpler syntax, easier to read and "
+"maintain. Might be slightly less flexible for complex logic (this is user"
+" dependent)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:137
+msgid ""
+"**Imperative (Nox):** You can easily include complex logic and "
+"conditionals. Because it uses Python, it might be more familiar to you!"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:141
+msgid ""
+"Neither approach is inherently better—it depends on your needs and "
+"preferences. Projects with complex testing scenarios may benefit from "
+"Nox's flexibility, while projects wanting simple, standardized workflows "
+"may prefer the clarity of declarative configuration."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:146
+msgid "An overview of the core task runners tools that you will find in"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:147
+msgid "the Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:149
+msgid "Comparison table"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:151
+msgid ""
+"Below you will see a comparison of features associated with each tool. "
+"Each tool is then described in a bit more detail just in case you want a "
+"better lay of the land."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Feature"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:167
+msgid "Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:223
+msgid "Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:275
+msgid "Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:321
+msgid "Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+#: ../../maintain-automate/task-runners.md:360
+msgid "Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "noxfile.py"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "tox.ini"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Makefile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "justfile"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Configuration Style**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Declarative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Imperative"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Language**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "INI/TOML"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Make syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Just syntax"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Python-specific**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Yes"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "No"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Environment Management**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Matrix Testing**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Packaging Integration**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Cross-platform**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Limited"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "**Best For**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complete package development"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Complex testing workflows and other builds"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Legacy projects, standard testing"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md
+msgid "Simple commands"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:169
+msgid ""
+"[Hatch](https://hatch.pypa.io/) is a modern, all-in-one packaging and "
+"task automation tool that simplifies Python package development by "
+"handling everything from building and publishing to running tests and "
+"formatting code. Hatch is what we use [in our packaging tutorials found "
+"in this guidebook](packaging-101)."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:174
+msgid "Why we like Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:176
+msgid ""
+"Hatch stands out because it's a single tool that handles both packaging "
+"AND task running. Instead of juggling multiple tools, you configure "
+"everything in your `pyproject.toml` file—no extra configuration files "
+"needed. Hatch creates isolated environments for different tasks (like "
+"testing or building docs) and integrates with UV for extremely fast "
+"environment setup. It uses a declarative, clean syntax that's easy to "
+"read and maintain, and it supports matrix testing so you can easily test "
+"your package across multiple Python versions."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:185
+msgid "When to use Hatch"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:187
+msgid ""
+"Hatch is ideal for complete package development workflows. You can use it"
+" for testing across Python versions, building documentation, running code"
+" formatters and linters, and building and publishing your package to "
+"PyPI. If you want a modern, all-in-one solution that follows current "
+"Python packaging standards (like PEP 621), Hatch is an excellent choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:194
+#: ../../maintain-automate/task-runners.md:251
+#: ../../maintain-automate/task-runners.md:299
+#: ../../maintain-automate/task-runners.md:344
+#: ../../maintain-automate/task-runners.md:383
+msgid "Example configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:196
+msgid ""
+"Below is an example of how you'd set up a test environment in Hatch. This"
+" configuration creates a `test` environment with pytest and pytest-cov "
+"installed, defines a `run` script to execute your tests, and sets up "
+"matrix testing to run tests on Python 3.10, 3.11, and 3.12:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:217
+#: ../../maintain-automate/task-runners.md:269
+#: ../../maintain-automate/task-runners.md:315
+#: ../../maintain-automate/task-runners.md:356
+#: ../../maintain-automate/task-runners.md:396
+msgid "You would run the above in your terminal using:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:219
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:221
+msgid "**Learn more:** [Hatch documentation](https://hatch.pypa.io/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:225
+msgid ""
+"[Nox](https://nox.thea.codes/) is a Python-based automation toolkit "
+"focused on testing across environments. It uses a code-based (imperative)"
+" configuration approach that gives you maximum flexibility for complex "
+"testing workflows."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:230
+msgid "Why we like Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:232
+msgid ""
+"Nox stands out because it uses Python code to define your tasks, which "
+"means you can include complex logic and conditionals directly in your "
+"automation workflows. Because sessions are written in Python, they're "
+"explicit, easy to inspect, and straightforward to debug. Nox is "
+"particularly powerful for handling complex test and build scenarios that "
+"some packages require, and it's especially popular in the Scientific "
+"Python ecosystem. You'll find many pyOpenSci documentation repositories "
+"use Nox to automate workflows such as building and testing documentation."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:242
+msgid "When to use Nox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:244
+msgid ""
+"Nox is ideal when you need complex testing scenarios with conditional "
+"logic or when you prefer Python-based configuration over declarative "
+"formats. It's excellent for testing across Python versions and managing "
+"multiple testing environments. If packaging is handled separately and you"
+" want maximum flexibility in your task automation, Nox is a great choice."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:253
+msgid ""
+"Below is an example of a Nox session that runs tests across multiple "
+"Python versions. The `@nox.session` decorator defines a session (similar "
+"to a task), and you specify which Python versions to test with. Nox will "
+"create isolated environments for each version and run your tests:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:271
+msgid "`nox -s tests`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:273
+msgid "**Learn more:** [Nox documentation](https://nox.thea.codes/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:277
+msgid ""
+"[Tox](https://tox.wiki/) is a mature automation tool for testing in "
+"multiple environments. It uses declarative configuration and has been a "
+"standard in the Python community for years."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:281
+msgid "Why people use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:283
+msgid ""
+"Tox is mature and stable, with a long history in the Python ecosystem. It"
+" uses declarative configuration (traditionally INI format, though TOML "
+"support was added recently) and is particularly good for testing across "
+"Python versions and dependency sets. Many projects use Tox because it "
+"integrates well with CI/CD systems and has a robust plugin ecosystem."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:290
+msgid "When to use Tox"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:292
+msgid ""
+"Tox is ideal if you're maintaining a legacy project that already uses it,"
+" or if you have existing `tox.ini` configuration you want to preserve. "
+"It's also a good choice if you need specific Tox plugins or prefer "
+"declarative configuration separate from your packaging tools. However, "
+"keep in mind that Tox can be slower than modern alternatives like Hatch."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:301
+msgid ""
+"Below is an example of a Tox configuration that runs tests across "
+"multiple Python versions. The `envlist` specifies which Python versions "
+"to test, and the `testenv` section defines what to install and run:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:317
+msgid ""
+"`tox` (runs all environments) or `tox -e py310` (runs a specific "
+"environment)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:319
+msgid "**Learn more:** [Tox documentation](https://tox.wiki/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:323
+msgid ""
+"[Make](https://www.gnu.org/software/make/) is a traditional build "
+"automation tool that uses Makefiles. It's been around since the 1970s and"
+" is widely used across many programming languages."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:327
+msgid "Why people use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:329
+msgid ""
+"Make is widely known and available on most systems, making it a familiar "
+"choice for many developers. It has simple syntax for basic tasks and "
+"executes very quickly. Because it's not Python-specific, you can use it "
+"to coordinate tasks across different languages in the same project."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:335
+msgid "When to use Make"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:337
+msgid ""
+"Make is best for simple task automation when you don't need Python-"
+"specific features or environment management. It's a good lightweight "
+"option if you want something fast and universally available. However, be "
+"aware that Make can have cross-platform compatibility issues, especially "
+"on Windows, and you'll need to handle Python environment management "
+"separately."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:346
+msgid ""
+"Below is an example of a simple Makefile with tasks for testing and "
+"building documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:358
+msgid "`make test` or `make docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:362
+msgid ""
+"[Just](https://just.systems/) is a modern command runner written in Rust "
+"that offers a simpler, more user-friendly alternative to Make."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:365
+msgid "Why people use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:367
+msgid ""
+"Just has simple, Make-like syntax but with better error messages and more"
+" intuitive behavior. It's fast, truly cross-platform (unlike Make), and "
+"easy to learn. The tool is written in Rust, which makes it very "
+"performant, and it avoids many of the quirks and gotchas that Make has "
+"accumulated over decades."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:373
+msgid "When to use Just"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:375
+msgid ""
+"Just is ideal when you need a lightweight command runner for simple tasks"
+" and don't require Python-specific features or environment management. "
+"It's a great choice if you want something faster and more modern than "
+"Make, with better cross-platform support. However, keep in mind that Just"
+" requires separate installation and has less integration with the Python "
+"packaging ecosystem compared to tools like Hatch or Nox."
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:385
+msgid ""
+"Below is an example of a justfile with tasks for testing and building "
+"documentation:"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:398
+msgid "`just test` or `just docs`"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:400
+msgid "**Learn more:** [Just documentation](https://just.systems/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:402
+msgid "Choosing the right task runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:404
+msgid "**Choose Hatch if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:406
+msgid "You're building a Python package"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:407
+msgid "You want an all-in-one tool"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:408
+msgid "You prefer configuration in pyproject.toml"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:409
+msgid "You want fast environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:410
+msgid "You prefer declarative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:412
+msgid "**Choose Nox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:414
+msgid "You need complex testing scenarios with conditional logic"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:415
+msgid "You prefer Python-based, imperative configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:416
+msgid "You're working in the Scientific Python ecosystem"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:417
+msgid "Packaging is handled separately"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:418
+msgid "You want maximum flexibility"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:420
+msgid "**Choose Tox if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:422
+msgid "You're maintaining a legacy project already using it"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:423
+msgid "You have existing tox.ini configuration"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:424
+msgid "You need specific tox plugins"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:425
+msgid "You prefer declarative configuration separate from packaging"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:427
+msgid "**Choose Make or Just if:**"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:429
+msgid "You need a lightweight command runner"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:430
+msgid "You're not doing Python-specific workflows"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:431
+msgid "You want something simple and fast"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:432
+msgid "You don't need environment management"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:434
+msgid "Next steps"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:436
+msgid ""
+"Learn how to use [Hatch "
+"environments](https://hatch.pypa.io/latest/tutorials/environment/basic-"
+"usage/)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:437
+msgid ""
+"[Create a package using the Python package tutorial.](create-pure-python-"
+"package)"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:438
+msgid ""
+"Explore and use the [pyOpenSci package "
+"template](https://github.com/pyOpenSci/pyos-package-template) with pre-"
+"configured Hatch tasks"
+msgstr ""
+
+#: ../../maintain-automate/task-runners.md:441
+msgid ""
+"Read the [Scientific Python development guide on task "
+"runners](https://learn.scientific-python.org/development/guides/tasks/). "
+"This guide is excellent if you plan to use nox as your task runner as it "
+"has lots of examples that you can follow."
+msgstr ""
diff --git a/locales/it/LC_MESSAGES/package-structure-code.po b/locales/it/LC_MESSAGES/package-structure-code.po
new file mode 100644
index 000000000..84b426941
--- /dev/null
+++ b/locales/it/LC_MESSAGES/package-structure-code.po
@@ -0,0 +1,5442 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../package-structure-code/code-style-linting-format.md:1
+msgid "Python Package Code Style, Format and Linters"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:3
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:12
+msgid "Take Aways"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:5
+msgid "pyOpenSci requires authors to follow PEP 8 code format guidelines"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:6
+msgid ""
+"Setting up a code formatters like Black and isort will help you enforce "
+"PEP 8 style guidelines and also consistent, readable code format"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:7
+msgid "Some commonly used tools are: Black, Isort, flake8, Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:8
+msgid ""
+"You can also setup pre-commit hooks which will run code formatters "
+"locally each time you make a commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:10
+msgid ""
+"[precommit.ci](https://pre-commit.ci/) is a bot that you can add to your "
+"GitHub repository. It will automagically apply code format to every PR "
+"using the tools specified in your pre-commit-config.yaml file. It can "
+"save significant time and make contributions easier for new contributors."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:11
+msgid ""
+"Automation is good! By making code quality tools care of your code, you "
+"can focus on structural and high values tasks."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:14
+msgid ""
+"Consistent code format and style is useful to both your package and "
+"across the scientific Python ecosystem because using similar formats "
+"makes code easier to read."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:18
+msgid ""
+"For instance, if you saw a sentence like this one without any spaces, or "
+"punctuation, it would take your brain longer to process it."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:25
+msgid ""
+"pyOpenSci peer review process requires that you to follow standard "
+"[Python PEP 8 format rules](https://peps.python.org/pep-0008/) as closely"
+" as you can."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:29
+msgid ""
+"pyOpenSci doesn't require you to use a specific code format tool. "
+"However, we do look for consistency and readability in code style. Below "
+"you will find a discussion of:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:33
+msgid "The benefits of using linters and code format tools in your workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:34
+msgid "Some commonly used tools in the scientific Python space"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:35
+msgid ""
+"Setting up pre-commit hooks and the pre-commit.ci bot to make using code "
+"format tools in daily workflows and in pull requests on GitHub easier."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:39
+msgid "Use a code format tool (or tools) to make your life easier"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:41
+msgid ""
+"We suggest that you use a code format tool, or a set of format tools, "
+"because manually applying all of the PEP 8 format specifications is both "
+"time consuming for maintainers and can be a road block for potential new "
+"contributors. Code formatters will automagically reformat your code for "
+"you, adhering to PEP 8 standards and applying consistent style decisions "
+"throughout."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:47
+msgid "Setting up a code format suite of tools will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:49
+msgid "Save you and your maintainer team time in fixing PEP 8 inconsistencies."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:50
+msgid "Ensure that format and style is consistent across your entire code-base."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:51
+msgid ""
+"Avoid lengthy discussions with contributors and other maintainers about "
+"personalized code format preferences during reviews."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:53
+msgid ""
+"Avoid pure visual edits in the code base so that code reviews focus on "
+"added value"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:55
+msgid ""
+"Many packages use a suite of tools to apply code format rules, taking the"
+" work out of manually implementing code format requirements."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:58
+msgid ""
+"Consistent code format across packages within the (scientific) Python "
+"ecosystem, will also broadly make code easier to scan, understand and "
+"contribute to."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:61
+msgid "Linting vs. format and style"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:63
+msgid "Before we dive in let's get a few definitions out of the way."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:65
+msgid "Code linting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:67
+msgid ""
+"A code linter is a tool that will review your code and identify errors or"
+" issues. A linter typically does not modify your code. It will tell you "
+"what the error is and on what line it was discovered. Flake8, discussed "
+"below, is an example of a commonly-used code linter."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:72
+msgid "Code formatters (and stylers)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:74
+msgid ""
+"Code formatters will reformat your code for you. Python focused code "
+"formatters often follow PEP 8 standards. However, they also make "
+"stylistic decisions about code consistency."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:78
+msgid ""
+"Black is an example of a commonly-used code formatter. Black both applies"
+" PEP 8 standards while also making decisions about things like consistent"
+" use of double quotes for strings, and spacing of items in lists."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:82
+msgid "You will learn more about Black below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:84
+msgid "Code linting, formatting and styling tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:87
+msgid "Black"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:89
+msgid ""
+"[Black](https://black.readthedocs.io/en/stable/) is a code formatter. "
+"Black will automagically (and _unapologetically_) fix spacing issues and "
+"ensure code format is consistent throughout your package. Black also "
+"generally adheres to PEP 8 style guidelines with some exceptions. A few "
+"examples of those exceptions are below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:95
+msgid ""
+"Black defaults to a line length of 88 (79 + 10%) rather than the 79 "
+"character `PEP 8` specification. However, line length is a setting can be"
+" manually overwritten in your Black configuration."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:96
+msgid "Black will not adjust line length in your comments or docstrings."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:97
+msgid ""
+"This tool will not review and fix import order (you need `isort` or "
+"`ruff` to do that - see below)."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:100
+msgid ""
+"If you are interested in seeing how Black will format your code, you can "
+"use the [Black playground](https://black.vercel.app/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:104
+msgid ""
+"Using a code formatter like Black will leave you more time to work on "
+"code function rather than worry about format."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:108
+msgid "Flake8"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:110
+msgid ""
+"To adhere to Python `pep8` format standards, you might want to add "
+"[flake8](https://flake8.pycqa.org/en/latest/) to your code format "
+"toolbox."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:114
+msgid "flake8 will:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:116
+msgid ""
+"Flag every line in your code that extends beyond 79 characters (including"
+" those in docstrings and comments)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:117
+msgid ""
+"Flag spacing issues that conflict with PEP 8 guidelines such as missing "
+"spaces after commas"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:119
+msgid ""
+"Flake8 also flags unused imports and unused declared variables in your "
+"modules."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:122
+msgid ""
+"Below you can see the output of running `flake8 filename.py` at the "
+"command line for a Python file within a package called `stravalib`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:126
+msgid "The line length standard for PEP 8 is 79 characters."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:128
+msgid ""
+"Notice that flake8 returns a list of issues that it found in the model.py"
+" module on the command line. The Python file itself is not modified. "
+"Using this output, you can fix each issue line by line manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:143
+msgid "Isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:145
+msgid ""
+"Python imports refer to the Python packages that a module in your package"
+" requires. Imports should always be located at the top of each Python "
+"module in your package."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:149
+msgid ""
+"[PEP 8 has specific standards for the order of these "
+"imports](https://peps.python.org/pep-0008/#imports). These standards are "
+"listed below:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:151
+msgid "Imports should be grouped in the following order:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:153
+msgid "Standard library imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:154
+msgid "Related third party imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:155
+msgid "Local application/library specific imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:157
+msgid ""
+"While `flake8` will identify unused imports in your code, it won't fix or"
+" identify issues with the order of package imports."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:160
+msgid ""
+"`isort` will identify where imports in your code are out of order. It "
+"will then modify your code, automatically reordering all imports. This "
+"leaves you with one less thing to think about when cleaning up your code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:165
+msgid "Example application of isort"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:167
+msgid "Code imports before `isort` is run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:169
+msgid ""
+"Below, the `pandas` is a third party package, `typing` is a core `Python`"
+" package distributed with `Python`, and `examplePy.temperature` is a "
+"first-party module which means it belongs to the same package as the file"
+" doing the import. Also notice that there are no spaces in the imports "
+"listed below."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:179
+msgid "From the project root, run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:185
+msgid "Python file `temporal.py` imports after `isort` has been run"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:193
+msgid "Ruff"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:195
+msgid ""
+"[Ruff](https://docs.astral.sh/ruff/) is a new addition to the code "
+"quality ecosystem, gaining some traction since its release. `ruff` is "
+"both a linter and a code formatter for Python, aiming to replace several "
+"tools behind a single interface. As such, `ruff` can be used at a "
+"replacement of all other tools mentioned here, or in complement to some "
+"of them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:201
+msgid ""
+"`ruff` has some interesting features that distinguish it from other "
+"linters:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:203
+msgid "Linter configuration in `pyproject.toml`"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:204
+msgid "Several hundred rules included, many of which are automatically fixable"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:205
+msgid ""
+"Rules explanation, see [F403](https://docs.astral.sh/ruff/rules"
+"/undefined-local-with-import-star/) for an example"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:206
+msgid ""
+"Fast execution time, makes a quick feedback loop possible even on large "
+"projects."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:208
+msgid ""
+"Here is a simple configuration to get started with `ruff`. It would go "
+"into your `pyproject.toml`:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:216
+msgid ""
+"Depending on your project, you might want to add the following to sort "
+"imports correctly:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:224
+msgid "How to use code formatter in your local workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:226
+msgid "Linters, code formatters and your favorite coding tools"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:228
+msgid ""
+"Linters can be run as a command-line tool as shown above. They also can "
+"be run within your favorite coding tool (e.g. VScode, pycharm, etc). For "
+"example, you might prefer to have tools like Black and isort run when you"
+" save a file. In some editors you can also setup shortcuts that run your "
+"favorite code format tools on demand."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:234
+msgid "Use pre-commit hooks to run code formatters and linters on commits"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:236
+msgid "You can also setup a `pre-commit hook` in your Python package repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:238
+msgid ""
+"A pre-commit hook is a tool that allows an action (or actions) to be "
+"triggered when you apply a commit to your git repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:241
+msgid "Pre-commit hook example workflow"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:243
+msgid "The precommit workflow looks like this: You type and run:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:246
+msgid "`git commit -m \"message here\"` at the command line"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:248
+msgid ""
+"Once you hit return, pre-commit will run any tools that you have "
+"configured in a **.pre-commit-config.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:250
+msgid ""
+"If the tools configured in the pre-commit hook run successfully without "
+"making changes or finding errors in your code, the commit will be applied"
+" to the repository."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:254
+msgid ""
+"If the tools configured in the hook find errors in your files, the commit"
+" will NOT be applied to the repository. Remember from the discussion "
+"above that a code formatter like Black will run and reformat your code. A"
+" linter like _flake8_ will provide you with some output that details "
+"where there are syntax issues in your code. You will then need to fix "
+"those issues, manually."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:261
+msgid ""
+"Once all of the fixes are applied you can re-add (stage) the files to be "
+"commit. And re-run your commit."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:265
+msgid "Diagram showing the steps of a pre-commit workflow from left to right."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:267
+msgid ""
+"The pre-commit workflow begins with you adding files that have changes to"
+" be staged in git. Next, you'd run git commit. When you run git commit, "
+"the pre-commit hooks will then run. In this example, Black, the code "
+"formatter and flake8, a linter both run. If all of the files pass Black "
+"and flake8 checks, then your commit will be recorded. If they don't, the "
+"commit is canceled. You will have to fix any flake8 issues, and then re-"
+"add / stage the files to be committed. [_Image "
+"Source_](https://ljvmiranda921.github.io/notebook/2018/06/21/precommits-"
+"using-black-and-flake8/)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:280
+msgid ""
+"If have a Python code-base and multiple maintainers actively working on "
+"the code, and you intend to run a tool like Black, be sure to coordinate "
+"across your team. An initial commit that applies Black to your entire "
+"package will likely change a significant amount of your code. This could "
+"lead to merge conflicts on open and new PR's before the new changes are "
+"merged."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:287
+msgid "General pre commit checks"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:289
+msgid ""
+"In addition to calling tools, Pre-commit also has a suite of [built in "
+"format hooks](https://github.com/pre-commit/pre-commit-hooks#hooks-"
+"available) that you can call. Some, such as `trailing-whitespace` can be "
+"also useful to add to your pre-commit workflow to ensure clean, "
+"streamlined code files."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:294
+msgid ""
+"An example pre-commit-config.yaml file is below with examples of how this"
+" is all setup."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:297
+msgid "Pre-commit.ci"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:299
+msgid ""
+"[Pre-commit.ci](https://pre-commit.ci) is a bot that may become your new "
+"best friend. This bot, when setup on a repo can be configured to do the "
+"following:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:302
+msgid "It will check every pull request using all of the pre-commit hook setting"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:303
+msgid ""
+"If you wish, it will also submit a pull request to your repo with pre-"
+"commit fixes, saving you, and new contributors the time of reformatting a"
+" pr that has format issues."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:306
+msgid "You can also call the bot on any pull request to run / and fix the code."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:308
+msgid ""
+"The pre-commit.ci bot uses the same pre-commit-config.yaml file that you "
+"use to setup pre-commit locally."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:311
+msgid "Setting up a bot like this can be valuable because:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:313
+msgid ""
+"It can make is easier for maintainers as they no longer have to worry at "
+"allows about fixing code format. The bot will do the work for them."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:315
+msgid ""
+"It can make it easier for new comers as they never have to setup pre-"
+"commit locally or worry about linting their code. They can even make "
+"small fixes to the code directly on GitHub without worry."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:317
+msgid "Setting up a git pre-commit hook"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:319
+msgid "To setup pre-commit locally, you need to do 3 things:"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:321
+msgid ""
+"Install pre-commit (and include it as a development requirement in your "
+"repository)"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:331
+msgid ""
+"Create a .pre-commit-config.yaml file in the root of your package "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:333
+msgid ""
+"Below is an example **.pre-commit-cofig.yaml** file that can be used to "
+"setup the pre-commit hook and the pre-commit.ci bot if you chose to "
+"implement that too."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:341
+msgid ""
+"This file specifies a hook that will be triggered automatically before "
+"each `git commit`, in this case, it specifies a `flake8` using version "
+"`6.0.0`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:344
+msgid ""
+"Install your pre-commit hook(s) using `pre-commit install`. This will "
+"install all of the hooks specified in the pre-commit yaml file into your "
+"environment."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:346
+msgid ""
+"Once you have done the above, you are ready to start working on your "
+"code. Pre-commit will run every time you run `git commit`."
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:349
+msgid "Summary"
+msgstr ""
+
+#: ../../package-structure-code/code-style-linting-format.md:351
+msgid ""
+"pyOpenSci suggests setting up a linter and a code styler for your "
+"package, regardless of whether you use pre-commit hooks, CI or other "
+"infrastructure to manage code format. Setting up these tools will give "
+"you automatic feedback about your code's structure as you (or a "
+"contributor) write it. And using a tool like black that format code for "
+"you, reduce effort that you need to make surrounding decisions around "
+"code format and style."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:1
+msgid "Complex Python package builds"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:3
+msgid ""
+"This guide is focused on packages that are either pure-python or that "
+"have a few simple extensions in another language such as C or C++."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:6
+msgid ""
+"For comprehensive guidance on packaging compiled projects with "
+"C/C++/Fortran/Rust extensions, see the [Scientific Python Development "
+"Guide on compiled packaging](https://learn.scientific-"
+"python.org/development/guides/packaging-compiled/). This is the best "
+"reference for complex builds and covers scikit-build-core, meson-python, "
+"maturin, and other modern build backends."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:8
+msgid ""
+"If you have questions about these types of package, please open an [issue"
+" about this guide specifically in the GitHub repo for this "
+"guide](https://github.com/pyOpenSci/python-package-guide/issues). There "
+"are many nuances to building and distributing Python packages that have "
+"compiled extensions requiring non-Python dependencies at build time. For "
+"an overview and thorough discussion of these nuances, please see [this "
+"site.](https://pypackaging-native.github.io/)"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:10
+msgid "Pure Python packages vs. packages with extensions in other languages"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:12
+msgid ""
+"You can classify Python package complexity into three general categories."
+" These categories can in turn help you select the correct package "
+"frontend and backend tools."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:16
+msgid ""
+"**Pure-python packages:** these are packages that only rely on Python to "
+"function. Building a pure Python package is simpler. As such, you can "
+"chose a tool below that has the features that you want and be done with "
+"your decision!"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:18
+msgid ""
+"**Python packages with non-Python extensions:** These packages have "
+"additional components called extensions written in other languages (such "
+"as C or C++). If you have a package with non-Python extensions, then you "
+"need to select a build backend tool that allows additional build steps "
+"needed to compile your extension code. Further, if you wish to use a "
+"frontend tool to support your workflow, you will need to select a tool "
+"that supports additional build setups. We suggest that you chose build "
+"tool that supports custom build steps like Hatch."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:20
+msgid ""
+"**Python packages that have extensions written in different languages "
+"(e.g. Fortran and C++) or that have non Python dependencies that are "
+"difficult to install (e.g. GDAL):** These packages often have complex "
+"build steps (more complex than a package with just a few C extensions for"
+" instance). As such, these packages require tools such as [scikit-"
+"build](https://scikit-build.readthedocs.io/en/latest/) or [meson-"
+"python](https://mesonbuild.com/Python-module.html) to build. NOTE: you "
+"can use meson-python with PDM."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:23
+msgid "Mixing frontend and backend projects"
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:25
+msgid ""
+"It is sometimes necessary or desirable to use a build frontend with an "
+"alternative build-backend. This is because some frontends do not have a "
+"default backend (`build`), and this choice is placed on the maintainer. "
+"Other backends (`hatch`) have a preferred backend (`hatchling`) but allow"
+" the maintainer to migrate to another, while some backends (`poetry`) "
+"only work with a single backend (`poetry-core`). Refer to (#python-"
+"package-build-tools) for more information about frontend and backend "
+"compatibility."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:31
+msgid ""
+"In this packaging guide we recommend using `hatch` along with its "
+"preferred backend `hatchling`. While this will be suitable for most "
+"packages, an alternate backend may be used with Hatch if needed when "
+"creating an extension module. A Python extension module is one that is "
+"made up, either in part or entirely, of compiled code. In this case the "
+"backend chosen (such as `meson-python`) must know how to compile the "
+"extension language and bind it to Python. `hatchling` does not know how "
+"to do this all on its own and must either make use of "
+"[plugins](https://hatch.pypa.io/1.9/plugins/about/) or be replaced by a "
+"backend that is already capable of building extension modules."
+msgstr ""
+
+#: ../../package-structure-code/complex-python-package-builds.md:39
+msgid ""
+"In order to use a different backend you will need to edit your project's "
+"`pyproject.toml`. If you have a `pyproject.toml` generated by the `hatch`"
+" command, or from following the packaging tutorial, you may have to make "
+"a change like this"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:6
+msgid "Dependencies for your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:8
+msgid ""
+"In the [pyproject.toml overview page](pyproject-toml-python-package-"
+"metadata), you learned how to set up a **pyproject.toml** file with basic"
+" metadata for your package. On this page, you will learn how to specify "
+"different types of dependencies in your `pyproject.toml`."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:14
+msgid "What is a package dependency?"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:16
+msgid ""
+"A Python package dependency refers to an external package or A tool that "
+"is needed when using or working on your Python project. Declare your "
+"dependencies in your `pyproject.toml` file. This keeps all package "
+"metadata in one place, making it simpler for users and contributors to "
+"understand your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:19
+msgid "Older ways to declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:22
+msgid ""
+"While `pyproject.toml` is now the standard, you may sometimes encounter "
+"older approaches to storing dependencies \"in the wild\":"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:24
+msgid ""
+"**requirements.txt**: Previously common for dependencies, still used by "
+"some projects for local development"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:25
+msgid ""
+"**setup.py or setup.cfg**: May be needed for packages with extensions in "
+"other languages"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:27
+msgid ""
+"[Learn more in the setuptools "
+"documentation](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html"
+"#declaring-required-dependency)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:30
+msgid "Why specify dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:32
+msgid ""
+"Specifying dependencies in the `project.dependencies` array of your "
+"`pyproject.toml` file ensures that libraries needed to run your package "
+"are correctly installed into a user's environment. For instance, if your "
+"package requires Pandas to run properly, and you add Pandas to the "
+"`project.dependencies` array, Pandas will be installed into the users' "
+"environment when they install your package using uv, pip, or conda."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:45
+msgid ""
+"Development dependencies make it easier for contributors to work on your "
+"package. You can set up instructions for running specific workflows, such"
+" as tests, linting, and even typing, that automatically install groups of"
+" development dependencies. These dependencies can be stored in arrays "
+"(lists of dependencies) within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:55
+msgid "Types of dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:57
+msgid ""
+"There are three different types of dependencies that you will learn about"
+" on this page:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:59
+msgid ""
+"**Required dependencies:** These are dependencies that need to be "
+"installed for your package to work correctly in a user's environment. You"
+" add these dependencies to the `project.dependencies` table in your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:60
+msgid ""
+"**Feature Dependencies:** These are dependencies that are required if a "
+"user wants to access additional functionality (that is not core) to your "
+"package. Store these in the `[project.optional-dependencies]` table or "
+"your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:61
+msgid ""
+"**Development Dependencies:** These dependencies are required if someone "
+"wants to develop or work on your package. These include instance linters,"
+" testing tools like pytest and mypy are examples of development "
+"dependencies. Store these in the `[dependency-groups]` table of your "
+"pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:64
+msgid ""
+"A dependency is not part of your project's codebase. It is a package or "
+"software called within the code of your project or used during the "
+"development of your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:69
+msgid "1. Required dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:71
+msgid ""
+"Required dependencies are imported and called directly within your "
+"package's code. They are needed for your package to run."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:74
+msgid ""
+"You can add your required dependencies to the `dependencies` array in the"
+" `[project]` table of your **pyproject.toml** file. When users install "
+"your package with uv, pip, or conda, these dependencies will be "
+"automatically installed alongside your package in their environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:92
+msgid ""
+"Try your best to minimize dependencies whenever possible. Remember that "
+"fewer dependencies reduce the possibility of version conflicts in user "
+"environments."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add Required Dependencies with UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:102
+#: ../../package-structure-code/declare-dependencies.md:162
+#: ../../package-structure-code/declare-dependencies.md:222
+msgid "You can use uv to add dependencies to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:104
+msgid "**Add a required dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:110
+msgid "Will add numpy as a dependency to your `project.dependencies` array:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:121
+msgid "Requiring packages from GitHub / Gitlab"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:124
+msgid ""
+"If you have dependencies that need to be installed directly from GitHub, "
+"you can specify them in your pyproject.toml file like this:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:133
+msgid ""
+"IMPORTANT: If your library depends on a GitHub-hosted project, you should"
+" point to a specific commit/tag/hash of that repository before you upload"
+" your project to PyPI. You never know how the project might change over "
+"time. Commit hashes are more reliable as they can't be changed"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:140
+msgid "2. Optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:142
+msgid ""
+"Optional (also referred to as feature) dependencies can be installed by "
+"users as needed. Optional dependencies add specific features to your "
+"package that not all users need. For example, if your package has an "
+"optional interactive plotting feature that uses Bokeh, you would list "
+"Bokeh under `[project.optional-dependencies]`. Users who want interactive"
+" plotting will install it. Users who don't need plotting don't have to "
+"install it."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:144
+msgid "Place these dependencies in the `[project.optional-dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:155
+msgid ""
+"When a user installs your package, uv, pip, or conda automatically "
+"installs all required dependencies. Optional dependencies are only "
+"installed if the user explicitly requests them."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add optional dependencies using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:164
+msgid "**Add an optional dependency:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:170
+msgid "Will add this to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:181
+msgid "3. Dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:183
+msgid ""
+"Development dependencies include packages needed to work on your package "
+"locally. They are used to perform tasks such as:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:186
+msgid "running your test suite (pytest, pytest-cov)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:187
+msgid "building your documentation (sphinx, sphinx-theme packages)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:188
+msgid "linting and formatting code (ruff, black)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:189
+msgid "building package distribution files (build, twine)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:191
+msgid ""
+"Dependency groups are optional because they are not required for users to"
+" install and use your package. However, they will make it easier for "
+"contributors to your project to setup development environments locally."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:196
+msgid "New: PEP 735 dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:199
+msgid ""
+"`[dependency-groups]` is a newer specification introduced by PEP 735. "
+"They are intended to organize development dependencies and are "
+"intentionally separate from `[project.optional-dependencies]`, which can"
+" be installed into a user's environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:203
+msgid "How to declare dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:205
+msgid ""
+"You declare development dependencies in your **pyproject.toml** file "
+"within a `[dependency-groups]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:208
+msgid ""
+"Similar to optional-dependencies, you can create separate subgroups or "
+"arrays with names using the syntax: `group-name = [\"dep1\", \"dep2\"]`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "How to Add [dependency-groups] using UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:224
+msgid "**Add a development dependency group:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:231
+msgid "Will add the following to your pyproject.toml file:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:244
+#: ../../package-structure-code/declare-dependencies.md:250
+#: ../../package-structure-code/declare-dependencies.md:294
+#: ../../package-structure-code/declare-dependencies.md:413
+#: ../../package-structure-code/declare-dependencies.md:495
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:14
+msgid "Todo"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:245
+msgid ""
+"i'll pick back up here tomorrow - this section is all about how things "
+"install and what \"ships\" with your package vs what just gets installed "
+"via commands (ie development)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:248
+msgid "Understanding required vs. optional dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:251
+msgid ""
+"The purpose of this section is to help users understand how dependencies "
+"relate to what is installed in their environment. We have two graphics on"
+" this page - one that breaks out the two buckets of tools (required and "
+"optional) that both get installed into a user's envt vs development "
+"groups, which are contributor/ development facing, not user-facing. When "
+"we originally wrote this section, development groups didn't exist, and we"
+" were using optional dependencies for dev groups."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:253
+msgid ""
+"The graphic below is two circles representing optional vs regular / "
+"required deps - created before development groups existed... there is "
+"another graphi that shows what gets installed into a uses envt."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:257
+msgid ""
+"Diagram showing two main groups of Python package dependencies: required "
+"and optional. Required dependencies include core packages needed to use "
+"your package. Optional dependencies include development dependencies for "
+"working on the package locally and feature dependencies for additional "
+"functionality."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:259
+msgid ""
+"Python package dependencies fall into two categories: **required** "
+"dependencies that users need to run your package, and **optional** "
+"dependencies for development work or additional features."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:264
+msgid "Additional dependency resources"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:266
+msgid ""
+"[Learn more: View PyPA's overview of declaring optional "
+"dependencies](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/#dependencies-optional-dependencies)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:267
+msgid ""
+"[Dependency "
+"specifiers](https://packaging.python.org/en/latest/specifications"
+"/dependency-specifiers/)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:271
+msgid "Install dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:273
+msgid ""
+"When someone installs your package, only core dependencies are installed "
+"by default. To install optional dependencies, you need to specify which "
+"groups to include when installing the package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:279
+msgid ""
+"Diagram showing a Venn diagram with three sections representing "
+"dependency groups - docs, feature, and tests. In the center it shows "
+"your-package with core dependencies seaborn and numpy. Two arrows on the "
+"right demonstrate: first, python -m pip install your-package installs "
+"only the package and core dependencies. Second, python -m pip install "
+"your-package[tests] installs the package, core dependencies, and test "
+"dependencies including pytest and pytest-cov."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:281
+msgid ""
+"When a user installs your package using `pip install your-package`, only "
+"your package and its core dependencies get installed. When they install "
+"with `pip install your-package[tests]`, pip will install your package, "
+"core dependencies, and the test dependencies from the `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:288
+msgid "Using uv or pip for installation"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:290
+msgid ""
+"UV streamlines this process, allowing you to sync a venv in your project "
+"directory with both an editable install of your package and its "
+"dependencies automatically. You can also use pip and install dependencies"
+" into the environment of your choice."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:295
+msgid ""
+"We shouldn't show UV pip install, so how do you add optional feature deps"
+" with UV??"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:298
+#: ../../package-structure-code/declare-dependencies.md:340
+msgid "**Install dependency groups:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use UV"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:304
+msgid "You can use uv sync to sync dependency groups in your uv-managed venv"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:312
+#: ../../package-structure-code/declare-dependencies.md:333
+msgid "**Install optional dependencies:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:320
+msgid "**Install everything (package + all dependencies):**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:326
+msgid ""
+"`uv sync` is the recommended command for development workflows. It "
+"manages your virtual environment and keeps your lockfile up to date. Use "
+"`uv pip install` when you need pip-compatible behavior."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "Use pip (version >=25.1)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:347
+msgid ""
+"Always call pip using `python -m pip` to ensure you're using the pip from"
+" your current active Python environment. This helps avoid installation "
+"conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:351
+msgid ""
+"**Note:** Some shells (like zsh on Mac) require quotes around brackets to"
+" run successfully:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:353
+msgid "`python -m pip install \".[tests]\"`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:359
+msgid "Combining dependency groups"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:361
+msgid "You can also create combined groups that reference other groups:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:370
+msgid "Then install everything with pip install or uv sync as needed:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:379
+msgid ""
+"When you install optional dependencies, pip and uv install your package "
+"and its core dependencies automatically."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:383
+msgid "Version specifiers for dependencies"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:385
+msgid ""
+"Version specifiers control which versions of a dependency work with your "
+"package. Use them to specify minimum versions, exclude buggy releases, or"
+" set version ranges."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:389
+msgid "Common operators"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:391
+msgid ""
+"**`>=`** Minimum version set: `numpy>=1.20` (This is the most common "
+"approach and is recommended)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:392
+msgid ""
+"**`==`** Exact version: `requests==2.28.0` (Avoid pinning dependencies "
+"like this unless necessary)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:393
+msgid ""
+"**`~=`** Compatible release: `django~=4.2.0` (Allows patches: "
+">=4.2.0,<4.3.0)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:394
+msgid "**`<` or `>`** - Upper/lower bounds: `pandas>=1.0,<3.0`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:395
+msgid ""
+"**`!=`** Exclude version: `scipy>=1.7,!=1.8.0` (Rare but allows you to "
+"skip a buggy release version)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:398
+msgid ""
+"**Best practice:** Use `>=` to specify your minimum tested version and "
+"avoid upper bounds unless you know at what version that dependency is no "
+"longer compatible. UV will do this by default when it adds a dependency "
+"to your pyproject.toml file. This keeps your package flexible and reduces"
+" dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:414
+msgid "Using conda and Pixi"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:418
+msgid ""
+"The `pyproject.toml` file works great for pure-Python packages. However, "
+"some packages (particularly in the scientific Python ecosystem) require "
+"dependencies written in other languages like C or Fortran. Conda was "
+"created to support the distribution of tools with non-Python "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:423
+msgid "**For conda users:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:425
+msgid ""
+"You can maintain an `environment.yml` file to help users and contributors"
+" set up conda environments. This is especially useful for packages with "
+"system-level dependencies like GDAL."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:429
+msgid "**Consider Pixi for conda package focused workflows:**"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:431
+msgid ""
+"[Pixi](https://pixi.sh) is a modern package manager built on top of both "
+"the conda and Python package ecosystems. Pixi is able to treat conda and "
+"Python package requirements with parity when resolving environments, but "
+"uses a \"conda-first\" approach of using already resolved conda packages "
+"if possible when resolving Python dependencies. Pixi [can also use "
+"`pyproject.toml` for "
+"configuration](https://pixi.sh/latest/python/pyproject_toml/). If your "
+"project relies heavily on conda packages, Pixi offers a streamlined "
+"workflow with faster dependency resolution and automatic lock file "
+"support for full environment reproducibility. If you already have an "
+"existing conda environment definition file, like an `environment.yml`, "
+"you can [import the "
+"environment](https://pixi.sh/latest/tutorials/import/) into a new Pixi "
+"workspace with"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:449
+msgid "A note for conda users"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:452
+msgid ""
+"If you use a conda environment for development and install your package "
+"with `python -m pip install -e .` dependencies will be installed from "
+"PyPI, potentially overwriting conda packages that had already been "
+"installed. This can cause conflicts, especially for packages with system "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:457
+msgid "To avoid this, install your package without dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:463
+msgid "Then install dependencies through your conda `environment.yml` file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:466
+msgid "Dependencies in Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:468
+msgid ""
+"Once you've specified dependencies in your `pyproject.toml`, you can use "
+"them in other workflows like building documentation on Read the Docs."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:471
+msgid ""
+"[Read the Docs](https://readthedocs.org) is a documentation platform that"
+" automatically builds and publishes your documentation. To install your "
+"dependencies during the build process, configure them in a "
+"**readthedocs.yaml** file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:476
+msgid "Here's an example that installs your `docs` optional dependencies:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:487
+msgid "Learn more about Read the Docs"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:490
+msgid ""
+"[Creating a readthedocs.yaml file](https://docs.readthedocs.io/en/stable"
+"/config-file/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:491
+msgid ""
+"[Using uv with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:492
+msgid ""
+"[Using Poetry with Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html#install-dependencies-with-poetry)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:497
+msgid ""
+"Keep this comment - in this file for now - Jeremiah "
+"did a nice inventory of common shells and whether they need quotes or "
+"not. It's really comprehensive. But do we want it in the guide?? It's "
+"really useful for more advanced users."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:499
+msgid ""
+"Following this comment: "
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:502
+msgid "Jonny will add a section that talks about:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:504
+msgid ""
+"Why you specify dependencies How to specify dependencies When you use "
+"different specifiers"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Intro"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Python package structure"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "pyproject.toml Package Metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Declare dependencies"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Package Build Tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Complex Builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:163
+msgid "Create & Build Your Package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish with Conda / PyPI"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Package versions"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Code style"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:177
+msgid "Publish your package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:1
+msgid "Python Package Structure & Code"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:3
+msgid ""
+"This section covers everything you need to structure your Python package,"
+" configure metadata, choose build tools, and publish your package to PyPI"
+" and conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:9
+msgid "New to Python packaging?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:13
+msgid "**Start with our step-by-step tutorials:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:15
+msgid "Follow along as we create a package from scratch"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:16
+msgid "Learn by doing with guided examples"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:17
+msgid "Perfect for your first package"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:19
+msgid "Start the tutorial series"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:27
+msgid "Already have code to package?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:30
+msgid "**Jump into the reference guides:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:32
+msgid "Learn about package structure and metadata"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:33
+msgid "Compare build tools and choose what's right for you"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:34
+msgid "Understand the publishing process"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:36
+msgid "Start with the cards below ↓"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:40
+msgid "How this content is developed"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:43
+msgid ""
+"All of the content in this guide has been vetted by community members, "
+"including maintainers and developers of the core packaging tools."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:46
+msgid "What you'll learn"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:48
+msgid "In this section, you'll learn how to:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:50
+msgid ""
+"**Structure your package** - Choose between src and flat layouts, "
+"organize tests and documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:51
+msgid ""
+"**Configure metadata** - Set up `pyproject.toml` with project "
+"information, dependencies, and versioning"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:52
+msgid ""
+"**Choose build tools** - Compare Hatch, PDM, Poetry, and setuptools to "
+"find the right fit"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:53
+msgid ""
+"**Build distributions** - Create sdist and wheel files ready for "
+"publication"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:54
+msgid ""
+"**Publish your package** - Make your package available on PyPI and "
+"optionally conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:55
+msgid ""
+"**Maintain code quality** - Set up linters and formatters to keep your "
+"code consistent"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:57
+msgid ""
+"Our recommendations align with current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/), while "
+"prioritizing tools that are beginner-friendly and well-maintained."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:59
+msgid "Package setup"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:66
+msgid "✨ Package file structure ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:68
+msgid ""
+"Learn how to organize your package files using [src or flat layouts"
+"](package-source-layout). This page helps you decide on a package "
+"structure that follows modern Python best practices, including where to "
+"place [tests](src-layout-test) and [documentation](package-source-"
+"layout)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:71
+msgid "✨ Add metadata ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:73
+msgid ""
+"Learn how to add [project metadata](pyproject-toml-python-package-"
+"metadata) to your Python package to support both filtering on PyPI and "
+"also the metadata that a package installer needs to build and install "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:78
+msgid "✨ Declare dependencies ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:80
+msgid ""
+"Learn how to specify [required dependencies](required-dependencies), "
+"[optional feature dependencies](optional-dependencies), and [development "
+"dependencies](dependency-groups) in your [pyproject.toml file](pyproject-"
+"toml-overview)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:83
+msgid "✨ Setup package versioning ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:85
+msgid ""
+"Learn how to manage package versions using [semantic versioning (SemVer"
+")](package-versioning) or [calendar versioning (CalVer)](package-"
+"versioning). This page helps you choose the right versioning strategy and"
+" set up [automated version management](tools-version-management) using "
+"tools like hatch_vcs or setuptools-scm."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:89
+msgid "Development practices"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:96
+msgid "✨ Code style & linters ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:98
+msgid ""
+"Learn how to set up [code formatters and linters](code-style-tools) "
+"([Black](about-black), [Ruff](about-ruff), [flake8](about-flake8)) to "
+"ensure your package follows [PEP 8 standards](code-style-tools) and "
+"maintains consistent code style throughout your project."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:102
+msgid "Build & publish"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:109
+msgid "✨ Choose your build tool ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:111
+msgid ""
+"Learn how to choose the right packaging tool for your project. Compare "
+"[Hatch](about-hatch), [PDM](about-pdm), [Poetry](about-poetry), and "
+"[setuptools](about-setuptools) to find the best fit for your workflow. "
+"See the [summary comparison](summary-build-tools) to help decide."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:114
+msgid "✨ Build your package ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:116
+msgid ""
+"Learn how to build your Python package into [distribution files](build-"
+"package) ([sdist](python-source-distribution) and [wheel](python-wheel)) "
+"that can be published on [PyPI](publish-pypi-conda)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:119
+msgid "✨ Publish to PyPI and Conda ✨"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:121
+msgid ""
+"Learn how to publish your package to [PyPI](publish-pypi-conda) and "
+"optionally to [conda-forge](how-to-submit-to-conda-forge). This page "
+"covers the complete process for making your package available to users, "
+"including the [conda-forge submission process](how-to-submit-to-conda-"
+"forge) after publishing to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:125
+msgid "Choosing the right tools"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:127
+msgid ""
+"Not sure which build tool to use? This decision tree can help you choose "
+"based on your package's needs:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:131
+msgid ""
+"Figure showing a decision tree with the various packaging tool front-end "
+"and back-end options."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:133
+msgid ""
+"Use this decision tree to help select a packaging tool. See the "
+"[packaging tools page](python-package-build-tools) for detailed "
+"comparisons and recommendations."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:136
+msgid "Our recommendations"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:138
+msgid "We suggest tools and approaches based on three principles:"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:140
+msgid ""
+"**Beginner-friendly** - Tools that are easy to learn and use for those "
+"new to packaging"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:141
+msgid "**Well-maintained** - Tools with active development and good documentation"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:142
+msgid ""
+"**Standards-aligned** - Tools that follow current [Python packaging "
+"standards](https://packaging.python.org/en/latest/) and [Scientific "
+"Python community specs](https://scientific-python.org/specs/)"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:144
+msgid "Pure Python vs. complex builds"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:146
+msgid ""
+"**Pure Python packages** can use any modern tool (Hatch, PDM, Poetry, "
+"Flit) - choose based on the features you want"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:147
+msgid ""
+"**Packages with C/C++ extensions** may need additional build steps. See "
+"our [complex builds page](complex-python-package-builds) for guidance. "
+"For comprehensive information on packaging compiled projects, see the "
+"[Scientific Python Development Guide on compiled packaging](https://learn"
+".scientific-python.org/development/guides/packaging-compiled/)."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:149
+msgid ""
+"Most scientific Python packages start simple and can evolve to handle "
+"more complex requirements as needed."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:151
+msgid "Submitting your package for peer review?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:153
+msgid ""
+"If you're planning to submit your package to pyOpenSci for [peer "
+"review](https://www.pyopensci.org/about-peer-review/index.html), check "
+"out our [editor checklist](https://www.pyopensci.org/software-peer-review"
+"/how-to/editor-in-chief-guide.html#editor-checklist-template) for the "
+"minimum requirements. These checks are useful for anyone creating a "
+"Python package, not just those submitting for review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:155
+msgid "These are recommendations, not requirements"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:158
+msgid ""
+"The suggestions in this guide are designed to help you create a well-"
+"structured package. They are **not** specific requirements for pyOpenSci "
+"peer review."
+msgstr ""
+
+#: ../../package-structure-code/intro.md:160
+msgid ""
+"If you're submitting to pyOpenSci, see our [package "
+"scope](https://www.pyopensci.org/software-peer-review/about/package-"
+"scope.html) and [author guide](https://www.pyopensci.org/software-peer-"
+"review/how-to/author-guide.html#) for actual review requirements."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:1
+msgid "Publishing Your Package In A Community Repository: PyPI or Anaconda.org"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:5
+msgid ""
+"pyOpenSci requires that your package has an distribution that can be "
+"installed from a public community repository such as PyPI or a conda "
+"channel such as `bioconda` or `conda-forge` on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:9
+msgid ""
+"Below you will learn more about the various publishing options for your "
+"Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:14
+msgid ""
+"Installing packages in the same environment using both pip and conda can "
+"lead to package conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:16
+msgid ""
+"To minimize conflicts for users who may be using conda (or pip) to manage"
+" local environments, consider publishing your package to both PyPI and "
+"the conda-forge channel on Anaconda.org."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:18
+msgid ""
+"Below you will learn more specifics about the differences between PyPI "
+"and conda publishing of your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:23
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:6
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:25
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires a source distribution on PyPI in order to build"
+" your package on conda-forge. You do not need to rebuild your package to "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:29
+msgid "What is PyPI"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:31
+msgid ""
+"[PyPI](https://pypi.org/) is an online Python package repository that you"
+" can use to both find and install and publish your Python package. There "
+"is also a test PyPI repository where you can test publishing your package"
+" prior to the final publication on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:36
+msgid ""
+"Many if not most Python packages can be found on PyPI and are thus "
+"installable using `pip`."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:38
+msgid ""
+"The biggest different between using pip and conda to install a package is"
+" that conda can install any package regardless of the language(s) that it"
+" is written in. Whereas `pip` can only install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:43
+msgid "Click here for a tutorial on publishing your package to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:51
+msgid ""
+"On the package build page, we discussed the [two package distribution "
+"types that you will create when making a Python package](python-package-"
+"distribution-files-sdist-wheel): SDist (packaged as a .tar.gz or .zip) "
+"and Wheel (.whl) which is really a zip file. Both of those file "
+"\"bundles\" will be published on PyPI when you use [a standard build tool"
+"](python-package-build-tools) to build your package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:59
+msgid "What is conda and Anaconda.org?"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:61
+msgid ""
+"conda is an open source package and environment management tool. conda "
+"can be used to install tools from the [Anaconda "
+"repository](https://repo.anaconda.com/)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:65
+msgid ""
+"Anaconda.org contains public and private repositories for packages. These"
+" repositories are known as channels (discussed below)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:68
+msgid "A brief history of conda's evolution"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:71
+msgid ""
+"The conda ecosystem evolved years ago to provide support for, and "
+"simplify the process of, managing software dependencies in scientific "
+"Python projects."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:75
+msgid ""
+"Many of the core scientific Python projects depend upon or wrap around "
+"tools and extensions that are written in other languages, such as C++. In"
+" the early stages of the scientific ecosystem's development, these non-"
+"Python extensions and tools were not well supported on PyPI, making "
+"publication difficult. In recent years there is more support for complex "
+"builds that allow developers to bundle non-Python code into a Python "
+"distribution using the [wheel distribution format](python-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:77
+msgid ""
+"Conda provides a mechanism to manage these dependencies and ensure that "
+"the required packages are installed correctly."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:81
+msgid ""
+"While conda was originally created to support Python packages, it is now "
+"used across all languages. This cross-language support makes it easier "
+"for some packages to include and have access to tools written in other "
+"languages, such as C/C++ (gdal), Julia, or R. Creating an environment "
+"that mixes all of these packages is usually easier and more consistent "
+"with full-fledged package managers like conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:89
+msgid "conda channels"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:91
+msgid ""
+"conda built packages are housed within repositories that are called "
+"channels. The conda package manager can install packages from different "
+"channels."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:94
+msgid ""
+"There are several core public channels that most people use to install "
+"packages using conda, including:"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:97
+msgid ""
+"**defaults:** this is a channel managed by Anaconda. It is the version of"
+" the Python packages that you will install if you install the Anaconda "
+"Distribution. Anaconda (the company) decides what packages live on the "
+"`defaults` channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:98
+msgid ""
+"[**conda-forge:**](https://conda-forge.org/) this is a community-driven "
+"channel that focuses on scientific packages. This channel is ideal for "
+"tools that support geospatial data. Anyone can publish a package to this "
+"channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:99
+msgid ""
+"[**bioconda**](https://bioconda.github.io/): this channel focuses on "
+"biomedical tools."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:101
+msgid ""
+"**conda-forge** emerged as many of the scientific packages did not exist "
+"in the `defaults` Anaconda channel."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:106
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"Anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI. And test PyPI. A "
+"testbed server for you to practice."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:108
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:111
+msgid "conda channels, PyPI, conda, pip - Where to publish your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:113
+msgid ""
+"You might be wondering why there are different package repositories that "
+"can be used to install Python packages."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:116
+msgid ""
+"And more importantly you are likely wondering how to pick the right "
+"repository to publish your Python package."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:119
+msgid "The answer to both questions relates dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:123
+msgid ""
+"Image showing an XKCD comic that shows a web of Python environments and "
+"tools and installations. At the bottom is says - My python environment "
+"has become so degraded that my laptop has been declared a superfund site."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:125
+msgid ""
+"Installing Python and Python packages from different repositories can "
+"lead to environment conflicts where a version of on package doesn't work "
+"with a version of another package. To keep your environments clean and "
+"working, it's best to install packages from the same repository. So use "
+"pip to install everything. Or use conda. If you can, try to avoid "
+"installing package from both pip and conda into the same environment."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:133
+msgid "Managing Python package dependency conflicts"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:135
+msgid ""
+"Python environments can encounter conflicts because Python tools can be "
+"installed from different repositories. Broadly speaking, Python "
+"environments have a smaller chance of dependency conflicts when the tools"
+" are installed from the same package repository. Thus environments that "
+"contain packages installed from both pip and conda are more likely to "
+"yield dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:142
+msgid ""
+"Similarly installing packages from the default anaconda channel mixed "
+"with the conda-forge channel can also lead to dependency conflicts."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:144
+msgid ""
+"Many install packages directly from conda `defaults` channel. However, "
+"because this channel is managed by Anaconda, the packages available on it"
+" are limited to those that Anaconda decides should be core to a stable "
+"installation. The conda-forge channel was created to complement the "
+"`defaults` channel. It allows anyone to submit a package to be published "
+"in the channel . Thus, `conda-forge` channel ensures that a broad suite "
+"of user-developed community packages can be installed from conda."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:148
+msgid ""
+"Take-aways: If you can, publish on both PyPI and conda-forge to "
+"accommodate more users of your package"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:150
+msgid ""
+"The take-away here for maintainers is that if you anticipate users "
+"wanting to use conda to manage their local environments (which many do), "
+"you should consider publishing to both PyPI and the conda-forge channel "
+"(_more on that below_)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:155
+msgid "Additional resources"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:157
+msgid ""
+"[learn more about why conda-forge was created, here](https://conda-"
+"forge.org/docs/user/introduction.html)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:159
+msgid ""
+"[To learn more about conda terminology, check out their "
+"glossary.](https://docs.conda.io/projects/conda/en/latest/glossary.html )"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:165
+msgid "How to submit to conda-forge"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:167
+msgid ""
+"While pyOpenSci doesn't require you to add your package to conda-forge, "
+"we encourage you to consider doing so!"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:170
+msgid ""
+"Once your package is on PyPI, the process to add your package to conda-"
+"forge is straight forward to do. [You can follow the detailed steps "
+"provided by the conda-forge maintainer team.](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:174
+msgid "Click here for a tutorial on adding your package to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:181
+msgid "If you want a step by step tutorial, click here."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:183
+msgid ""
+"Once your package is added, you will have a feedstock repository on "
+"GitHub with your packages name"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:186
+msgid ""
+"[Here is an example conda-forge feedstock for the pyOpenSci approved "
+"package - movingpandas](https://github.com/conda-forge/movingpandas-"
+"feedstock)"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:189
+msgid "Maintaining your conda-forge package repository"
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:191
+msgid ""
+"Once your package is on the conda-forge channel, maintaining it is "
+"simple. Every time that you push a new version of your package to PyPI, "
+"it will kick off a continuous integration build that updates your package"
+" in the conda-forge repository. Once that build is complete, you will get"
+" a notification to review the update."
+msgstr ""
+
+#: ../../package-structure-code/publish-python-package-pypi-conda.md:197
+msgid ""
+"You can merge the pull request for that update once you are happy with "
+"it. A ready-to-merge PR usually means ensuring that your project's "
+"dependencies (known as runtime requirements) listed in the updated YAML "
+"file found in the pull request match the PyPI metadata of the new "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:2
+msgid "Use a pyproject.toml file for your package configuration & metadata"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:4
+msgid "pyproject.toml takeaways"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:6
+msgid ""
+"There are only two tables that are required for an installable Python "
+"package: **[build-system]** and **[project]**. The **[project]** table "
+"stores your package's metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:7
+msgid ""
+"There are two _required_ fields in the **[project]** table: **name=** and"
+" **version=**."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:8
+msgid ""
+"Add metadata to the classifiers section of your `pyproject.toml` file to "
+"make it easier for users to find your project on PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:9
+msgid ""
+"When you are adding classifiers to the [project] table, only use valid "
+"values from [PyPI’s classifier page](https://PyPI.org/classifiers/). An "
+"invalid value here will raise an error when you build your package or "
+"publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:10
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However fields need to be placed within the correct table sections. For "
+"example `requires =` always need to be associated with the **[build-"
+"system]** table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:16
+msgid "when these are published, remove this todo"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:25
+msgid ""
+"Need help creating your pyproject.toml file? This tutorial will walk you"
+" through the process."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:39
+msgid ""
+"Click here if need help migrating from setup.py/setup.cfg to "
+"pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:50
+msgid "About the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:52
+msgid ""
+"Every modern Python package should include a `pyproject.toml` file. For "
+"pure Python packages, this file replaces the `setup.py` and/or "
+"`setup.cfg` file to describe project metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:54
+msgid ""
+"If your project isn’t pure Python, you might still require a `setup.py` "
+"file to build the non-Python extensions. However, a `pyproject.toml` file"
+" should still be used to store your project’s metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:56
+msgid "Tutorial"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:59
+msgid ""
+"If you are migrating from a **setup.py** or **setup.cfg** file, and want "
+"help, [check out this tutorial.](migrate-pyproj) [specify build "
+"requirements and metadata is called a "
+"**pyproject.toml**](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:64
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:66
+msgid ""
+"The **pyproject.toml** file is written in [TOML (Tom's Obvious, Minimal "
+"Language) format](https://toml.io/en/). TOML is an easy-to-read structure"
+" based on key/value pairs. Each section in the **pyproject.toml** file "
+"contains a `[table identifier]`. Below that table identifier are "
+"key/value pairs that support configuration for that particular table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:70
+msgid "Below `[build-system]` is considered a table in the toml language."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:71
+msgid "Within the `build-system` table, `requires =` is a key."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:72
+msgid ""
+"The associated value for `requires` is an array containing the value "
+"`\"hatchling\"`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:80
+msgid "How the pyproject.toml is used when you build a package"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:84
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let’s have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:86
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:82
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:91
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:87
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:96
+msgid "Benefits of using a pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:98
+msgid ""
+"Including your package's metadata in a separate human-readable "
+"**pyproject.toml** format also allows someone to view the project's "
+"metadata in a GitHub repository."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:101
+msgid "Setup.py is still useful for complex package builds"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:105
+msgid ""
+"Using **setup.py** to manage package builds and metadata [can cause "
+"problems with package "
+"development](https://blog.ganssle.io/articles/2021/10/setup-py-"
+"deprecated.html). In some cases where a Python package build is complex, "
+"a **setup.py** file may be required. While this guide will not cover "
+"complex builds, we will provide resources working with complex builds in "
+"the future."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:111
+msgid "Optional vs. required pyproject.toml file fields"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:113
+msgid ""
+"When you create your `pyproject.toml` file, there are numerous metadata "
+"fields that you can use. Below we suggest specific fields to get you "
+"started that support publication on PyPI and users finding your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:115
+msgid ""
+"[An overview of all of the project metadata elements can be found "
+"here.](https://packaging.python.org/en/latest/specifications/core-"
+"metadata/#project-url-multiple-use)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:117
+msgid "Required fields for the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:119
+msgid ""
+"As mentioned above, your `pyproject.toml` file needs to have a **`name`**"
+" and **`version`** field in order to properly build your package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:121
+msgid "`name`: This is the name of your project provided as a string"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:122
+msgid ""
+"`version`: This is the version of your project. If you are using a SCM "
+"tool for versioning (using git tags to determine versions), then the "
+"version may be dynamic (more on that below)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:124
+msgid "Optional fields to include in the `[project]` table"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:126
+msgid ""
+"We strongly suggest that you also add the metadata keys below as they "
+"will help users finding your package on PyPI. These fields will make it "
+"clear how your package is structured, what platforms you support and what"
+" dependencies your package requires."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:131
+msgid "**Description:** this is a short one-line description of your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:132
+msgid ""
+"**Readme:** A link to your README.md file is used for the long long-"
+"description. This information will be published on your packages PyPI "
+"landing page."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:133
+msgid ""
+"**Requires-python** (used by pip): this is a field that is used by pip. "
+"Here you tell the installer whether you are using Python 2.x or 3.x. Most"
+" projects will be using 3.x."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:134
+msgid "**License:** the license you are using"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:135
+msgid ""
+"**Authors:** these are the original authors of the package. Sometimes the"
+" authors are different from the maintainers. Other times they might be "
+"the same."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:136
+msgid ""
+"**Maintainers:** you can choose to populate this or not. You can populate"
+" this using a list with a sub element for each author or maintainer name,"
+" email"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:144
+msgid ""
+"**project.dependencies:** The dependency group is optional because not "
+"all packages require dependencies. However, if your project has specific "
+"dependencies, include this section in your `pyproject.toml`. Dependencies"
+" declared in the pyproject.toml file will be installed by uv or pip when "
+"your project is installed."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:146
+msgid ""
+"**project.optional-dependencies:** Optional or feature dependencies will "
+"be installed if someone runs `python -m pip install "
+"projectname[feature]`. Use this array to declare dependencies that add "
+"specific features to your package that are not installed by default when "
+"a user runs `uv sync` or `python -m pip install packagename`."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:147
+msgid ""
+"**dependency-groups:** Dependency groups organize packages and tools that"
+" a contributor or developer would need to work on your package. These "
+"dependencies may include tools for building and running tests, linters, "
+"and code formatters. This is an optional but highly suggested way to "
+"organize and install dependencies. This section can replace a "
+"requirements.txt file. [Learn more about adding these to your package in "
+"the PyPA guide "
+"here.](https://packaging.python.org/en/latest/specifications/dependency-"
+"groups/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:148
+msgid ""
+"**keywords:** These are the keywords that will appear on your PyPI "
+"landing page. Think of them as words that people might use to search for "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:149
+msgid ""
+"**classifiers:** The classifiers section of your metadata is also "
+"important for the landing page of your package in PyPI and for filtering "
+"of packages in PyPI. A list of [all options for classifiers can be found "
+"here](https://PyPI.org/classifiers/). Some of the classifiers that you "
+"should consider including"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:150
+msgid "Development Status"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:151
+msgid "Intended Audience"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:152
+msgid "Topic"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:153
+msgid "Programming language"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:155
+msgid "Advanced options in the pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:157
+msgid ""
+"**`[project.scripts]` (Entry points):** Entry points are optional. If you"
+" have a command line tool that runs a specific script hosted in your "
+"package, you may include an entry point to call that script directly at "
+"the command line (rather than at the Python shell)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:159
+msgid ""
+"Here is an example of[a package that has entry point "
+"script](https://github.com/pyOpenSci/pyosMeta/blob/main/pyproject.toml#L60)s."
+" Notice that there are several core scripts defined in that package that "
+"perform sets of tasks. The pyOpenSci is using those scripts to process "
+"their metadata."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:160
+msgid ""
+"Use **Dynamic Fields** If you have fields that are dynamically populated."
+" For example, you may wish to automatically update your package's version"
+" using Git tags (SCM/version control-based versioning). Example: "
+"**dynamic = [\"version\"]**"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:162
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Add dependencies to your pyproject.toml file"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:164
+msgid ""
+"The `pyproject.toml` file is a modern replacement for the "
+"`requirements.txt` file, which has been traditionally used to store "
+"development dependencies and also configuration for tools such as pytest,"
+" black, and others."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:166
+msgid ""
+"To add development dependencies to your build, add a `[dependency-"
+"groups]` array to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:168
+msgid "Then specify dependency groups as follows:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:176
+msgid "Following the above example, you install dependencies like this:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:178
+msgid "`python -m pip install -e .[tests]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:180
+msgid "pip install --group test _# requires pip 25.1 or greater_"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:182
+msgid ""
+"The above will install both your package in editable mode and all of the "
+"dependencies declared in the tests section of your `[project.optional-"
+"dependencies]` table."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:184
+msgid "To install all dependencies and also your package, you'd use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:186
+msgid "`python -m pip install -e .[tests,lint,docs]`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:188
+msgid "Recursive dependencies"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:192
+msgid ""
+"You can also setup sets of recursive dependencies. [See this blog post "
+"for more.](https://hynek.me/articles/python-recursive-optional-"
+"dependencies/)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:195
+msgid "Example pyproject.toml for building using hatchling"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:197
+msgid ""
+"Below is an example build configuration for a Python project. This "
+"example package setup uses **hatchling** to build the [package's sdist "
+"and wheels](python-package-distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:205
+msgid "Notice that dependencies are specified in this file."
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:207
+msgid "Example pyproject.toml for building using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:209
+msgid ""
+"The package metadata including authors, keywords, etc is also easy to "
+"read. Below you can see the same TOML file that uses a different build "
+"system (setuptools). Notice how simple it is to swap out the tools needed"
+" to build this package!"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:213
+msgid "In this example package setup you use:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:215
+msgid ""
+"**setuptools** to build the [package's sdist and wheels](python-package-"
+"distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:216
+msgid ""
+"**setuptools_scm** to manage package version updates using version "
+"control tags"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:218
+msgid ""
+"In the example below `[build-system]` is the first table of values. It "
+"has two keys that specify the build backend API and containing package:"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:221
+msgid "`requires =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:222
+msgid "`build-back-end =`"
+msgstr ""
+
+#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:229
+msgid ""
+"[Click here to read about our packaging build tools including PDM, "
+"setuptools, Poetry and Hatch.](/package-structure-code/python-package-"
+"build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:1
+msgid "Python Packaging Tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:4
+msgid "Tools for building your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:6
+msgid ""
+"There are a several different build tools that you can use to [create "
+"your Python package's _sdist_ and _wheel_ distributions](python-package-"
+"distribution-files-sdist-wheel). Below, we discuss the features, benefits"
+" and limitations of the most commonly used Python packaging tools. We "
+"focus on pure-python packages in this guide. However, we also highlight "
+"tools that currently support packages with C/C++ and other language "
+"extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:14
+msgid ""
+"Decision tree diagram showing the various front and back end packaging "
+"tools. You can decide what packaging tool to use by thinking about what "
+"features you need. PDM and Hatch are currently the most flexible tools "
+"as they also using different build back-ends. As such currently PDM and "
+"Hatch are the tools we think beginners might appreciate most with Poetry "
+"being a close second. Poetry is nice for pure Python projects."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:16
+msgid ""
+"Diagram showing the different front end build tools available to use in "
+"the Python package ecosystem that you can select from. We selected tools "
+"to include in this diagram based upon the PyPI survey which helped us "
+"understand the most populate tools in the ecosystem. Each tool has "
+"different features as highlighted below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:19
+msgid ""
+"If you want to know more about Python packages that have extensions "
+"written in other languages, [check out the page on complex package builds"
+".](complex-python-package-builds)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:22
+msgid "Tools that we review here"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:24
+msgid ""
+"In this section we have selected tools that were returned as the most "
+"popular packaging tools in the PyPA survey. You will learn more about the"
+" following tools on this page:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:28
+msgid ""
+"[Twine](https://twine.readthedocs.io/en/stable/), [Build](https://pypa-"
+"build.readthedocs.io/en/stable/) + "
+"[setuptools](https://setuptools.pypa.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:29
+msgid "[Flit](https://flit.pypa.io/en/stable/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:30
+msgid "[Hatch](https://hatch.pypa.io/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:31
+msgid "[PDM](https://pdm-project.org/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:32
+msgid "[Poetry](https://python-poetry.org/docs/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:35
+msgid "Summary of tools Hatch vs. PDM vs. Poetry (and setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:37
+msgid "If you are looking for a quick summary, read below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:39
+msgid ""
+"In general, any modern tool that you select from this page will be great "
+"to build your package. Selecting a tool comes down to the features that "
+"you are looking for in your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:40
+msgid ""
+"We suggest that beginners start with a modern workflow tool like PDM as "
+"opposed to navigating the complexities of setuptools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:41
+msgid ""
+"If you are going to use Poetry (it is the most popular tool and does have"
+" the best documentation) beware of the upper bounds dependency additions "
+"and consider overriding dependencies when you add them. If you do that "
+"Poetry will work well for pure-python builds! Poetry also has an active "
+"discord where you can ask questions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:43
+msgid "Below are some features that Hatch and PDM offer that Poetry does not."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:45
+msgid "PDM:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:47
+msgid ""
+"Supports other back-ends making it ideal for builds that are not pure "
+"Python. This means PDM is a great option for both pure python and more "
+"complex Python builds as it supports meson-python and other build "
+"backends."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:48
+msgid "Offers flexibility in dependency management which we like"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:49
+msgid "Offers lock files if you need them"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:51
+msgid "Hatch:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:53
+msgid ""
+"Offers matrix environment management that allows you to run tests across "
+"Python versions. If this feature is important to you, then Hatch is a "
+"clear winner."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:54
+msgid ""
+"Offers a Nox / Make file like tool to streamline your build workflow. If "
+"you are looking to reduce the number of tools in your workflow, Hatch "
+"might be for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:57
+msgid "Build front-end vs. build back-end tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:59
+msgid ""
+"To better understand your options, when it comes to building a Python "
+"package, it's important to first understand the difference between a "
+"build tool front-end and build back-end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:64
+msgid "Build back-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:66
+msgid ""
+"Most packaging tools have a back-end build tool that builds you package "
+"and creates associated [(sdist and wheel) distribution files](python-"
+"package-distribution-files-sdist-wheel). Some tools, such as **Flit**, "
+"only support pure-Python package builds. A pure-Python build refers to a "
+"package build that does not have extensions that are written in another "
+"programming language (such as `C` or `C++`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:73
+msgid ""
+"Other packages that have C and C++ extensions (or that wrap other "
+"languages such as fortran) require additional code compilation steps when"
+" built. Back-ends such as **setuptools.build**, **meson.build** and "
+"**scikit-build** support complex builds with custom steps. If your build "
+"is particularly complex (i.e. you have more than a few `C`/`C++` "
+"extensions), then we suggest you use **meson.build** or **scikit-build**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:79
+msgid "Python package build front-ends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:81
+msgid ""
+"A packaging front-end tool refers to a tool that makes it easier for you "
+"to perform common packaging tasks using similar commands. These tasks "
+"include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:84
+msgid ""
+"[Build your packages (create the sdist and wheel distributions)](python-"
+"package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:85
+msgid ""
+"Installing your package in a development mode (so it updates when you "
+"update your code)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:86
+msgid "Publishing to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:87
+msgid "Running tests"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:88
+msgid "Building documentation"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:89
+msgid ""
+"Managing an environment or multiple environments in which you need to run"
+" tests and develop your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:91
+msgid ""
+"There are several Python packaging tools that you can use for pure Python"
+" builds. Each front-end tool discussed below supports a slightly "
+"different set of Python packaging tasks."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:95
+msgid ""
+"For instance, you can use the packaging tools **Flit**, **Hatch** or "
+"**PDM** to both build and publish your package to PyPI. However while "
+"**Hatch** and **PDM** support versioning and environment management, "
+"**Flit** does not. If you want a tool that supports dependency locking, "
+"you can use **PDM** or **Poetry** but not **Hatch**. If you only need to "
+"build your package's sdist and wheel distribution files, then you can "
+"stick with PyPA's Build. You'd then use Twine to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:102
+msgid ""
+"If you are using **Setuptools**, there is no default user-friendly build "
+"front-end that performs multiple tasks. You will need to use **build** to"
+" build your package and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:105
+msgid "Example build steps that can be simplified using a front-end tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:107
+msgid ""
+"Below, you can see how a build tool streamlines your packaging "
+"experience. Example to build your package with **Hatch**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:117
+msgid "Example build steps using the **setuptools** back-end and **build**:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:127
+msgid "Choosing a build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:129
+msgid ""
+"Most front-end packaging tools have their own back-end build tool. The "
+"build tool creates your package's (sdist and wheel) distribution files. "
+"For pure Python packages, the main difference between the different build"
+" back-ends discussed below is:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:134
+msgid ""
+"How configurable they are - for example, do they allow you to add build "
+"steps that support non python extensions?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:135
+msgid ""
+"How much you need to configure them to ensure the correct files are "
+"included in your sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:137
+msgid "Build back-end support for non pure-python packages"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:139
+msgid ""
+"It is important to note that some build back-ends, such as **Flit-core**,"
+" only support pure Python builds. Other back-ends support C and C++ "
+"extensions as follows:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:142
+msgid "setuptools supports builds using C / C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:143
+msgid ""
+"Hatchling (hatch's back-end) supports C / C++ extensions via plugins that"
+" the developer creates to customize a build"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:144
+msgid "PDM's back-end supports C / C++ extensions by using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:145
+msgid ""
+"Poetry's back-end supports C/C++ extensions however this functionality is"
+" currently undocumented. As such we don't recommend using Poetry for "
+"complex or non pure Python builds until it is documented."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:147
+msgid ""
+"While we won't discuss more complex builds below, we will identify which "
+"tools have documented support for C / C++ extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:150
+msgid "An ecosystem of Python build tools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:152
+msgid ""
+"Below we introduce several of the most commonly used Python packaging "
+"build front-end tools. We highlight the features that each tool offers as"
+" a way to help you decide what tool might be best for your workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:156
+msgid "We do not suggest using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:159
+msgid ""
+"We suggest that you pick one of the modern tools listed above rather than"
+" setuptools because setuptools will require some additional knowledge to "
+"set up correctly."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:163
+msgid ""
+"We review setuptools as a back-end because it is still popular. However "
+"it is not the most user friendly option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:167
+msgid ""
+"The most commonly used tools in the ecosystem are setuptools back-end "
+"(with build) and Poetry (a front end tool with numerous features and "
+"excellent documentation)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:173
+msgid ""
+"Graph showing the results of the 2022 PyPA survey of Python packaging "
+"tools. On the x axis is percent response and on the y axis are the tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:175
+msgid ""
+"The Python developers survey results (n=>8,000 PyPI users) show "
+"setuptools and poetry as the most commonly used Python packaging tools. "
+"The core tools that we've seen being used in the scientific community are"
+" included here. [You can view the full survey results by clicking "
+"here.](https://drive.google.com/file/d/1U5d5SiXLVkzDpS0i1dJIA4Hu5Qg704T9/view)"
+" NOTE: this data represent maintainers across domains and is likely "
+"heavily represented by those in web development. So this represents a "
+"snapshot across the broader Python ecosystem."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:178
+msgid "Chose a build workflow tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:180
+msgid "The tools that we review below include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:182
+msgid "Twine, Build + setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:183
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:294
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:184
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:336
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:185
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:233
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:186
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:380
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:188
+msgid ""
+"When you are selecting a tool, you might consider this general workflow "
+"of questions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:191
+msgid ""
+"**Is your tool pure python? Yes?** You can use any tool that you wish! "
+"Pick the tool that has the features that you want to use in your build "
+"workflow. We suggest:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:193
+msgid "Flit, Hatch, PDM or Poetry (read below for more)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:195
+msgid ""
+"**Does your tool have a few C or C++ extensions?** Great, we suggest "
+"using **PDM** for the time being. It is the only tool in the list below "
+"that has both documented workflow to support such extensions and support "
+"for other back-ends in the case that build hooks are not enough for your "
+"workflow. PDM supports other back-ends such as scikit-build and meson-"
+"python that will allow you to fully customize your package's build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:199
+msgid ""
+"NOTE: You can also use Hatch for non pure python builds. Hatch, similar "
+"to PDM, allows you to write your own build hooks or plugins to support "
+"custom build steps. But currently, hatch does not support other build "
+"back ends. Many of the core scientific packages are moving to meson-"
+"python to build their packages. Thus, we appreciate that PDM can work "
+"with meson-python specifically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:201
+msgid "Python packaging tools summary"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:203
+msgid ""
+"Below, we summarize features offered by the most popular build front end "
+"tools. It is important to keep in mind that these front-end tools remove "
+"the need to use other core tools in your workflow. For example if you use"
+" setuptools, you will need to also use Build and Twine to build your "
+"package and publish to PyPI. But if you use Poetry, Hatch or PDM you can "
+"do all of those things using the same tool (e.g. `hatch build`, `hatch "
+"publish` or `pdm build`, `pdm publish`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:206
+msgid ""
+"Note that because setuptools does not offer a front-end interface, it is "
+"not included in the table."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:210
+msgid "Package tool features table"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Feature"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Default Build Back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Flit-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Poetry-core"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Use Other Build Backends"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✖"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "✅"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Dependency management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "Version Control based versioning (using `git tags`)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Environment Management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:217
+msgid "More than one maintainer? (bus factor)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:227
+msgid "Notes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:229
+msgid "_Hatch plans to support dependency management in the future_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:230
+msgid ""
+"Poetry supports semantic versioning. Thus, it will support version "
+"bumping following commit messages if you use a tool such as Python "
+"Semantic Release"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:235
+msgid ""
+"[PDM is a Python packaging and dependency management tool](https://pdm-"
+"project.org/latest/). PDM supports builds for pure Python projects. It "
+"also provides multiple layers of support for projects that have C and C++"
+" extensions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:239
+msgid "PDM support for C and C++ extensions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:241
+msgid ""
+"PDM supports using the PDM-back-end and setuptools at the same time. This"
+" means that you can run setuptools to compile and build C extensions. "
+"PDM's build back-end receives the compiled extension files (.so, .pyd) "
+"and packages them with the pure Python files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:247
+msgid "PDM features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Notes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you setup PDM it allows you to select one of several build back ends"
+" including: PDM-core, flit-core and hatchling. PDM also can work with "
+"Meson-Python which supports move complex python builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Dependency specifications"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has flexible support for managing dependencies. PDM defaults to "
+"using an open bound (e.g. `requests >=1.2`) approach to dependencies. "
+"However you can [customize how you want to add dependencies in case you "
+"prefer another approach such as that of Poetry which uses an upper bound "
+"limit](https://pdm-project.org/en/latest/usage/dependency/#about-update-"
+"strategy).**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Environment lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM and Poetry are currently the only tools that create environment lock "
+"files. Lock files are often most useful to developers creating web apps "
+"where locking the environment is critical for consistent user experience."
+" For community-used packages, you will likely never want to use a lock "
+"file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Environment management"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM provides environment management support. It supports Python virtual "
+"environments, conda and a local `__pypackages__` environment which is a "
+"newer option in the Python ecosystem. No extensions are needed for this "
+"support."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "Select your environment type on install"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"When you run `PDM init`, PDM will discover environments that are already "
+"on your system and allow you to select one to use for your project."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Version Control based versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM has a setuptools_scm like tool built into it which allows you to use "
+"dynamic versioning that rely on git tags."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Follows current packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"PDM supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Install your package in editable mode"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid "PDM supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Build your sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:254
+msgid ""
+"Similar to all of the other tools PDM builds your packages sdist and "
+"wheel files for you."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:267
+msgid "PDM vs. Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:268
+msgid ""
+"The functionality of PDM is similar to Poetry. However, PDM also offers "
+"additional, documented support for C extensions and version control based"
+" versioning. As such, PDM is preferred for those working on non pure-"
+"Python packages."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:272
+msgid ""
+"If you are deciding between the Poetry and PDM, a smaller difference is "
+"the default way that dependencies are added to your pyproject.toml file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:274
+msgid ""
+"Poetry by default follows strict semantic versioning adding dependencies "
+"to your pyproject.toml file [using an upper bounds constraint "
+"(`^`)](https://python-poetry.org/docs/dependency-specification/#version-"
+"constraints). Upper bounds lock means that Poetry will never bump a "
+"dependency to the next major version (i.e. from 1.2 to 2.0). However, you"
+" can tell Poetry to use an open bound approach by explicitly adding the "
+"package like this: `poetry add requests >= 1.2` rather than just using "
+"`poetry add requests` which will result in a upper bound locked (ie Upper"
+" bound locks means that requests 2.0 could never be installed even if it "
+"came out and your package could benefit from it)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:275
+msgid ""
+"PDM defaults to open-bounds (`>=`) dependency additions which is the "
+"preferred approach in the scientific python ecosystem. However, PDM also "
+"allows you to specify the way dependencies are added by default. As such,"
+" you can also specify upper-bounds (`^`) using PDM if require that "
+"approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:277
+msgid ""
+"Finally there are some nuanced differences in how both tools create lock "
+"files which we will not go into detail about here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:280
+msgid "Challenges with PDM"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:282
+msgid ""
+"PDM is a full-featured packaging tool. However it is not without "
+"challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:284
+msgid ""
+"Its documentation can be confusing, especially if you are new to "
+"packaging. For example, PDM doesn't provide an end to end beginning "
+"workflow in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:286
+msgid ""
+"PDM also only has one maintainer currently. We consider individual "
+"maintainer teams to be a potential risk. If the maintainer finds they no "
+"longer have time to work on the project, it leaves users with a gap in "
+"support. Hatch and Flit also have single maintainer teams."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:291
+msgid ""
+"[You can view an example of a package that uses PDM "
+"here](https://github.com/pyOpenSci/examplePy/tree/main/example4_pdm). The"
+" README file for this directly provides you with an overview of what the "
+"PDM command line interface looks like when you use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:296
+msgid ""
+"[Flit is a no-frills, streamlined packaging "
+"tool](https://flit.pypa.io/en/stable/) that supports modern Python "
+"packaging standards. Flit is a great choice if you are building a basic "
+"package to use in a local workflow that doesn't require any advanced "
+"features. And if your package structure is already created. More on that "
+"below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:300
+msgid "Flit features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+#: ../../package-structure-code/python-package-build-tools.md:353
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Publish to PyPI and test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Helps you add metadata to your **pyproject.toml** file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit does support adding metadata to your **pyproject.toml** file "
+"following modern packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid ""
+"Flit supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit supports installing your package in editable mode.**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:307
+msgid "Flit can be used to build your packages sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:314
+msgid ""
+"NOTE: _If you are using the most current version of pip, it supports both"
+" a symlink approach `flit install -s` and `python -m pip install -e .`_"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:316
+msgid "Learn more about flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:318
+msgid "[Why use flit?](https://flit.pypa.io/en/stable/rationale.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:321
+msgid "Why you might not want to use Flit"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:323
+msgid ""
+"Because Flit is no frills, it is best for basic, quick builds. If you are"
+" a beginner you may want to select Hatch or PDM which will offer you more"
+" support in common operations."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:327
+msgid "You may NOT want to use flit if:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:329
+msgid ""
+"You want to setup more advanced version tracking and management (using "
+"version control for version bumping)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:330
+msgid ""
+"You want a tool that handles dependency versions (use PDM or Poetry "
+"instead)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:331
+msgid "You have a project that is not pure Python (Use Hatch, PDM or setuptools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:332
+msgid "You want environment management (use PDM, Hatch or Poetry)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:338
+msgid ""
+"[**Hatch**](https://hatch.pypa.io/latest/), similar to Poetry and PDM, "
+"provides a unified command line interface. To separate Hatch from Poetry "
+"and PDM, it also provides an environment manager for testing that will "
+"make it easier for you to run tests locally across different versions of "
+"Python. It also offers a nox / makefile like feature that allows you to "
+"create custom build workflows such as building your documentation "
+"locally. This means that you could potentially drop a tool like **Make** "
+"or **Nox** from your workflow and use Hatch instead."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:345
+msgid "Hatch features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch is used with the backend Hatchling by default, but allows you to "
+"use another backend by switching the declaration in pyproject.toml."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Currently you have to add dependencies manually with Hatch. However a "
+"feature to support dependencies management may be added in a future "
+"release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports Python virtual environments. If you wish to use other "
+"types of environments such as Conda, you will need to [install a plugin "
+"such as hatch-conda for conda support](https://github.com/OldGrumpyViking"
+"/hatch-conda)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch offers `hatch_vcs` which is a plugin that uses setuptools_scm to "
+"support versioning using git tags. The workflow with `hatch_vcs` is the "
+"same as that with `setuptools_scm`."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch supports current packaging standards for adding metadata to the "
+"**pyproject.toml** file."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"Hatch will install your package into any of its environments by default "
+"in editable mode. You can install your package in editable mode manually "
+"using `python -m pip install -e .` Hatch mentions [editable "
+"installs](https://hatch.pypa.io/latest/config/build/#dev-mode) but refers"
+" to pip in its documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "Hatch will build the sdist and wheel distributions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨Matrix environment creation to support testing across Python versions✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"The matrix environment creation is a feature that is unique to Hatch in "
+"the packaging ecosystem. This feature is useful if you wish to test your "
+"package locally across Python versions (instead of using a tool such as "
+"tox)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"✨[Nox / MAKEFILE like "
+"functionality](https://hatch.pypa.io/latest/environment/#selection)✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"This feature is also unique to Hatch. This functionality allows you to "
+"create workflows in the **pyproject.toml** configuration to do things "
+"like serve docs locally and clean your package build directory. This "
+"means you may have one less tool in your build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid "✨A flexible build backend: **hatchling**✨"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:353
+msgid ""
+"**The hatchling build backend offered by the maintainer of Hatch allows "
+"developers to easily build plugins to support custom build steps when "
+"packaging."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:367
+msgid ""
+"_There is some argument about this approach placing a burden on "
+"maintainers to create a custom build system. But others appreciate the "
+"flexibility. The Hatch build hook approach is also comparable with the "
+"features offered by PDM._"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:369
+msgid "Why you might not want to use Hatch"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:371
+msgid ""
+"There are a few features that hatch is missing that may be important for "
+"some. These include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:374
+msgid ""
+"Hatch doesn't support adding dependencies. You will have to add them "
+"manually."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:375
+msgid "Hatch won't by default recognize Conda environments without a plugin."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:376
+msgid ""
+"Similar to PDM, Hatch's documentation can difficult to work through, "
+"particularly if you are just getting started with creating a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:377
+msgid "Hatch, similar to PDM and Flit currently only has one maintainer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:382
+msgid ""
+"[Poetry is a full-featured build tool.](https://python-poetry.org/) It is"
+" also the second most popular front-end packaging tool (based upon the "
+"PyPA survey). Poetry is user-friendly and has clean and easy-to-read "
+"documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:387
+msgid ""
+"While some have used Poetry for Python builds with C/C++ extensions, this"
+" support is currently undocumented. Thus, we don't recommend using Poetry"
+" for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:391
+msgid "Poetry features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry helps you add dependencies to your `pyproject.toml` metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Dependency specification"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to be specific about version of dependencies that you "
+"add to your package's pyproject.toml file. However, it's default upper "
+"bound approach can be problematic for some packages (We suggest you "
+"override the default setting when adding dependencies). Read below for "
+"more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry allows you to either use its built in environment or you can "
+"select the environment type that you want to use for managing your "
+"package. [Read more about its built in environment management "
+"options](https://python-poetry.org/docs/basic-usage/#using-your-virtual-"
+"environment)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Lock files"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry creates a **poetry.lock** file that you can use if you need a lock"
+" file for your build."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports publishing to both test PyPI and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"The plugin [Poetry dynamic versioning](https://github.com/mtkennerly"
+"/poetry-dynamic-versioning) supports versioning using git tags with "
+"Poetry."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Poetry supports you bumping the version of your package using standard "
+"semantic version terms patch; minor; major"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid ""
+"Since version 2.0, Poetry supports most current project metadata "
+"standards. However, not all standards are supported, and it also supports"
+" the legacy Poetry format. Read below for more."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry supports installing your package in editable mode."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:398
+msgid "Poetry will build your sdist and wheel distributions using `poetry build`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:413
+msgid "Challenges with Poetry"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:415
+msgid "Some challenges of Poetry include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:417
+msgid ""
+"Poetry has its own concept of grouped dependencies (`poetry add "
+"--group=GROUP_NAME DEPENDENCY`). Dependencies added as grouped "
+"dependencies are not optional and there is no Python standard for this "
+"type of dependency. This should not be confused with \"optional\" "
+"dependencies (`poetry add --optional=GROUP_NAME DEPENDENCY`), which is "
+"standardised and lets you group your dependencies into several optional "
+"groups."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:418
+msgid ""
+"While Poetry supports \"development\" dependencies (i.e. dependencies you"
+" use for development but not running the code, such as `pytest`), Poetry "
+"does not yet follow the standardised format for specifying such "
+"dependencies."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:419
+msgid ""
+"Poetry, by default, pins dependencies using an \"upper bound\" limit "
+"(which is specified with the `^` symbol in the legacy format). However, "
+"this behavior can be over-written by specifying the dependency when you "
+"use `poetry add` as follows: `poetry add \"requests>=2.1\"` See breakout "
+"below for more discussion on issues surrounding upper-bounds pinning."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:421
+msgid ""
+"Poetry is a popular packaging tool and introduced many very useful "
+"features. However, if you decide to use it, then use caution when adding "
+"dependencies as Poetry's approach to pinning can be problematic for many "
+"builds. If you use Poetry, we strongly suggest that you override the "
+"default upper bound dependency option."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:426
+msgid "Challenges with Poetry dependency pinning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:429
+msgid ""
+"By default, Poetry pins dependencies using `^` by default. This `^` "
+"symbol means that there is an \"upper bound\" to the dependency. Thus "
+"poetry won't bump a dependency version to a new major version. Thus, if "
+"your package uses a dependency that is at version 1.2.3, Poetry will "
+"never bump the dependency to 2.0 even if there is a new major version of "
+"the package. Poetry will instead bump up to 1.9.x."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:435
+msgid ""
+"Poetry does this because it adheres to strict semantic versioning which "
+"states that a major version bump (from 1.0 to 2.0 for example) means "
+"there are breaking changes in the tool. However, not all tools follow "
+"strict semantic versioning. [This approach has been found to be "
+"problematic by many of our core scientific "
+"packages.](https://iscinumpy.dev/post/bound-version-constraints/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:440
+msgid ""
+"This approach also won't support others ways of versioning tools, for "
+"instance, some tools use [calver](https://calver.org/) which creates new "
+"versions based on the date."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:445
+msgid "Using Setuptools back-end for Python packaging with Build front-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:447
+msgid ""
+"[Setuptools](https://setuptools.pypa.io/en/latest/) is the most mature "
+"Python packaging build tool with [development dating back to 2009 and "
+"earlier](https://setuptools.pypa.io/en/latest/history.html#). Setuptools "
+"also has the largest number of community users (according to the PyPA "
+"survey). Setuptools does not offer a user front-end like Flit, Poetry and"
+" Hatch offer. As such you will need to use other tools such as **build** "
+"to create your package distributions and **twine** to publish to PyPI."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:455
+msgid ""
+"While setuptools is the most commonly used tool, we encourage package "
+"maintainers to consider using a more modern tool for packaging such as "
+"Poetry, Hatch or PDM."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:458
+msgid ""
+"We discuss setuptools here because it's commonly found in the ecosystem "
+"and contributors may benefit from understanding it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:461
+msgid "Setuptools features"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:463
+msgid "Some of features of setuptools include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:465
+msgid "Fully customizable build workflow"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:466
+msgid "Many scientific Python packages use it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:467
+msgid ""
+"It offers version control based package versioning using "
+"**setuptools_scm**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:468
+msgid "It supports modern packaging using **pyproject.toml** for metadata"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:469
+msgid "Supports backwards compatibly for older packaging approaches."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:471
+msgid "Challenges using setuptools"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:475
+msgid "Setuptools has a few challenges:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:477
+msgid ""
+"Setuptools does not support interactive features such as auto / tab "
+"completion by default if you are working in an IDE like VSCODE and using "
+"an editable install for development. [See notes here about pylance "
+"support](https://github.com/microsoft/pylance-"
+"release/blob/main/TROUBLESHOOTING.md#editable-install-modules-not-found)."
+" In comparison, tools such as flit, hatch, PDM support interactive "
+"features such as tab / auto completion when using an IDE like VSCODE or "
+"pycharm (as long as your version of pip is current!)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:478
+msgid ""
+"Because **setuptools** has to maintain backwards compatibility across a "
+"range of packages, it is not as flexible in its adoption of modern Python"
+" packaging standards."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:481
+msgid ""
+"The above-mentioned backwards compatibility makes for a more complex "
+"code-base."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:482
+msgid ""
+"Your experience as a user will be less streamlined and simple using "
+"setuptools compared to other tools discussed on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:484
+msgid ""
+"There are also some problematic default settings that users should be "
+"aware of when using setuptools. For instance:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:487
+msgid ""
+"setuptools will build a project without a name or version if you are not "
+"using a **pyproject.toml** file to store metadata."
+msgstr ""
+
+#: ../../package-structure-code/python-package-build-tools.md:489
+msgid ""
+"setuptools also will include all of the files in your package repository "
+"if you do not explicitly tell it to exclude files using a **MANIFEST.in**"
+" file"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:1
+msgid "Learn about Building a Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:8
+msgid ""
+"Once you have published both package distributions (the source "
+"distribution and the wheel) to PyPI, you can then publish to conda-forge."
+" The conda-forge requires an source distribution on PyPI in order to "
+"build your package on conda-forge. You do not need to rebuild your "
+"package to publish to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:11
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"a conda channel). The build process organizes your code and metadata into"
+" a distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:14
+msgid "What is building a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:16
+msgid ""
+"To [publish your Python package](publish-python-package-pypi-conda) and "
+"make it easy for anyone to install, you first need to build it."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:18
+msgid "But, what does it mean to build a Python package?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:20
+msgid ""
+"[As shown in the figure above](#pypi-conda-channels), when you build your"
+" Python package, you convert the source files into something called a "
+"distribution package. A distribution package contains your source code "
+"and metadata about the package, in the format required by the Python "
+"Package Index, so that it can be installed by tools like pip."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:23
+msgid ""
+"The term package used to mean many different things in Python and other "
+"languages. On this page, we adapt the convention of the [Python Packaging"
+" Authority](https://www.pypa.io/en/latest/) and refer to the product of "
+"the build step as a **distribution package**."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:27
+msgid ""
+"This process of organizing and formatting your code, documentation, tests"
+" and metadata into a format that both pip and PyPI can use, is called a "
+"build step."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:31
+msgid "Project metadata and PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:33
+msgid ""
+"The metadata that both build tools and PyPI uses to describe and "
+"understand your package is generally stored in a [pyproject.toml file"
+"](pyproject-toml-python-package-metadata). This metadata is used for "
+"several purposes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:35
+msgid ""
+"It helps whatever tool you use to build your package (pip, [pypa's "
+"Build](https://pypi.org/project/build/) or an end-to-end tool such as "
+"poetry, PDM or Hatch) understand how to build your package. Information "
+"it provides to your build tool includes:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:37
+msgid ""
+"The `[build-system]` table in your pyproject.toml file tells pip what "
+"[build backend tool](build_backends) you wish to use for creating your "
+"sdist and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:45
+msgid ""
+"And the dependencies section of your project table tells the build tool "
+"and PyPI what dependencies your project requires."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:54
+msgid ""
+"When the build tool creates your package distribution file (the file that"
+" you publish on PyPI), it also creates a METADATA file which PyPI can "
+"read and use to help users find your package. For example:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:56
+msgid ""
+"The `classifiers = ` section of your `[project]` table in the "
+"pyproject.toml file provides information that users on PyPI can use to "
+"filter for packages that address different topics or that support "
+"specific versions of python."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:72
+msgid "What happened to setup.py and setup.cfg for metadata?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:75
+msgid ""
+"Project metadata used to be stored in either a setup.py file or a "
+"setup.cfg file. The current recommended practice for storing package "
+"metadata is to use a pyproject.toml file. [Learn more about the "
+"pyproject.toml file here.](pyproject-toml-python-package-metadata)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:78
+msgid "An example - xclim"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:80
+msgid ""
+"When you publish to PyPI, you will notice that each package has metadata "
+"listed. Let's have a look at [xclim](https://pypi.org/project/xclim/), "
+"one of our [pyOpenSci packages](https://www.pyopensci.org/python-"
+"packages.html). Notice that on the PyPI landing page you see some "
+"metadata about the package including python, maintainer information and "
+"more. PyPI is able to populate this metadata because it was defined using"
+" correct syntax and classifiers by Xclim's maintainers, [pyproject.toml "
+"file](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml). "
+"This metadata when the xclim package is built, is translated into a "
+"distribution file that allows PyPI to read the metadata and print it out "
+"on their website."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:93
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:95
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users. NOTE: you need to publish a sdist to "
+"PyPI in order for conda-forge to properly build your package "
+"automatically."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:100
+msgid ""
+"This screenshot shows the metadata on PyPI for the xclim package. On it "
+"you can see the name of the license, the author and maintainer names "
+"keywords associated with the package and the base python version it "
+"requires which is 3.8."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:102
+msgid "PyPI screenshot showing metadata for the xclim package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:109
+msgid ""
+"Here you see the maintainer metadata as it is displayed on PyPI. For "
+"xclim there are three maintainers listed with their profile pictures and "
+"github user names to the right."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:111
+msgid ""
+"Maintainer names and GitHub usernames for the xclim package as they are "
+"displayed on PyPI. This information is recorded in your pyproject.toml "
+"and then processed by your build tool and stored in your packages sdist "
+"and wheel distributions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:114
+msgid "How to create the distribution format that PyPI and Pip expects?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:116
+msgid ""
+"You could in theory create your own scripts to organize your code the way"
+" PyPI wants it to be. However, just like there are packages that handle "
+"known structures such as Pandas for data frames and Numpy for arrays, "
+"there are packages and tools that help you create package build "
+"distribution files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:120
+msgid ""
+"There are a suite of packaging tools that can either help you with the "
+"entire packaging process or just one step of the process. For instance "
+"setuptools is a commonly used build back end that can be used to create "
+"your sdist and wheel. Whereas tools like Hatch, PDM, Poetry and flit help"
+" with other parts of the packaging process."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:126
+msgid ""
+"While this can cause some confusion and complexity in the packaging "
+"ecosystem - for the most part, each tool provides the same distribution "
+"output (with minor differences that most users may not care about). Learn"
+" more about those tools on this page."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:132
+msgid ""
+"Below, you will learn about the two distribution files that PyPI expects "
+"you to publish: sdist and wheel. You will learn about their structure and"
+" what files belong in each."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:135
+msgid ""
+"There are two core distribution files that you need to create to publish "
+"your Python package to PyPI source distribution (often called an sdist) "
+"and wheel. The sdist contains the raw source code for your package. The "
+"wheel (.whl) contains the built / compiled files that can be directly "
+"installed onto anyones' computer."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:141
+msgid "Learn more about both distributions below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:144
+msgid ""
+"If your package is a pure python package with no additional build / "
+"compilation steps then the sdist and wheel distributions will have "
+"similar content. However if your package has extensions in other "
+"languages or is more complex in its build, the two distributions will be "
+"very different."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:149
+msgid ""
+"Also note that we are not discussing conda build workflows in this "
+"section. [You can learn more about conda builds "
+"here.](https://docs.conda.io/projects/conda-build/en/latest/user-"
+"guide/tutorials/index.html)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:154
+msgid "What is a source distribution (sdist)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:156
+msgid ""
+"**Source files** are the unbuilt files needed to build your package. "
+"These are the \"raw / as-is\" files that you store on GitHub or whatever "
+"platform you use to manage your code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:160
+msgid ""
+"Source Distributions (**S** + **Dist**) are referred to as sdist. As the "
+"name implies, a SDIST contains the source code; it has not been built or "
+"compiled in any way. Thus, when a user installs your source distribution "
+"using pip, pip needs to run a build step first. For this reason, you "
+"could define a source distribution as a compressed archive that contains "
+"everything required to build a wheel (except for project dependencies) "
+"without network access."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:164
+msgid ""
+"Sdist is normally stored as a `.tar.gz` archive (often called a "
+"\"tarball\"). Thus, when a user installs your source distribution using "
+"pip, pip needs to run a build step first."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:166
+msgid "Below is an example sdist for the stravalib Python package:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:218
+msgid "GitHub archive vs sdist"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:220
+msgid ""
+"When you make a release on GitHub, it creates a `git archive` that "
+"contains all of the files in your GitHub repository. While these files "
+"are similar to an sdist, these two archives are not the same. The sdist "
+"contains a few other items including a metadata directory and if you use "
+"`setuptools_scm` or `hatch_vcs` the sdist may also contain a file that "
+"stores the version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:228
+msgid "What is a Python wheel (whl):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:230
+msgid ""
+"A wheel file is a ZIP-format archive whose filename follows a specific "
+"format (below) and has the extension `.whl`. The `.whl` archive contains "
+"a specific set of files, including metadata that are generated from your "
+"project's pyproject.toml file. The pyproject.toml and other files that "
+"may be included in source distributions are not included in wheels "
+"because it is a built distribution."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:237
+msgid ""
+"The wheel (.whl) is your built binary distribution. **Binary files** are "
+"the built / compiled source files. These files are ready to be installed."
+" A wheel (**.whl**) is a **zip** file containing all of the files needed "
+"to directly install your package. All of the files in a wheel are "
+"binaries - this means that code is already compiled / built. Wheels are "
+"thus faster to install - particularly if you have a package that requires"
+" build steps."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:239
+msgid ""
+"The wheel does not contain any of your package's configuration files such"
+" as **setup.cfg** or **pyproject.toml**. This distribution is already "
+"built so it's ready to install."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:243
+msgid ""
+"Because it is built, the wheel file will be faster to install for pure "
+"Python projects and can lead to consistent installs across machines."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:251
+msgid ""
+"Wheels are also useful in the case that a package needs a **setup.py** "
+"file to support a more complex build. In this case, because the files in "
+"the wheel bundle are pre built, the user installing doesn't have to worry"
+" about malicious code injections when it is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:258
+msgid "The filename of a wheel contains important metadata about your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:260
+msgid "Example: **stravalib-1.1.0.post2-py3-none.whl**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:262
+msgid "name: stravalib"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:263
+msgid "version: 1.1.0"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:264
+msgid ""
+"build-number: 2 (post2) [(read more about post "
+"here)](https://peps.python.org/pep-0440/#post-release-separators)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:265
+msgid "py3: supports Python 3.x"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:266
+msgid "none: is not operating system specific (runs on windows, mac, linux)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:267
+msgid "any: runs on any computer processor / architecture"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:269
+msgid "What a wheel file looks like when unpacked (unzipped):"
+msgstr ""
+
+#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:303
+msgid "[Read more about the wheel format here](https://pythonwheels.com/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:1
+msgid "Python Package Structure & Layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:3
+msgid ""
+"There are two different layouts that you will commonly see within the "
+"Python packaging ecosystem: src and flat layouts. Both layouts have "
+"advantages for different groups of maintainers."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:8
+msgid ""
+"We strongly suggest, but do not require, that you use the **src/** layout"
+" (discussed below) for creating your Python package. This layout is also "
+"recommended in the [PyPA packaging guide "
+"tutorial](https://packaging.python.org/en/latest/tutorials/packaging-"
+"projects/)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:12
+msgid "pyOpenSci will never require a specific package structure for peer review"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:15
+msgid ""
+"We understand that it would take significant effort for existing "
+"maintainers to move to a new layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:18
+msgid ""
+"The overview on this page presents recommendations that we think are best"
+" for someone getting started with Python packaging or someone who's "
+"package has a simple build and might be open to moving to a more fail-"
+"proof approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:22
+msgid "Other resources you can check out:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:24
+msgid ""
+"[PyPA's overview of src vs flat "
+"layouts](https://packaging.python.org/en/latest/discussions/src-layout-"
+"vs-flat-layout/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:27
+msgid ""
+"You can use tools like Hatch to quickly create a modern Python package "
+"structure. Check out our quickstart tutorial:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:29
+msgid ""
+"Want to learn how to create the structure to build your package? Click "
+"here."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:38
+msgid "What is the Python package source layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:40
+msgid "An example of the **src/package** layout structure is below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:62
+msgid "Note the location of the following directories in the example above:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:64
+msgid ""
+"**docs/:** Discussed in our docs chapter, this directory contains your "
+"user-facing documentation website. In a **src/** layout docs/ are "
+"normally included at the same directory level as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:65
+msgid ""
+"**tests/** This directory contains the tests for your project code. In a "
+"**src/** layout, tests are normally included at the same directory level "
+"as the **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:66
+msgid ""
+"**src/package/**: this is the directory that contains the code for your "
+"Python project. \"Package\" is normally your project's name."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:68
+msgid ""
+"Also in the above example, notice that all of the core documentation "
+"files that pyOpenSci requires live in the root of your project directory."
+" These files include:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:72
+msgid "CHANGELOG.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:73
+msgid "CODE_OF_CONDUCT.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:74
+msgid "CONTRIBUTING.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:75
+msgid "LICENSE.txt"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:76
+msgid "README.md"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:80
+msgid "Click here to read about our packaging documentation requirements."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:87
+msgid "Example scientific packages that use **src/package** layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:89
+msgid "[Sourmash](https://github.com/sourmash-bio/sourmash)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:90
+msgid "[bokeh](https://github.com/bokeh/bokeh)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:91
+msgid "[openscm](https://github.com/openscm/openscm-runner)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:92
+msgid "[awkward](https://github.com/scikit-hep/awkward)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:93
+msgid "[poliastro](https://github.com/poliastro/poliastro/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:98
+msgid "The src layout and testing"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:100
+msgid ""
+"The benefit of using the **src/package** layout is that it ensures tests "
+"are run against the installed version of your package rather than the "
+"files in your package working directory. If you run your tests on your "
+"files rather than the installed version of your package, you may be "
+"missing issues that users encounter when your package is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:106
+msgid ""
+"If `tests/` are outside the **src/package** directory, they aren't "
+"included in the package's [wheel](python-wheel). This makes your package "
+"size slightly smaller, which places a smaller storage burden on PyPI, and"
+" makes them faster to fetch."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:108
+msgid ""
+"[Read more about reasons to use the **src/package** "
+"layout](https://hynek.me/articles/testing-packaging/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:110
+msgid "How Python discovers and prioritizes importing modules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:112
+msgid ""
+"By default, Python adds a module in your current working directory to the"
+" front of the Python module search path."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:114
+msgid ""
+"This means that if you run your tests in your package's working "
+"directory, using a flat layout, `/package/module.py`, Python will "
+"discover `package/module.py` file before it discovers the installed "
+"package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:116
+msgid ""
+"However, if your package lives in a src/ directory structure "
+"**src/package**, then it won't be added to the Python path by default. "
+"This means that when you import your package, Python will be forced to "
+"search the active environment (which has your package installed)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:118
+msgid ""
+"Note: Python versions 3.11 and above have a path setting that can be "
+"adjusted to ensure the priority is to use installed packages first (e.g.,"
+" `PYTHONSAFEPATH`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:121
+msgid "Don't include tests in your package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:123
+msgid ""
+"Writing [tests](tests-intro) for your package is important; however, we "
+"do not recommend including tests as part of your [package wheel](python-"
+"wheel) by default. However, not including tests in your package "
+"distribution will make it harder for people other than yourself to test "
+"whether your package runs properly on their system. If you have a small "
+"test suite (Python files + data), and think your users may want to run "
+"tests locally on their systems, you can include tests by moving the "
+"`tests/` directory into the **src/package** directory (see example "
+"below)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:132
+msgid ""
+"Including the **tests/** directory in your **src/package** directory "
+"ensures that tests will be included in your package's [wheel](python-"
+"wheel)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:134
+msgid ""
+"Be sure to read the [pytest documentation for more about including tests "
+"in your package "
+"distribution](https://docs.pytest.org/en/7.2.x/explanation/goodpractices.html#choosing-a"
+"-test-layout-import-rules)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:136
+msgid "Challenges with including tests and data in a package wheel"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:139
+msgid ""
+"Tests, especially when accompanied by test data, can create a few small "
+"challenges, including:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:141
+msgid ""
+"Take up space in your distribution, which will build up over time as "
+"storage space on PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:142
+msgid "Large file sizes can also slow down package installation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:144
+msgid ""
+"However, in some cases, particularly in the scientific Python ecosystem, "
+"you may need to include tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:147
+msgid "**Don't include test suite datasets in your package**"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:149
+msgid ""
+"If you include your tests in your package distribution, we strongly "
+"discourage you from including data in your test suite directory. Rather, "
+"host your test data in a repository such as Figshare or Zenodo. Use a "
+"tool such as [Pooch](https://www.fatiando.org/pooch/latest/) to access "
+"the data when you (or a user) runs tests."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:155
+msgid ""
+"For more information about Python package tests, see the [tests section "
+"of our guide](tests-intro)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:157
+msgid ""
+"The **src/package** layout is semantically more clear. Code is always "
+"found in the **src/package** directory, `tests/` and `docs/`are in the "
+"root directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:161
+msgid ""
+"If your package tests require data, do NOT include that data within your "
+"package structure. Including data in your package structure increases the"
+" size of your distribution files. This places a maintenance toll on "
+"repositories like PyPI and Anaconda.org that have to deal with thousands "
+"of package uploads."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:167
+msgid "Click here for a quickstart tutorial on creating your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:176
+msgid "What is the flat Python package layout?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:178
+msgid "Many scientific packages use the **flat-layout** given:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:180
+msgid ""
+"This layout is used by many core scientific Python packages such as "
+"NumPy, SciPy, and Matplotlib."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:181
+msgid ""
+"Many Python tools depend upon tools in other languages and/or complex "
+"builds with compilation steps. Many maintainers prefer features of the "
+"flat layout for more complex builds."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:185
+msgid ""
+"While we suggest that you use the **src/package** layout discussed above,"
+" it's important to also understand the flat layout, especially if you "
+"plan to contribute to a package that uses this layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:188
+msgid "Why most scientific Python packages do not use src/ layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:191
+msgid ""
+"Migrating larger scientific packages that already use a flat layout would"
+" consume significant time and resources."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:193
+msgid ""
+"However, the advantages of using the **src/package** layout for a "
+"beginner are significant. As such, we recommend that you use the "
+"**src/package** layout if you are creating a new package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:196
+msgid ""
+"Numerous packages in the ecosystem [have had to move to a **src/package**"
+" layout](https://github.com/scikit-build/cmake-python-"
+"distributions/pull/145)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:200
+msgid "What does the flat layout structure look like?"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:202
+msgid "The flat layout's primary characteristics are:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:204
+msgid ""
+"The source code for your package lives in a directory with your package's"
+" name in the root of your directory"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:206
+msgid ""
+"Often the `tests/` directory also lives within that same `package` "
+"directory."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:208
+msgid ""
+"Below you can see the recommended structure of a scientific Python "
+"package using the flat layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:230
+msgid "Benefits of using the flat layout in your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:232
+msgid ""
+"There are some benefits to the scientific community in using the flat "
+"layout."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:234
+msgid ""
+"This structure has historically been used across the ecosystem and "
+"packages using it are unlikely to change."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:236
+msgid ""
+"You can import the package directly from the root directory. For some "
+"this is engrained in their respective workflows. However, for a beginner "
+"the danger of doing this is that you are not developing and testing "
+"against the installed version of your package. Rather, you are working "
+"directly with the flat files."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:242
+msgid "Core scientific Python packages that use the flat layout"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:245
+msgid "[numpy](https://github.com/numpy/numpy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:246
+msgid "[scipy](https://github.com/scipy/scipy)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:247
+msgid "[pandas](https://github.com/pandas-dev/pandas)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:248
+msgid "[xarray](https://github.com/pydata/xarray)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:249
+msgid "[Jupyter-core](https://github.com/jupyter/jupyter_core)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:250
+msgid "[Jupyter notebook](https://github.com/jupyter/notebook)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:251
+msgid "[scikit-learn](https://github.com/scikit-learn/scikit-learn)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:253
+msgid ""
+"It would be a significant maintenance cost and burden to move all of "
+"these packages to a different layout. The potential benefits of the "
+"source layout for these tools are not worth the maintenance investment."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:258
+msgid "Multiple packages in a src/ folder"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:261
+msgid ""
+"In some more advanced cases, you may have more than one package in your "
+"**src/** directory. See [Black's GitHub "
+"repo](https://github.com/psf/black/tree/main/src) for an example of this."
+" However, for most beginners you will likely only have one sub-directory "
+"in your **src/** folder."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:1
+msgid "Creating New Versions of Your Python Package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:6
+msgid "Key Takeways"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:8
+msgid ""
+"Follow [semantic versioning guidelines (SemVer) "
+"rules](https://semver.org/) when bumping (increasing) your Python's "
+"package version; for example a major version bump (version 1.0 --> 2.0) "
+"equates to breaking changes in your package's code for a user."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:9
+msgid ""
+"You may want to consider using a plugin like hatch_vsc for managing "
+"versions of your package - if you want to have a GitHub only release "
+"workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:10
+msgid ""
+"Otherwise most major package build tools such as Hatch, Flit and PDM have"
+" a version feature that will help you update your package's version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:11
+msgid "Avoid updating your packages version number manually by hand in your code!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:14
+msgid ""
+"pyOpenSci recommends that you follow the [Python PEP "
+"440](https://peps.python.org/pep-0440) which recommends using [semantic "
+"versioning guidelines](https://www.python.org/dev/peps/pep-0440"
+"/#semantic-versioning) when assigning release values to new versions of "
+"your Python package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:18
+msgid ""
+"[Semantic versioning](https://semver.org/) is an approach to updating "
+"package versions that considers the type and extent of a change that you "
+"are making to the package code. Being consistent with how and when you "
+"update your package versions is important as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:23
+msgid ""
+"It helps your users (which might include other developers that depend on "
+"your package) understand the extent of changes to a package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:24
+msgid ""
+"It helps your development team make decisions about when to bump a "
+"package version based on standard rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:26
+msgid ""
+"Consistent version increases following semver rules mean that values of "
+"your package version explain the extent of the changes made in the code "
+"base from version to version. Thus your package version numbers become "
+"\"expressive\" in the same way that naming code variables well can [make "
+"code expressive](https://medium.com/@daniel.oliver.king/writing-"
+"expressive-code-b69ef7a5a2fa)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:28
+msgid "A note about versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:29
+msgid ""
+"In some cases even small version changes can turn a package update into a"
+" breaking change for some users. What is also important is that you "
+"document how you version your code and if you can, also document your "
+"deprecation policy for code."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:38
+msgid "SemVer rules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:40
+msgid "Following SemVer, your bump your package version to a:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:42
+msgid "patch (1.1.1 --> 1.1.**2**)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:43
+msgid "minor (1.1.1 --> 1.**2**.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:44
+msgid "major (1.1.1 --> **2**.1.1)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:46
+msgid "version number change based on the following rules:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:48
+msgid "Given a version number MAJOR.MINOR.PATCH, increment the:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:50
+msgid "**MAJOR version** when you make incompatible API changes"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:51
+msgid ""
+"**MINOR version** when you add functionality in a backwards compatible "
+"manner"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:52
+msgid ""
+"**PATCH version** when you make backwards compatible bug fixes Additional"
+" labels for pre-release and build metadata are available as extensions to"
+" the MAJOR.MINOR.PATCH format."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:57
+msgid ""
+"Some people prefer to use [calver](https://calver.org/index.html) for "
+"versioning. It may be a simpler-to-use system given it relies upon date "
+"values associated with released versions. However, calver does not "
+"provide a user with a sense of when a new version might break an existing"
+" build. As such we still suggest semver."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:60
+msgid ""
+"pyOpenSci will never require semver in a peer review as long as a package"
+" has a reasonable approach to versioning!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:64
+msgid "Avoid manually updating Python package version numbers if you can"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:66
+msgid ""
+"Often times you may want to have your package version value in multiple "
+"locations. One example of this is that it might be both an attribute in "
+"your package **version** and also called in your documentation."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:71
+msgid ""
+"We recommend that you avoid manual updates of your package version number"
+" to avoid human-error. It is better practice to keep your version number "
+"in one location."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:75
+msgid ""
+"If you can't implement a single location version, then consider using a "
+"tool like hatch, PDM or bump2version that will update the version values "
+"for you - throughout your package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:79
+msgid ""
+"Below we discuss some tools that you can use to manage updating Python "
+"package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:85
+msgid "Tools to manage versions for your Python package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:87
+msgid ""
+"There are a handful of tools that are widely used in the scientific "
+"ecosystem that you can use to manage your package versions. Some of these"
+" tools are built into or work with your chosen [packaging build tools "
+"that discussed in this chapter.](python-package-build-tools)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:93
+msgid "Below, we provide an overview of these tools."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:99
+msgid ""
+"There are three general groups of tools that you can use to manage "
+"package versions:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:102
+msgid ""
+"**semantic release tools:** These tools will automagically determine what"
+" type of version bump to use using the text in your commit messages. "
+"Below we discuss [Python Semantic Release](https://python-semantic-"
+"release.readthedocs.io/en/latest/) as a Python tool that implements a "
+"semantic versioning approach."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:104
+msgid ""
+"**Manual incremental bump tools:** Tools like "
+"[Hatch](https://hatch.pypa.io/latest/version/) offer version bumping "
+"within your package. Normally this is implemented at the command link for"
+" instance `hatch version major` would bump your project from 0.x to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:105
+msgid ""
+"**Version Control System tools:** Finally there are tools that rely on "
+"your version control system to track versions. These tools often are "
+"plugins to your package build tool (ex: setuptools build or hatchling). "
+"We discuss this option below assuming that you are using **.git tags** "
+"and **GitHub** to manage your package repository."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:107
+msgid "Semantic release, vs version control based vs manual version bumping"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:109
+msgid ""
+"Generally semantic release and version control system tools can be setup "
+"to run automatically on GitHub using GitHub Actions. This means that you "
+"can create a workflow where a GitHub release and associated new version "
+"tag is used to trigger an automated build that:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:115
+msgid "Builds your package and updates the version following the new tag"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:116
+msgid "Tests the build and publishes to test PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:117
+msgid "Publishes the package to PyPI"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:120
+msgid ""
+"Bumping a package version refers to the step of increasing the package "
+"version after a set number of changes have been made to it. For example, "
+"you might bump from version 0.8 to 0.9 of a package or from 0.9 to 1.0."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:124
+msgid ""
+"Using semantic versioning, there are three main \"levels\" of versions "
+"that you might consider:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:127
+msgid "Major, minor and patch. These are described in more detail below."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:130
+msgid "Tools for bumping Python package versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:132
+msgid ""
+"In this section we discuss the following tools for managing your Python "
+"package's version:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:135
+msgid "hatch &"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:136
+msgid "hatch_vcs plugin for hatchling"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:137
+msgid "setuptools-scm"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:138
+msgid "python-semantic-version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:140
+msgid "Tool 1: Hatch and other build tools that offer incremental versioning"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:142
+msgid ""
+"Many of the modern build tool front end tools offer version support that "
+"follow semantic versioning rules. These tools are different from Python "
+"Semantic Version in that they do not require specific commit messages to "
+"implement version. Rather, they allow you to update the version at the "
+"command line using commands such as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:148
+msgid "`tool-name version update major`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:149
+msgid "`tool-name version update minor`"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:151
+msgid ""
+"[Hatch](https://hatch.pypa.io/latest/version/), for instance offers "
+"`hatch version minor` which will modify the version of your package "
+"incrementally. With **Hatch** the version value will be found in your "
+"`pyproject.toml` file. "
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:154
+msgid "Hatch (or other tools like PDM) pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:156
+msgid "Easy to use version updates locally using a single tool!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:158
+msgid "Hatch (or other tools like PDM) cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:160
+msgid ""
+"There will be some setup involved to ensure package version is updated "
+"throughout your package"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:162
+msgid "Tool 2: Hatch_vcs & hatchling build back-end"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:164
+msgid ""
+"[hatch_vcs](https://github.com/ofek/hatch-vcs) is a versioning tool that "
+"allows you to manage package versions using **git tags**. Hatch_vcs "
+"creates a **\\_version.py** file in your package ecosystem that keeps "
+"track of the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:169
+msgid ""
+"Hatch keeps track of your package's version in a `_version.py` file. "
+"Storing the version in a single file managed by Hatch provides your "
+"package with a \"single source of truth\" value for the version number. "
+"This in turn eliminates potential error associated with manually updating"
+" your package's version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:175
+msgid ""
+"When you (or your CI system) build your package, hatch checks the current"
+" tag number for your package. If it has increased, it will update the "
+"**\\_version.py** file with the new value."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:178
+msgid ""
+"Thus, when you create a new tag or a new release with a tag and build "
+"your package, Hatch will access the new tag value and use it to update "
+"your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:181
+msgid ""
+"To use **hatch_vcs** you will need to use the **hatchling** build back "
+"end."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:184
+msgid ""
+"Hatchling can also be used with any of the modern build tools including "
+"**Flit** and **PDM** if you prefer those for your day to day workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:189
+msgid "Hatch example setup in your pyproject.toml"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:198
+msgid ""
+"**Hatch_vcs** supports a fully automated package release and build, and "
+"push to PyPI workflow on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:208
+msgid ""
+"If you use **setuptools_scm**, then you might find **hatch_vcs** and "
+"**hatchling** to be the modern equivalent to your current setuptools / "
+"build workflow."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:211
+msgid "hatch_vcs pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:213
+msgid "Hatch supports modern Python packaging standards"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:214
+#: ../../package-structure-code/python-package-versions.md:240
+msgid "It creates a single-source file that contains your package version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:215
+#: ../../package-structure-code/python-package-versions.md:241
+msgid "You never manually update the package version"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:216
+#: ../../package-structure-code/python-package-versions.md:242
+msgid ""
+"You can automate writing the version anywhere in your package including "
+"your documentation!"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:217
+#: ../../package-structure-code/python-package-versions.md:243
+msgid ""
+"It supports a purely GitHub based release workflow. This simplifies "
+"maintenance workflows."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:218
+#: ../../package-structure-code/python-package-versions.md:244
+msgid ""
+"Version number is updated in your package via a hidden `_version.py` "
+"file. There is no manual configuration updates required."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:219
+#: ../../package-structure-code/python-package-versions.md:245
+msgid ""
+"While we like detailed commit messages (See Python Semantic Version "
+"below), we know that sometimes when maintaining a package specific "
+"guidelines around commit messages can be hard to apply and manage."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:221
+msgid "hatch_vcs cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:223
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub. But you could locally develop a build"
+" to \"bump\" tag versions"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:226
+msgid "Tool 3: setuptools-scm versioning using git tags"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:228
+msgid ""
+"[`Setuptools_scm`](https://github.com/pypa/setuptools-scm/) is an "
+"extension that you can use with setuptools to manage package versions. "
+"**Setuptools_scm** operates the same way that **hatch_vcs** (discussed "
+"above) does. It stores a version in a **\\_version.py** file and relies "
+"on (**git**) tags to determine the package's current version."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:234
+msgid ""
+"If you are using **setuptools** as your primary build tool, then "
+"`*setuptools-scm` is a good choice as:"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:238
+msgid "setuptools_scm Pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:246
+msgid "**setuptools** is still the most commonly used Python packaging build tool"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:248
+msgid "setuptools_scm cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:250
+msgid ""
+"In a CI workflow you will end up manually entering or creating the "
+"version number via a tag on GitHub."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:251
+msgid "Not well documented"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:252
+msgid ""
+"Because setuptools will always have to support backwards compatibility it"
+" will always be slower in adopting modern Python packaging conventions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:254
+msgid ""
+"As such you might consider using a more modern tool such as **hatch_vcs**"
+" and **hatchling** to build your package and manage package versions."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:266
+msgid ""
+"Tool 4: [Python semantic release](https://python-semantic-"
+"release.readthedocs.io/en/latest/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:268
+msgid ""
+"Python semantic release uses a commit message workflow that updates the "
+"version of your package based on keywords found in your commit messages. "
+"As the name implies, Python Semantic Release follows semver release "
+"rules."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:273
+msgid ""
+"With Python Semantic Release, versions are triggered using specific "
+"language found in a git commit message."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:276
+msgid ""
+"For example, the words `fix(attribute_warning):` trigger Python Semantic "
+"Release to implement a **patch** version bump. For instance if your "
+"package was at version 1.1.0 and you made the commit below with the words"
+" fix(text-here), Python Semantic Release would bump your package to "
+"version 1.1.1."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:286
+msgid ""
+"Similarly a feature (`feat()`) triggers a minor version bump. For example"
+" from version 1.1 to version 1.2"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:294
+msgid ""
+"You can find a thoughtful discussion of python semantic version [in this "
+"Python package guide](https://py-pkgs.org/07-releasing-versioning"
+"#automatic-version-bumping). Note that the guide hasn't been updated "
+"since 2020 and will potentially be updated in the future! But for now, "
+"some of the commands are dated but the content is still excellent."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:297
+msgid "Python Semantic Release pros"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:299
+msgid "Follows semver versioning closely"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:300
+msgid ""
+"Enforces maintainers using descriptive commit messages which can simplify"
+" troubleshooting and ensure a cleaner and more self-describing git "
+"history."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:302
+msgid "Python Semantic Release cons"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:304
+msgid ""
+"Requires very specific commit language to work. In practice some "
+"maintainers and contributors may not be able to maintain that level of "
+"specificity in commit messages (NOTE: there are bots that will check git "
+"commit messages in a repo)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:305
+msgid ""
+"Release happens at the command line. This makes is harder to implement a "
+"GitHub based release workflow as the wrong commit message could trigger a"
+" release."
+msgstr ""
+
+#: ../../package-structure-code/python-package-versions.md:306
+msgid ""
+"The version number is manually updated in a configuration file such as "
+"`pyproject.toml` vs. in a package **\\_version.py** file."
+msgstr ""
diff --git a/locales/it/LC_MESSAGES/tests.po b/locales/it/LC_MESSAGES/tests.po
new file mode 100644
index 000000000..e6eafc00b
--- /dev/null
+++ b/locales/it/LC_MESSAGES/tests.po
@@ -0,0 +1,1594 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tests/code-cov.md:1
+msgid "Code coverage for your Python package test suite"
+msgstr ""
+
+#: ../../tests/code-cov.md:3
+msgid ""
+"Code coverage measures how much of your package's code runs during "
+"testing. Achieving high coverage can help ensure the reliability of your "
+"codebase, but it’s not a guarantee of quality. Below, we outline key "
+"considerations for using code coverage effectively."
+msgstr ""
+
+#: ../../tests/code-cov.md:8
+msgid "Why aim for high code coverage?"
+msgstr ""
+
+#: ../../tests/code-cov.md:10
+msgid ""
+"A good practice is to ensure that every line of your code runs at least "
+"once during your test suite. This helps you:"
+msgstr ""
+
+#: ../../tests/code-cov.md:13
+msgid ""
+"**Identify untested parts:** Parts of your codebase that are not covered "
+"by tests."
+msgstr ""
+
+#: ../../tests/code-cov.md:15
+msgid "**Catch bugs:** Bugs that might otherwise go unnoticed."
+msgstr ""
+
+#: ../../tests/code-cov.md:16
+msgid "**Build confidence:** Confidence in your software's stability."
+msgstr ""
+
+#: ../../tests/code-cov.md:18
+msgid "Limitations of code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:20
+msgid "While high code coverage is valuable, it has its limits:"
+msgstr ""
+
+#: ../../tests/code-cov.md:22
+msgid ""
+"**Difficult-to-test code:** Some parts of your code might be challenging "
+"to test, either due to complexity or limited resources."
+msgstr ""
+
+#: ../../tests/code-cov.md:24
+msgid ""
+"**Missed edge cases:** Running all lines of code doesn't guarantee that "
+"edge cases are handled correctly."
+msgstr ""
+
+#: ../../tests/code-cov.md:27
+msgid ""
+"Ultimately, you should focus on how your package will be used and ensure "
+"your tests cover those scenarios adequately."
+msgstr ""
+
+#: ../../tests/code-cov.md:30
+msgid "Tools for analyzing Python package code coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:32
+msgid ""
+"Some common services for analyzing code coverage are "
+"[codecov.io](https://about.codecov.io/) and "
+"[coveralls.io](https://coveralls.io/). These projects are free for open "
+"source tools and provide dashboards that show how much of your codebase "
+"is covered during your tests. We recommend setting up an account (on "
+"either CodeCov or Coveralls) and using it to keep track of your code "
+"coverage."
+msgstr ""
+
+#: ../../tests/code-cov.md:39
+#, python-format
+msgid ""
+"Screenshot of the code cov service - showing test coverage for the "
+"stravalib package. This image shows a list of package modules and the "
+"associated number of lines and % lines covered by tests. At the top of "
+"the image, you can see what branch is being evaluated and the path to the"
+" repository."
+msgstr ""
+
+#: ../../tests/code-cov.md:44
+msgid ""
+"The CodeCov platform is a useful tool if you wish to track code coverage "
+"visually. Using it, you can get the same summary information that you can"
+" get with the **pytest-cov** extension. You can also see what lines are "
+"covered by your tests and which are not. Code coverage is useful for "
+"evaluating [unit tests](test-types.md#unit-tests) and/or how much of your"
+" package code is \"covered\". It, however, will not evaluate things like "
+"[integration tests](test-types.md#integration-tests) and [end-to-end "
+"workflows](test-types.md)."
+msgstr ""
+
+#: ../../tests/code-cov.md:56
+msgid "Typing & MyPy coverage"
+msgstr ""
+
+#: ../../tests/code-cov.md:57
+msgid "You can also create and upload typing reports to CodeCov."
+msgstr ""
+
+#: ../../tests/code-cov.md:60
+msgid "Exporting Local Coverage Reports"
+msgstr ""
+
+#: ../../tests/code-cov.md:62
+msgid ""
+"In addition to using services like CodeCov or Coveralls, you can generate"
+" local coverage reports directly using the **coverage.py** tool. This can"
+" be especially useful if you want to create reports in Markdown or HTML "
+"format for offline use or documentation."
+msgstr ""
+
+#: ../../tests/code-cov.md:67
+msgid "To generate a coverage report in **Markdown** format, run:"
+msgstr ""
+
+#: ../../tests/code-cov.md:73
+msgid ""
+"This command will produce a Markdown-formatted coverage summary that you "
+"can include in project documentation or share with your team."
+msgstr ""
+
+#: ../../tests/code-cov.md:76
+msgid ""
+"To generate an HTML report that provides a detailed, interactive view of "
+"which lines are covered, use:"
+msgstr ""
+
+#: ../../tests/code-cov.md:83
+msgid ""
+"The generated HTML report will be saved in a directory named `htmlcov` by"
+" default. Open the `index.html` file in your browser to explore your "
+"coverage results."
+msgstr ""
+
+#: ../../tests/code-cov.md:87
+msgid ""
+"These local reports are an excellent way to quickly review coverage "
+"without setting up an external service."
+msgstr ""
+
+#: ../../tests/code-cov.md:90 ../../tests/run-tests-nox.md:168
+#: ../../tests/run-tests.md:332 ../../tests/test-types.md:346
+#: ../../tests/write-tests.md:136
+msgid "Next steps"
+msgstr ""
+
+#: ../../tests/code-cov.md:92
+msgid ""
+"Writing meaningful tests is the foundation of useful coverage. See [Write"
+" tests](write-tests.md) and [Test types](test-types.md) to learn more "
+"about developing better test suites. Learn how to run your tests both "
+"[locally](run-tests.md) and in [continuous integration](tests-ci.md)."
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Intro"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Write tests"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Test types"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests locally"
+msgstr ""
+
+#: ../../tests/index.md:70 ../../tests/run-tests-nox.md:7
+msgid "Run tests with Nox"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Run tests online (using CI)"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Code coverage"
+msgstr ""
+
+#: ../../tests/index.md:70
+msgid "Create & Run Tests"
+msgstr ""
+
+#: ../../tests/index.md:2
+msgid "Tests and data for your Python package"
+msgstr ""
+
+#: ../../tests/index.md:4
+msgid ""
+"Adding tests to your package provides a set of checks that ensure that "
+"its functioning how you expect it to."
+msgstr ""
+
+#: ../../tests/index.md:7
+msgid ""
+"In this section, you will learn about the importance of writing tests for"
+" your Python package, different [types of tests that you should consider"
+"](test-types) and how you can set up infrastructure to run your tests "
+"both [locally](run-tests) and [on GitHub](tests-ci)."
+msgstr ""
+
+#: ../../tests/index.md:16
+msgid "✨ Why write tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:21
+msgid ""
+"Learn about the importance of writing tests for your Python package and "
+"how they help you and potential contributors."
+msgstr ""
+
+#: ../../tests/index.md:25
+msgid "✨ Types of tests ✨"
+msgstr ""
+
+#: ../../tests/index.md:30
+msgid ""
+"Get to know the three test types: unit, integration, and end-to-end "
+"tests. Learn when and how to use each."
+msgstr ""
+
+#: ../../tests/index.md:34
+msgid "✨ Run tests locally ✨"
+msgstr ""
+
+#: ../../tests/index.md:39
+msgid ""
+"Learn about testing tools like pytest, nox, and tox to run tests across "
+"different Python versions on your computer. And explore examples of using"
+" Hatch with UV as a task runner to run tests across Python versions."
+msgstr ""
+
+#: ../../tests/index.md:43
+msgid "✨ Run tests locally (using nox) ✨"
+msgstr ""
+
+#: ../../tests/index.md:48
+msgid ""
+"Nox is a python powered task runner that can be used to run tests. Learn "
+"how to use nox to run tests."
+msgstr ""
+
+#: ../../tests/index.md:51
+msgid "✨ Run tests online (using CI) ✨"
+msgstr ""
+
+#: ../../tests/index.md:56
+msgid ""
+"Set up continuous integration with GitHub Actions to run tests across "
+"Python versions and operating systems."
+msgstr ""
+
+#: ../../tests/index.md:60
+msgid "✨ Code coverage ✨"
+msgstr ""
+
+#: ../../tests/index.md:65
+msgid ""
+"Measure how much of your package code runs during tests. Learn to "
+"generate local reports and visualize coverage online."
+msgstr ""
+
+#: ../../tests/run-tests.md:7
+msgid "Run tests for your Python package"
+msgstr ""
+
+#: ../../tests/run-tests.md:9
+msgid ""
+"Running your tests across different Python versions and operating systems"
+" is critical to ensuring your package works for your users. Your users "
+"may be running different versions of Python and operating systems than "
+"you are."
+msgstr ""
+
+#: ../../tests/run-tests.md:13
+msgid ""
+"This page teaches you how to run tests locally in isolated environments "
+"and across multiple Python versions. You'll learn about two main "
+"automation tools: [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/en/stable/index.html). In the next "
+"lesson, you will learn about running your tests online in [continuous "
+"integration (CI)](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:20
+msgid "Why run tests across multiple environments?"
+msgstr ""
+
+#: ../../tests/run-tests.md:22
+msgid ""
+"When you develop a package on your computer, it works in one specific "
+"environment: your Python version, your operating system, and your "
+"installed dependencies. Your users, however, will run your code in many "
+"different environments. By running your tests across multiple Python "
+"versions and operating systems, you catch compatibility issues before "
+"users do."
+msgstr ""
+
+#: ../../tests/run-tests.md:28
+msgid ""
+"Additionally, running tests in isolated environments ensures that your "
+"tests pass because of your code, not because of unexpected dependencies "
+"installed on your computer. This gives you confidence that your package "
+"will work when others install it."
+msgstr ""
+
+#: ../../tests/run-tests.md:33
+msgid ""
+"On this page, you will learn about the tools that you can use to both run"
+" tests in isolated environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:37
+msgid "**Related pages:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:39
+msgid "[Write tests](write-tests.md) for best practices on writing test suites"
+msgstr ""
+
+#: ../../tests/run-tests.md:41
+msgid ""
+"[Test types](test-types.md) to understand unit, integration, and end-to-"
+"end tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:43
+msgid "[Run tests online with CI](tests-ci.md) for GitHub Actions setup"
+msgstr ""
+
+#: ../../tests/run-tests.md:44
+msgid "[Code coverage](code-cov.md) to measure how much code your tests cover"
+msgstr ""
+
+#: ../../tests/run-tests.md:48
+msgid "Tools to run your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:50
+msgid ""
+"There are three categories of tools that will make it easier to setup and"
+" run your tests in various environments:"
+msgstr ""
+
+#: ../../tests/run-tests.md:53
+msgid ""
+"**Testing framework (pytest):** Provides the syntax and tools for writing"
+" and running your tests. Learn more from the [pytest "
+"documentation](https://docs.pytest.org/). Below you will learn about "
+"pytest, the most commonly used testing framework in the scientific Python"
+" ecosystem. Testing frameworks are essential for running tests, but they "
+"don't provide an easy way to run tests across Python versions or in "
+"isolated environments—that's where automation tools come in."
+msgstr ""
+
+#: ../../tests/run-tests.md:61
+msgid ""
+"**Automation tools (Nox, Tox, Hatch):** Allow you to run tests in "
+"isolated environments and across multiple Python versions with a single "
+"command. We focus on [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/) below. These tools create virtual "
+"environments automatically and ensure your tests run consistently. "
+"However, they typically only test on your local operating system."
+msgstr ""
+
+#: ../../tests/run-tests.md:69
+msgid ""
+"**Continuous Integration (CI):** Runs your tests online across different "
+"operating systems (Windows, Mac, and Linux) and Python versions. CI "
+"integrates with platforms like GitHub Actions to automatically test every"
+" pull request and code change."
+msgstr ""
+
+#: ../../tests/run-tests.md:74
+msgid "[Learn about CI here](ci-cd)."
+msgstr ""
+
+#: ../../tests/run-tests.md:76
+msgid "Quick comparison: what each tool does"
+msgstr ""
+
+#: ../../tests/run-tests.md:78
+msgid "**Testing Framework (pytest):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:80
+msgid "Runs your tests locally in your current Python environment"
+msgstr ""
+
+#: ../../tests/run-tests.md:81
+msgid "Provides the core syntax for writing tests (assertions, fixtures, etc.)"
+msgstr ""
+
+#: ../../tests/run-tests.md:83
+msgid "Can be extended with plugins (like pytest-cov for coverage)"
+msgstr ""
+
+#: ../../tests/run-tests.md:85
+msgid "**Automation Tools (Nox, Tox, Hatch):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:87
+msgid "Run tests locally across multiple Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:88
+msgid "Create and manage isolated virtual environments automatically"
+msgstr ""
+
+#: ../../tests/run-tests.md:89
+msgid "Can automate other tasks like building documentation"
+msgstr ""
+
+#: ../../tests/run-tests.md:90
+msgid "Make it easy to reproduce test environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:92
+msgid "**Continuous Integration (GitHub Actions):**"
+msgstr ""
+
+#: ../../tests/run-tests.md:94
+msgid "Runs tests online automatically for every pull request"
+msgstr ""
+
+#: ../../tests/run-tests.md:95
+msgid "Tests across different operating systems (Windows, Mac, Linux)"
+msgstr ""
+
+#: ../../tests/run-tests.md:96
+msgid "Tests across multiple Python versions in parallel"
+msgstr ""
+
+#: ../../tests/run-tests.md:97
+msgid "Can automate deployments, releases, and other workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:99
+msgid "What testing framework / package should I use to run tests?"
+msgstr ""
+
+#: ../../tests/run-tests.md:101
+msgid ""
+"We recommend using `Pytest` to build and run your package tests. Pytest "
+"is the most common testing tool used in the Python ecosystem."
+msgstr ""
+
+#: ../../tests/run-tests.md:103
+msgid ""
+"[The Pytest package](https://docs.pytest.org/en/latest/) also has a "
+"number of extensions that can be used to add functionality such as:"
+msgstr ""
+
+#: ../../tests/run-tests.md:106
+msgid ""
+"[pytest-cov](https://pytest-cov.readthedocs.io/en/latest/) allows you to "
+"analyze the code coverage of your package during your tests, and "
+"generates a report that you can [upload to "
+"codecov](https://about.codecov.io/)."
+msgstr ""
+
+#: ../../tests/run-tests.md:108 ../../tests/tests-ci.md:7
+msgid "Todo"
+msgstr ""
+
+#: ../../tests/run-tests.md:109
+msgid "Learn more about code coverage here. (add link)"
+msgstr ""
+
+#: ../../tests/run-tests.md:113
+msgid ""
+"Your editor or IDE may add additional convenience for running tests, "
+"setting breakpoints, and toggling the `–no-cov` flag. Check your editor's"
+" documentation for more information."
+msgstr ""
+
+#: ../../tests/run-tests.md:116
+msgid "Run tests using pytest"
+msgstr ""
+
+#: ../../tests/run-tests.md:118
+msgid "If you are using **pytest**, you can run your tests locally by calling:"
+msgstr ""
+
+#: ../../tests/run-tests.md:121
+msgid "`pytest`"
+msgstr ""
+
+#: ../../tests/run-tests.md:123
+msgid ""
+"Or if you want to run a specific test file - let's call this file "
+"\"`test_module.py`\" - you can run:"
+msgstr ""
+
+#: ../../tests/run-tests.md:125
+msgid "`pytest test_module.py`"
+msgstr ""
+
+#: ../../tests/run-tests.md:127
+msgid ""
+"Learn more about pytest [here](https://docs.pytest.org/en/stable/getting-"
+"started.html)."
+msgstr ""
+
+#: ../../tests/run-tests.md:129
+msgid ""
+"Running pytest on your computer is going to run your tests in whatever "
+"Python environment you currently have activated. This means that tests "
+"will be run on a single version of Python and only on the operating "
+"system that you are running locally."
+msgstr ""
+
+#: ../../tests/run-tests.md:134
+msgid ""
+"An automation tool can simplify the process of running tests in various "
+"Python environments."
+msgstr ""
+
+#: ../../tests/run-tests.md:137
+msgid "Tests across operating systems"
+msgstr ""
+
+#: ../../tests/run-tests.md:138
+msgid ""
+"If you want to run your tests on different operating systems you can use "
+"continuous integration. [Learn more here](tests-ci)."
+msgstr ""
+
+#: ../../tests/run-tests.md:141
+msgid "Tools to automate running your tests"
+msgstr ""
+
+#: ../../tests/run-tests.md:143
+msgid ""
+"To run tests on various Python versions or in various specific "
+"environments with a single command, you can use an automation tool such "
+"as `nox` or `tox`. Both `nox` and `tox` can create an isolated virtual "
+"environments. This allows you to easily run your tests in multiple "
+"environments and across Python versions."
+msgstr ""
+
+#: ../../tests/run-tests.md:146
+msgid ""
+"We will focus on Hatch on this page as Hatch is the default tool that we "
+"use in our [tutorials](create-pure-python-package) and for our [Python "
+"package template](https://github.com/pyOpenSci/pyos-package-template)."
+msgstr ""
+
+#: ../../tests/run-tests.md:149
+msgid ""
+"If you are not a hatch fan, then [Nox](https://nox.thea.codes/) is an "
+"alternative tool that we cover in the next lesson. `nox` is a Python-"
+"based automation tool that builds upon the features of both `make` and "
+"`tox`. `nox` is designed to simplify and streamline testing and "
+"development workflows. Everything that you do with `nox` can be "
+"implemented using a Python-based interface. You will learn more about "
+"using nox [here](run-tests-nox)."
+msgstr ""
+
+#: ../../tests/run-tests.md:151
+msgid "Other automation tools you'll see in the wild"
+msgstr ""
+
+#: ../../tests/run-tests.md:154
+msgid ""
+"**[Tox](https://tox.wiki/en/latest/index.html#useful-links)** is an "
+"automation tool that supports common steps such as building "
+"documentation, running tests across various versions of Python, and more."
+msgstr ""
+
+#: ../../tests/run-tests.md:159
+msgid ""
+"**[Make](https://www.gnu.org/software/make/manual/make.html)** is a build"
+" automation tool that some developers use for running tests due to its "
+"versatility. However, Make's unique syntax can be challenging to learn, "
+"and it won't manage environments for you like Hatch and Nox do."
+msgstr ""
+
+#: ../../tests/run-tests.md:166
+msgid "Run tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:168
+msgid ""
+"**Hatch** is a modern Python packaging and environment manager that "
+"integrates test running capabilities directly into your `pyproject.toml`."
+" Unlike Nox (which uses a separate `noxfile.py`), Hatch keeps all your "
+"project configuration in one place, making it ideal if you're already "
+"using Hatch for packaging workflows."
+msgstr ""
+
+#: ../../tests/run-tests.md:174
+msgid "Why Hatch for testing?"
+msgstr ""
+
+#: ../../tests/run-tests.md:176
+msgid "Configuration lives in `pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:178
+msgid "Integrates seamlessly with Hatch's packaging and build workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:179
+msgid "No separate Python file needed (unlike Nox)"
+msgstr ""
+
+#: ../../tests/run-tests.md:180
+msgid "Easy to share standardized test environments across your team"
+msgstr ""
+
+#: ../../tests/run-tests.md:182
+msgid "Setting up Hatch environments"
+msgstr ""
+
+#: ../../tests/run-tests.md:184
+msgid ""
+"Hatch environments are defined in your `pyproject.toml`. Rather than "
+"duplicating dependencies, use `dependency-groups` to reference your test "
+"dependencies:"
+msgstr ""
+
+#: ../../tests/run-tests.md:205
+msgid ""
+"This approach keeps your test dependencies in one place and avoids "
+"duplication. For a complete example, see our [packaging template "
+"tutorial](https://www.pyopensci.org/tutorials/create-python-package.html)"
+" which shows a full `pyproject.toml` configuration."
+msgstr ""
+
+#: ../../tests/run-tests.md:210
+msgid "Running tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:212
+msgid ""
+"Once you've defined your test environment, you can run tests with simple "
+"commands:"
+msgstr ""
+
+#: ../../tests/run-tests.md:215
+msgid "**List available environments:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:221
+msgid "**Run pytest in the test environment:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:228
+msgid "Testing across Python versions"
+msgstr ""
+
+#: ../../tests/run-tests.md:230
+msgid ""
+"To test across multiple Python versions, define a matrix in your "
+"`pyproject.toml`:"
+msgstr ""
+
+#: ../../tests/run-tests.md:249
+msgid "Then run all versions with a single command:"
+msgstr ""
+
+#: ../../tests/run-tests.md:255
+msgid ""
+"Hatch will automatically run your tests on Python 3.10, 3.11, and 3.12. "
+"If you only want to test a specific Python version:"
+msgstr ""
+
+#: ../../tests/run-tests.md:262
+msgid "Using Hatch in GitHub Actions"
+msgstr ""
+
+#: ../../tests/run-tests.md:264
+msgid "Hatch integrates well with CI/CD. Here's a minimal GitHub Actions setup:"
+msgstr ""
+
+#: ../../tests/run-tests.md:288
+msgid ""
+"Since all of your test dependencies are declared in the `dependency-"
+"group` table of your `pyproject.toml`, your CI environment is "
+"reproducible and consistent with the environments that you are using for "
+"local testing."
+msgstr ""
+
+#: ../../tests/run-tests.md:292
+msgid "Nox vs Hatch: choosing the right tool"
+msgstr ""
+
+#: ../../tests/run-tests.md:294
+msgid ""
+"Both Hatch and Nox are excellent automation tools / task runners for "
+"running tests across Python versions. Here's how they compare to help you"
+" decide which fits your workflow:"
+msgstr ""
+
+#: ../../tests/run-tests.md:298
+msgid "Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:300
+msgid ""
+"**Configuration:** Hatch uses a `declarative` configuration approach. You"
+" tell it what goes into an environment and that empowers Hatch to create "
+"the environment for you. All configuration settings live in your "
+"`pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:302
+msgid ""
+"**Integration:** Hatch is package management tool that also has an "
+"integrated automation / task runner. Using Hatch means you are using the "
+"same tool for all of your packaging and automation needs."
+msgstr ""
+
+#: ../../tests/run-tests.md:303
+msgid ""
+"**Learning curve:** Easier if you prefer declarative configuration over a"
+" code based workflow"
+msgstr ""
+
+#: ../../tests/run-tests.md:304
+msgid ""
+"**packaging scope** Hatch is better for simpler workflows that focus on "
+"testing and packaging. If you have more complex builds or are creating a "
+"non pure python package you might prefer Nox. The scientific Python "
+"development guide has more details on this."
+msgstr ""
+
+#: ../../tests/run-tests.md:305
+msgid ""
+"**Best for:** Teams using Hatch for packaging, or those who want "
+"standardized configuration in one place"
+msgstr ""
+
+#: ../../tests/run-tests.md:308
+msgid "Nox"
+msgstr ""
+
+#: ../../tests/run-tests.md:310
+msgid "**Configuration:** Python-driven via `noxfile.py` for maximum flexibility"
+msgstr ""
+
+#: ../../tests/run-tests.md:311
+msgid "**Customization:** Great for complex workflows that need custom logic"
+msgstr ""
+
+#: ../../tests/run-tests.md:312
+msgid ""
+"**Learning curve:** Easier if you already know Python and want flexible "
+"session control"
+msgstr ""
+
+#: ../../tests/run-tests.md:314
+msgid ""
+"**Best for:** Complex automation needs, building docs alongside tests, or"
+" workflows that don't fit the standard model"
+msgstr ""
+
+#: ../../tests/run-tests.md:317
+msgid "What we recommend"
+msgstr ""
+
+#: ../../tests/run-tests.md:319
+msgid ""
+"**If you're using Hatch for packaging:** Use Hatch for testing too. You "
+"get everything in one place and one consistent tool."
+msgstr ""
+
+#: ../../tests/run-tests.md:322
+msgid ""
+"**If you need maximum flexibility:** Choose Nox. Its Python-driven "
+"approach lets you implement almost any workflow."
+msgstr ""
+
+#: ../../tests/run-tests.md:325
+msgid ""
+"**If you're just starting out:** Start with Hatch. It's simpler to set up"
+" and understand, and you can always switch to Nox later if you need to."
+msgstr ""
+
+#: ../../tests/run-tests.md:328
+msgid ""
+"**Both tools are good choices.** For a more comprehensive guide to using"
+" Nox, see [Run tests with Nox](run-tests-nox.md) and the [Scientific "
+"Python testing guide](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests.md:334
+msgid ""
+"Now that you understand how to run tests locally across Python versions, "
+"you can learn about [running tests automatically in GitHub Actions with "
+"continuous integration](tests-ci). You can also review [test types](test-"
+"types) and [write tests](write-tests) for your package."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:9
+msgid ""
+"**Nox** is a Python-based automation tool for running tests across "
+"multiple Python versions and managing isolated test environments. If you "
+"prefer Python-driven configuration over TOML, or need complex automation "
+"workflows, Nox is an excellent choice."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:14
+msgid ""
+"For more information about Nox, see the [official Nox "
+"documentation](https://nox.thea.codes/) or the [Scientific Python guide "
+"to testing](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:18
+msgid "Why Nox?"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:20
+msgid "**Nox** is a great automation tool because it:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:22
+msgid "Is Python-based, making it accessible if you already know Python"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:23
+msgid "Will create isolated environments to run workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:24
+msgid "Supports complex, custom automation beyond standard testing"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:25
+msgid "Is flexible and powerful for intricate build and test scenarios"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:27
+msgid ""
+"`nox` simplifies creating and managing testing environments. With `nox`, "
+"you can set up virtual environments and run tests across Python versions "
+"using the environment manager of your choice with a single command."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:31
+msgid "Set up Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:33
+msgid ""
+"To get started with Nox, you create a `noxfile.py` file at the root of "
+"your project directory. You then define commands using Python functions."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:37
+msgid "Nox installations"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:39
+msgid ""
+"When you install and use Nox to run tests across different Python "
+"versions, Nox will create and manage individual `venv` environments for "
+"each Python version that you specify in the Nox function. Nox will manage"
+" each environment on its own."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:45
+msgid ""
+"Nox can also be used for other development tasks such as building "
+"documentation, creating your package distribution, and testing "
+"installations across both PyPI-related environments (e.g., venv, "
+"virtualenv) and `conda` (e.g., `conda-forge`)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:50
+msgid "Test environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:52
+msgid ""
+"By default, `nox` uses Python's built-in `venv` environment manager. A "
+"virtual environment (`venv`) is a self-contained Python environment that "
+"allows you to isolate and manage dependencies for different Python "
+"projects. It helps ensure that project-specific libraries and packages do"
+" not interfere with each other, promoting a clean and organized "
+"development environment."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:58
+msgid "Nox with venv environments"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:60
+msgid ""
+"Below is an example of setting up Nox to run tests using `venv`, which is"
+" the built-in environment manager that comes with base Python."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:63
+msgid ""
+"Note that the example below assumes that you have setup your "
+"`pyproject.toml` to declare test dependencies using `project.optional-"
+"dependencies`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:83
+msgid ""
+"With this setup, you can use `session.install(\".[tests]\")` to install "
+"your test dependencies. Notice that below one single Nox session allows "
+"you to run your tests on 4 different Python environments (Python 3.9, "
+"3.10, 3.11, and 3.12)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:89
+msgid ""
+"For this to run you will need to have python3.9, python3.10, python3.11, "
+"and python3.12 installed on your computer. Otherwise nox will skip "
+"running tests for whatever versions are missing."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:107
+msgid ""
+"Above you create a Nox session in the form of a function with a "
+"`@nox.session` decorator. Notice that within the decorator you declare "
+"the versions of Python that you wish to run."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:111
+msgid ""
+"To run the above, you'd execute the following command, specifying which "
+"session with `--session` (sometimes shortened to `-s`). Your function "
+"above is called `test`, therefore the session name is `test`:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:119
+msgid "Nox with conda / mamba"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:121
+msgid ""
+"Below is an example for setting up Nox to use mamba (or conda) for your "
+"environment manager. Unlike venv, conda can automatically install the "
+"various versions of Python that you need. You won't need to install all "
+"four Python versions if you use conda/mamba, like you do with `venv`."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:127
+msgid ""
+"For `conda` to work with `nox`, you will need to ensure that either "
+"`conda` or `mamba` is installed on your computer."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:150
+msgid "To run the above session you'd use:"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:156
+msgid "Hatch vs Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:158
+msgid ""
+"If you're trying to decide between Hatch and Nox, see the [comparison and"
+" recommendations on the main testing page](run-tests.md)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:161
+msgid "In summary"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:163
+msgid ""
+"**Choose Hatch** if you're already using Hatch for packaging and want "
+"everything in one place"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:165
+msgid ""
+"**Choose Nox** if you need maximum flexibility, prefer Python-driven "
+"configuration, or need complex automation workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:170
+msgid ""
+"Now that you understand how to run tests locally with Nox, you can learn "
+"about [running tests automatically with continuous integration](tests-ci)"
+" or [running tests with Hatch](run-tests.md)."
+msgstr ""
+
+#: ../../tests/test-types.md:1
+msgid "Test Types for Python packages"
+msgstr ""
+
+#: ../../tests/test-types.md:3
+msgid "Three types of tests: unit, integration, and functional tests"
+msgstr ""
+
+#: ../../tests/test-types.md:5
+msgid ""
+"There are different types of tests that you want to consider when "
+"creating your test suite:"
+msgstr ""
+
+#: ../../tests/test-types.md:8 ../../tests/test-types.md:15
+msgid "Unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:9 ../../tests/test-types.md:93
+msgid "Integration tests"
+msgstr ""
+
+#: ../../tests/test-types.md:10
+msgid "End-to-end (also known as functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:12
+msgid ""
+"Each type of test has a different purpose. Here, you will learn about all"
+" three types of tests by working through simple examples."
+msgstr ""
+
+#: ../../tests/test-types.md:17
+msgid ""
+"A unit test involves testing individual components or units of code in "
+"isolation to ensure that they work correctly. The goal of unit testing is"
+" to verify that each part of the software, typically at the function or "
+"method level, performs its intended task correctly."
+msgstr ""
+
+#: ../../tests/test-types.md:22
+msgid ""
+"Unit tests can be compared to examining each piece of your puzzle to "
+"ensure parts or subsections of it are not broken. If all of the pieces of"
+" that section of your puzzle don't fit together, you will never complete "
+"it. Similarly, when working with code, tests ensure that each function, "
+"attribute, class, and method works properly when isolated."
+msgstr ""
+
+#: ../../tests/test-types.md:28
+msgid ""
+"**Unit test example:** Suppose you have a function that adds two numbers "
+"together. A unit test for that function ensures that when provided with "
+"two numbers, it returns the correct sum. This is a unit test because it "
+"checks a single unit (function) in isolation."
+msgstr ""
+
+#: ../../tests/test-types.md:54
+msgid ""
+"Example unit test for the above function. You'd run this test using the "
+"`pytest` command in your **tests/** directory."
+msgstr ""
+
+#: ../../tests/test-types.md:76
+msgid ""
+"Notice that the tests above don't just test one case where numbers are "
+"added together. Instead, they test multiple scenarios: adding positive "
+"numbers, adding a negative number, and adding zero. This helps ensure "
+"that the `add_numbers` function behaves correctly in different situations"
+" and is the beginning of thinking about programming defensively."
+msgstr ""
+
+#: ../../tests/test-types.md:83
+msgid ""
+"You can run this test from your terminal using `pytest "
+"tests/test_math_utils.py`."
+msgstr ""
+
+#: ../../tests/test-types.md:86 ../../tests/test-types.md:215
+msgid ""
+"image of puzzle pieces that all fit together nicely. The puzzle pieces "
+"are colorful - purple, green and teal."
+msgstr ""
+
+#: ../../tests/test-types.md:90
+msgid ""
+"Your unit tests should ensure each part of your code works as expected on"
+" its own."
+msgstr ""
+
+#: ../../tests/test-types.md:95
+msgid ""
+"Integration tests involve testing how parts of your package work together"
+" or integrate. Integration tests can be compared to connecting a bunch of"
+" puzzle pieces together to form a whole picture. Integration tests focus "
+"on how different pieces of your code fit and work together."
+msgstr ""
+
+#: ../../tests/test-types.md:100
+msgid ""
+"For example, suppose you have functions that convert temperatures and "
+"calculate statistics. An integration test would ensure that these "
+"functions work together correctly in a workflow where you convert "
+"temperatures and then analyze them."
+msgstr ""
+
+#: ../../tests/test-types.md:178
+msgid ""
+"Here's an integration test that checks how the conversion and statistics "
+"functions work together:"
+msgstr ""
+
+#: ../../tests/test-types.md:204
+msgid ""
+"This integration test verifies that the conversion and averaging "
+"functions work together as expected in a real workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:207
+msgid ""
+"image of two puzzle pieces with some missing parts. The puzzle pieces are"
+" purple teal yellow and blue. The shapes of each piece don’t fit "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:212
+msgid ""
+"If puzzle pieces have missing ends, they can’t work together with other "
+"elements in the puzzle. The same is true with individual functions, "
+"methods and classes in your software. The code needs to work both "
+"individually and together to perform certain sets of tasks."
+msgstr ""
+
+#: ../../tests/test-types.md:220
+msgid ""
+"Your integration tests should ensure that parts of your code that are "
+"expected to work together, do so as expected."
+msgstr ""
+
+#: ../../tests/test-types.md:224
+msgid "End-to-end (functional) tests"
+msgstr ""
+
+#: ../../tests/test-types.md:226
+msgid ""
+"End-to-end tests (also referred to as functional tests) in Python are "
+"like comprehensive checklists for your software. They simulate real user "
+"workflows to make sure the code base supports real-life applications and "
+"use-cases from start to finish. These tests help catch issues that might "
+"not show up in smaller tests and ensure your entire application behaves "
+"correctly. Think of them as a way to give your software a final check "
+"before it's put into action, making sure it's ready to deliver a smooth "
+"user experience."
+msgstr ""
+
+#: ../../tests/test-types.md:235
+msgid "Image of a completed puzzle showing a daisy"
+msgstr ""
+
+#: ../../tests/test-types.md:240
+msgid ""
+"End-to-end or functional tests represent an entire workflow that your "
+"package supports."
+msgstr ""
+
+#: ../../tests/test-types.md:244
+msgid ""
+"**End-to-end test example:** Let's say your package opens and "
+"processes/converts temperature data from Celsius to Fahrenheit and then "
+"calculates the average temperature. An end-to-end test would simulate "
+"this entire workflow, ensuring that the package correctly handles the "
+"input temperature data and returns a summary average value. An end-to-end"
+" test would provide sample data, run the entire workflow, and verify that"
+" the final output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:274
+msgid ""
+"This end-to-end test exercises the entire user workflow: providing sample"
+" data, converting and averaging it, and verifying the output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:278
+msgid ""
+"End-to-end tests also verify how a program runs from start to finish. A "
+"tutorial that you add to your documentation and run in CI is another "
+"example of an end-to-end test. For example, a Jupyter (`.ipynb`) notebook"
+" or `.md` file with embedded code that demonstrates a complete user "
+"workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:285
+msgid ""
+"For scientific packages, creating short tutorials that highlight core "
+"workflows that your package supports, that are run when your "
+"documentation is built, could also serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:290
+msgid "When to use which test type"
+msgstr ""
+
+#: ../../tests/test-types.md:292
+msgid ""
+"If you’re new to testing, start with unit tests. They are the simplest to"
+" write, fastest to run, and easiest to debug. As your package grows, you "
+"can then add integration and end-to-end tests where they add the most "
+"value."
+msgstr ""
+
+#: ../../tests/test-types.md:294
+msgid "Start by writing unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:296
+msgid "Are you testing a single function, method, or class in isolation?"
+msgstr ""
+
+#: ../../tests/test-types.md:298
+msgid "→ Yes: Write a [unit test](test-types.md#unit-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:300
+msgid "Example: Check that add_numbers(2, 3) returns 5"
+msgstr ""
+
+#: ../../tests/test-types.md:301
+msgid "Unit tests don’t rely on other parts of your code"
+msgstr ""
+
+#: ../../tests/test-types.md:302
+msgid "These tests form the foundation of your test suite"
+msgstr ""
+
+#: ../../tests/test-types.md:303
+msgid "If something breaks, unit tests make it easy to find where"
+msgstr ""
+
+#: ../../tests/test-types.md:305
+msgid "Add integration tests next"
+msgstr ""
+
+#: ../../tests/test-types.md:307
+msgid "Are you testing how multiple components work together?"
+msgstr ""
+
+#: ../../tests/test-types.md:309
+msgid "→ **Yes:** Write [integration tests](test-types.md#integration-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:311
+msgid "Example: Converting temperatures and then computing their average"
+msgstr ""
+
+#: ../../tests/test-types.md:312
+msgid "Integration tests assume individual pieces already work"
+msgstr ""
+
+#: ../../tests/test-types.md:313
+msgid "These tests verify that components interact correctly"
+msgstr ""
+
+#: ../../tests/test-types.md:315
+msgid "Use end-to-end tests for core workflows"
+msgstr ""
+
+#: ../../tests/test-types.md:317
+msgid "Are you testing a complete, realistic user workflow from start to finish?"
+msgstr ""
+
+#: ../../tests/test-types.md:319
+msgid ""
+"→ **Yes:** Use an [end-to-end test](test-types.md#end-to-end-functional-"
+"tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:321
+msgid "Example: Run a full data-processing workflow a user would follow"
+msgstr ""
+
+#: ../../tests/test-types.md:322
+msgid "These tests often mirror examples in your documentation"
+msgstr ""
+
+#: ../../tests/test-types.md:323
+msgid "Use them sparingly for the most important workflows."
+msgstr ""
+
+#: ../../tests/test-types.md:324
+msgid "Tutorials run during documentation builds can serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:326
+msgid "Comparing unit, integration, and end-to-end tests"
+msgstr ""
+
+#: ../../tests/test-types.md:328
+msgid ""
+"Unit tests, integration tests, and end-to-end tests have complementary "
+"advantages and disadvantages. The fine-grained nature of unit tests makes"
+" them well-suited for isolating where errors are occurring. However, unit"
+" tests are not useful for verifying that different sections of code work "
+"together."
+msgstr ""
+
+#: ../../tests/test-types.md:334
+msgid ""
+"Integration and end-to-end tests verify that different portions of the "
+"program work together, but are less valuable for immediately isolating "
+"exactly where errors are occurring."
+msgstr ""
+
+#: ../../tests/test-types.md:338
+msgid "Tests don't have to be perfect"
+msgstr ""
+
+#: ../../tests/test-types.md:339
+msgid ""
+"It is important to note that you don't need to spend energy worrying "
+"about the specifics of test types. When you begin to work on your test "
+"suite, consider what your package does and how you may need to test parts"
+" of it. Being familiar with different test types provides a framework to "
+"help you think about writing tests and how they can complement each "
+"other."
+msgstr ""
+
+#: ../../tests/test-types.md:348
+msgid ""
+"Now that you understand test types, learn how to [write effective tests"
+"](write-tests) for your package. Then explore how to [run tests locally"
+"](run-tests) and in [continuous integration](tests-ci). You can also "
+"learn about tracking test coverage using tools like [CodeCov](code-cov)."
+msgstr ""
+
+#: ../../tests/tests-ci.md:1
+msgid "Run tests with Continuous Integration"
+msgstr ""
+
+#: ../../tests/tests-ci.md:3
+msgid ""
+"Running your [test suite locally](run-tests) is useful as you develop "
+"code and also test new features or changes to the code base. However, you"
+" also will want to setup Continuous Integration (CI) to run your tests "
+"online. CI allows you to run all of your tests in the cloud. While you "
+"may only be able to run tests locally on a specific operating system, "
+"using CI you can specify tests to run both on various versions of Python "
+"and across different operating systems."
+msgstr ""
+
+#: ../../tests/tests-ci.md:5
+msgid ""
+"CI can also be triggered for pull requests and pushes to your repository."
+" This means that every pull request that you, your maintainer team or a "
+"contributor submit, can be tested. In the end CI testing ensures your "
+"code continues to run as expected even as changes are made to the code "
+"base."
+msgstr ""
+
+#: ../../tests/tests-ci.md:9
+msgid ""
+"Learn more about Continuous Integration and how it can be used, here. "
+"(add link)"
+msgstr ""
+
+#: ../../tests/tests-ci.md:13
+msgid "CI & pull requests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:15
+msgid ""
+"CI is invaluable if you have outside people contributing to your "
+"software. You can setup CI to run on all pull requests submitted to your "
+"repository. CI can make your repository more friendly to new potential "
+"contributors. It allows users to contribute code, documentation fixes and"
+" more without having to create development environments, run tests and "
+"build documentation locally."
+msgstr ""
+
+#: ../../tests/tests-ci.md:22
+msgid "Example GitHub Actions that runs tests"
+msgstr ""
+
+#: ../../tests/tests-ci.md:24
+msgid ""
+"Below is an example GitHub Actions that runs tests using nox across both "
+"Windows, Mac and Linux and on Python versions 3.9-3.11."
+msgstr ""
+
+#: ../../tests/tests-ci.md:28
+msgid ""
+"To work properly, this file should be located in a root directory of your"
+" GitHub repository:"
+msgstr ""
+
+#: ../../tests/write-tests.md:1
+msgid "Write tests for your Python package"
+msgstr ""
+
+#: ../../tests/write-tests.md:3
+msgid ""
+"**Writing code** that tests your package code, also known as test suites,"
+" is important for you as a maintainer, your users, and package "
+"contributors. Test suites consist of sets of functions, methods, and "
+"classes that are written with the intention of making sure a specific "
+"part of your code works as you expected it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:9
+msgid "Why write tests for your package?"
+msgstr ""
+
+#: ../../tests/write-tests.md:11
+msgid ""
+"Tests act as a safety net for code changes. They help you identify and "
+"fix bugs before they affect users. Tests also instill confidence that "
+"code changes from contributors won't break existing functionality."
+msgstr ""
+
+#: ../../tests/write-tests.md:15
+msgid "Writing tests for your Python package is important because:"
+msgstr ""
+
+#: ../../tests/write-tests.md:17
+msgid ""
+"**Catch mistakes:** Tests are a safety net. When you make changes or add "
+"new features to your package, tests can quickly tell you if you "
+"accidentally broke something that was working fine before."
+msgstr ""
+
+#: ../../tests/write-tests.md:20
+msgid ""
+"**Save time:** Imagine you have a magic button that can automatically "
+"check if your package is still working properly. Tests are like that "
+"magic button! They can run all those checks for you, saving you time."
+msgstr ""
+
+#: ../../tests/write-tests.md:23
+msgid ""
+"**Easier collaboration:** If you're working with others or have outside "
+"contributors, tests help everyone stay on the same page. Your tests "
+"explain how your package is supposed to work, making it easier for others"
+" to understand and contribute to your project."
+msgstr ""
+
+#: ../../tests/write-tests.md:27
+msgid ""
+"**Fearless refactoring:** Refactoring means making improvements to your "
+"code structure without changing its behavior. Tests empower you to make "
+"these changes; if you break something, test failures will let you know."
+msgstr ""
+
+#: ../../tests/write-tests.md:30
+msgid ""
+"**Documentation:** Tests serve as technical examples of how to use your "
+"package. This can be helpful for new technical contributors who want to "
+"contribute code to your package. They can look at your tests to "
+"understand how parts of your code functionality fits together."
+msgstr ""
+
+#: ../../tests/write-tests.md:34
+msgid ""
+"**Long-term ease of maintenance:** As your package evolves, tests ensure "
+"that your code continues to behave as expected, even as you make changes "
+"over time. Thus you are helping your future self when writing tests."
+msgstr ""
+
+#: ../../tests/write-tests.md:38
+msgid ""
+"**Easier pull request reviews:** By running your tests in a CI framework "
+"such as GitHub Actions, each time you or a contributor makes a change to "
+"your code-base, you can catch issues and things that may have changed in "
+"your code base. This ensures that your software behaves the way you "
+"expect it to."
+msgstr ""
+
+#: ../../tests/write-tests.md:44
+msgid "Tests for user edge cases"
+msgstr ""
+
+#: ../../tests/write-tests.md:46
+msgid ""
+"Edge cases refer to unexpected or \"outlier\" ways that some users may "
+"use your package. Tests enable you to address various edge cases that "
+"could impair your package's functionality. For example, what occurs if a "
+"function expects a pandas `dataframe` but a user supplies a numpy "
+"`array`? Does your code gracefully handle this situation, providing clear"
+" feedback, or does it leave users frustrated by an unexplained failure?"
+msgstr ""
+
+#: ../../tests/write-tests.md:55
+msgid ""
+"For a good introduction to testing, see [this Software Carpentry "
+"lesson](https://swcarpentry.github.io/python-novice-"
+"inflammation/10-defensive.html)"
+msgstr ""
+
+#: ../../tests/write-tests.md:59
+msgid "Test examples"
+msgstr ""
+
+#: ../../tests/write-tests.md:62
+msgid "Let's say you have a Python function that adds two numbers together."
+msgstr ""
+
+#: ../../tests/write-tests.md:84
+msgid ""
+"A test to ensure that function runs as you might expect when provided "
+"with different numbers might look like this:"
+msgstr ""
+
+#: ../../tests/write-tests.md:103
+msgid "🧩🐍 How do you know what type of tests to write?"
+msgstr ""
+
+#: ../../tests/write-tests.md:105
+msgid "As you begin to write tests for your package, you should consider:"
+msgstr ""
+
+#: ../../tests/write-tests.md:107
+msgid ""
+"there are [three types of tests Test Types for Python Packages](test-"
+"types.md) that can help guide your development."
+msgstr ""
+
+#: ../../tests/write-tests.md:108
+msgid ""
+"your tests should consider how a user might use (and misuse!) your "
+"package."
+msgstr ""
+
+#: ../../tests/write-tests.md:111
+msgid ""
+"This section has been adapted from [a presentation by Nick "
+"Murphy](https://zenodo.org/records/8185113)."
+msgstr ""
+
+#: ../../tests/write-tests.md:115
+msgid "But, what should you be testing in your package? Below are a few examples:"
+msgstr ""
+
+#: ../../tests/write-tests.md:118
+msgid ""
+"**Test some typical cases:** Test that the package functions as you "
+"expect it to when users use it. For instance, if your package is supposed"
+" to add two numbers, test that the outcome value of adding those two "
+"numbers is correct."
+msgstr ""
+
+#: ../../tests/write-tests.md:123
+msgid ""
+"**Test special cases:** Sometimes there are special or outlier cases. For"
+" instance, if a function performs a specific calculation that may become "
+"problematic closer to the value of 0, test it with the input of both 0 "
+"and nearby values."
+msgstr ""
+
+#: ../../tests/write-tests.md:128
+msgid ""
+"**Test at and near expected boundaries:** If a function requires a value "
+"that is greater than or equal to 1, make sure that the function still "
+"works with the values 1 and 0.999, as well as 1.001 (values close to the "
+"constraint). Make sure that the function fails gracefully when given "
+"unexpected values and that the user can easily understand why it failed "
+"by providing a useful error message."
+msgstr ""
+
+#: ../../tests/write-tests.md:138
+msgid ""
+"Now that you understand what and why to test, explore the [three types of"
+" tests](test-types.md) (unit, integration, and end-to-end) to determine "
+"which style of tests best fits your package. Then, learn how to [run your"
+" tests locally](run-tests.md) and [in continuous integration](tests-"
+"ci.md). Finally, track your progress with [code coverage](code-cov.md) "
+"metrics."
+msgstr ""
diff --git a/locales/it/LC_MESSAGES/tutorials.po b/locales/it/LC_MESSAGES/tutorials.po
new file mode 100644
index 000000000..2fa55f64a
--- /dev/null
+++ b/locales/it/LC_MESSAGES/tutorials.po
@@ -0,0 +1,6885 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2026, pyOpenSci
+# This file is distributed under the same license as the pyOpenSci Python
+# Package Guide package.
+# FIRST AUTHOR , 2026.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: pyOpenSci Python Package Guide \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME \n"
+"Language: it\n"
+"Language-Team: it \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../tutorials/add-license-coc.md:6
+msgid "Add a `LICENSE` & `CODE_OF_CONDUCT` to your Python package"
+msgstr "Aggiungi i file `LICENSE` e `CODE_OF_CONDUCT` al tuo Python package"
+
+#: ../../tutorials/add-license-coc.md:8
+msgid "In the [previous lesson](add-readme) you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:10
+msgid ""
+" "
+"Created a basic `README.md` file for your scientific Python package"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:12
+msgid ""
+" "
+"Learned about the core components that are useful to have in a `README` "
+"file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:14 ../../tutorials/add-readme.md:15
+msgid "Learning objectives"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:17 ../../tutorials/add-readme.md:17
+#: ../../tutorials/pyproject-toml.md:30
+msgid "In this lesson you will learn:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:19
+msgid ""
+"How to select a license and add a `LICENSE` file to your package "
+"repository, with a focus on the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:20
+msgid "How to add a `CODE_OF_CONDUCT` file to your package repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:21
+msgid ""
+"How you can use the Contributors Covenant website to add generic language"
+" as a starting place for your `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:24
+msgid "What is a license?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:26
+msgid ""
+"A license contains legal language about how users can use and reuse your "
+"software. To set the `LICENSE` for your project, you:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:28
+msgid ""
+"Create a `LICENSE` file in your project directory that specifies the "
+"license that you choose for your package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:29
+msgid ""
+"Describe your choice of license in your `pyproject.toml` data where "
+"metadata are set."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:31
+msgid ""
+"By adding this metadata to your [pyproject.toml](pyproject-toml) file, "
+"the choice of license will be included in your package's metadata which "
+"is used to populate your package's PyPI landing page. The `LICENSE` file "
+"is also used in your GitHub repository's landing page interface, and "
+"makes its way into your distributions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:36
+msgid "What license should you use?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:38
+msgid ""
+"We suggest that you use a permissive license that accommodates the other "
+"most commonly used licenses in the scientific Python ecosystem (MIT[^mit]"
+" and BSD-3-Clause[^bsd3]). If you are unsure, use MIT given it's the "
+"generally recommended license on "
+"[choosealicense.com](https://choosealicense.com/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:41
+msgid "Licenses for the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:42
+msgid ""
+"[We discuss licenses for the scientific Python ecosystem in more detail "
+"here in our guidebook.](../documentation/repository-files/license-files)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:45
+msgid "Where should the `LICENSE` file live"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:47
+msgid ""
+"Your `LICENSE` file should be placed at the root of your package's "
+"repository. When you add the `LICENSE` at the root, GitHub will "
+"automagically discover it and provide users with a direct link to your "
+"`LICENSE` file within your GitHub repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:53
+msgid ""
+"Image showing the GitHub repository for SunPy an accepted pyOpenSci "
+"package."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:55
+msgid ""
+"Notice at the top of the README portion of the GitHub landing page, there"
+" are three tabs directly linking to the `README` file which is visible, "
+"the `CODE_OF_CONDUCT` file and one that specifies the license that SunPy "
+"uses. These files are discovered by GitHub because they are placed in the"
+" root of the project directory using standard naming conventions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:62
+msgid "How to add a `LICENSE` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:64
+msgid "There are several ways to add a `LICENSE` file:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:66
+msgid ""
+"When you create a new repository on GitHub, it will ask you if you wish "
+"to add a `LICENSE` file at that time. If you select yes, it will create "
+"the file for you."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:67
+msgid ""
+"You can add a `LICENSE` through the GitHub gui following the [ instructions "
+"here](https://docs.github.com/en/communities/setting-up-your-project-for-"
+"healthy-contributions/adding-a-license-to-a-repository)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:68
+msgid "You can add the file manually as we are doing in this lesson."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:71
+msgid "If you completed the past lessons including"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:73
+msgid "[Making your code installable](create-python-package.md) and"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:74
+msgid "[publishing your package to PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:76
+msgid ""
+"then you already have a `LICENSE` file containing text for the MIT "
+"license in your Python package. Thus you can skip to the next section of "
+"this tutorial which walks you through adding a `CODE_OF_CONDUCT`."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:78
+msgid ""
+"If you don't yet have a `LICENSE` file in your directory, then continue "
+"reading."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:81
+msgid "How to add a `LICENSE` to your package - the manual way"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:83
+msgid ""
+"If you don't already have a `LICENSE` file, and you are not yet using a "
+"platform such as GitHub or GitLab, then you can create a `LICENSE` file "
+"by"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:85
+msgid "Create a new file called `LICENSE`. If you are using shell you can type:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:92
+msgid "Go to [choosealicense.com](https://choosealicense.com/)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:93
+msgid "Select permissive license"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:94
+msgid ""
+"It will suggest that you use the [MIT "
+"license](https://choosealicense.com/licenses/mit/)."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:95
+msgid ""
+"Copy the license text that it provides into your `LICENSE` file that you "
+"created above."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:96
+msgid "Save your file. You're all done!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:98
+msgid "An overview of licenses in the scientific Python ecosystem"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:101
+msgid ""
+"In the pyOpenSci [packaging guidebook](../documentation/repository-files"
+"/license-files), we provide an overview of licenses in the scientific "
+"Python ecosystem. We review why license files are important, which ones "
+"are most commonly used for scientific software and how to select the "
+"correct license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:103
+msgid ""
+"If you want a broad overview of why licenses are important for protecting"
+" open source software, [check out this blog post that overviews the legal"
+" side of things.](https://opensource.guide/legal/#just-give-me-the-tldr-"
+"on-what-i-need-to-protect-my-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Instructions for adding a `LICENSE` file within the GitHub interface"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add license: new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:114
+msgid ""
+"When you create a new GitHub repository you can add a `LICENSE` file "
+"through the GitHub interface."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:119
+msgid ""
+"Screenshot of the create new repository interface that GitHub provides. "
+"The elements of this are the owner and repository name for the new repo. "
+"Below that you can add a description of the repository. Below that you "
+"can set it to be public or private. At the bottom of the interface there "
+"is an Add a README checkbox where it will add a blank readme file for "
+"you. At the very bottom there is a line to add a .gitignore file and "
+"another to choose a license."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:121
+msgid ""
+"Image showing the GitHub interface that allows you to add a `LICENSE` and"
+" `README` file when you create a new repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md
+msgid "Add `LICENSE`: Existing GitHub repository"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:127
+msgid ""
+"If you already have a GitHub repository for your package, then you can "
+"add a `LICENSE` using the GitHub interface by adding a new file to the "
+"repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:129
+msgid ""
+"Follow the instructions to select and add a license to your repository on"
+" the [GitHub LICENSE page](https://docs.github.com/en/communities"
+"/setting-up-your-project-for-healthy-contributions/adding-a-license-"
+"to-a-repository) ."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:130
+msgid ""
+"Once you have added your `LICENSE` file, be sure to sync your git local "
+"repository with the repository on GitHub.com. This means running `git "
+"pull` to update your local branch."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:133
+msgid ""
+"Image showing what the LICENSE file looks like in the GItHub interface. "
+"At the top you can see the actual license which in this image is BSD "
+"3-clause New or revised license. Then there is some text describing both "
+"what the license is and the associated permissions for that specific "
+"license. At the bottom of the image, the actual text for the license is "
+"shown in the LICENSE file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:135
+msgid ""
+"You can view a summary of the `LICENSE` chosen on your project's GitHub "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:142
+msgid ""
+"Now you know how to add a `LICENSE` to your project. Next, you'll learn "
+"about the `CODE_OF_CONDUCT.md` file and how to add it to your package "
+"directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:147
+msgid "What is a code of conduct file?"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:149
+#, python-brace-format
+msgid ""
+"A `CODE_OF_CONDUCT` file is a {term}`Code of conduct` used to establish "
+"guidelines for how people in your community interact."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:152
+msgid ""
+"This file is critical to supporting your community as it grows. The "
+"`CODE_OF_CONDUCT`:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:155
+msgid ""
+"Establishes guidelines for how users and contributors interact with each "
+"other and you in your software repository."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:156
+msgid "Identifies negative behaviors that you don't want in your interactions."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:158
+msgid ""
+"You can use your code of conduct as a tool that can be referenced when "
+"moderating challenging conversations."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:160
+msgid "What to put in your `CODE_OF_CONDUCT` file"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:162
+msgid ""
+"If you are unsure of what language to add to your `CODE_OF_CONDUCT` file,"
+" we suggest that you adopt the [contributor covenant "
+"language](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/) as a starting place."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:165
+msgid "Contributor Covenant"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:167
+msgid ""
+"The `CODE_OF_CONDUCT.md` should be placed at the root of your project "
+"directory, similar to the `LICENSE` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:169
+msgid "How to add a `CODE_OF_CONDUCT` file to your package directory"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:171
+msgid ""
+"Add a `CODE_OF_CONDUCT.md` file to the root of your repository if it "
+"doesn't already exist."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:177
+msgid ""
+"Visit the [contributor covenant website](https://www.contributor-"
+"covenant.org/) and add [the markdown version of their code of "
+"conduct](https://www.contributor-"
+"covenant.org/version/2/1/code_of_conduct/code_of_conduct.md) to your "
+"`CODE_OF_CONDUCT.md` file. Be sure to fill in any placeholder "
+"information. Read the text closely to ensure you both understand it and "
+"also agree with its contents!"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:179
+msgid "That's it - you've now added a code of conduct to your package directory."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:181
+msgid "Additional Code of Conduct resources"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:184
+msgid ""
+"[ Guide: `CODE_OF_CONDUCT.md` "
+"files](https://docs.github.com/en/communities/setting-up-your-project-"
+"for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:185
+msgid ""
+"[pyOpenSci package guide `CODE_OF_CONDUCT.md` "
+"overview](https://www.pyopensci.org/python-package-guide/documentation"
+"/repository-files/code-of-conduct-file.html)"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:188 ../../tutorials/add-readme.md:240
+#: ../../tutorials/publish-conda-forge.md:475
+#: ../../tutorials/pyproject-toml.md:699
+msgid " Wrap up"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:190
+msgid "In this lesson and the [last lesson](add-readme), you have added a:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:192
+msgid "`README` file;"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:193
+msgid "`LICENSE` file and a"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:194
+msgid "`CODE_OF_CONDUCT` file."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:196
+msgid ""
+"These are fundamental files needed for every scientific Python package "
+"repository. These files help users understand how to use your package and"
+" interact with package maintainers."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:200
+#: ../../tutorials/create-python-package.md:455
+msgid "In the upcoming lessons, you will:"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:202
+msgid ""
+"[Add more metadata to your `pyproject.toml` file](pyproject-toml) to "
+"support building and publishing your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:203
+msgid ""
+"Publish a new version of your Python package to the test PyPI to preview "
+"the updated metadata landing page."
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:208
+#: ../../tutorials/create-python-package.md:550
+#: ../../tutorials/publish-conda-forge.md:487
+#: ../../tutorials/publish-pypi.md:419
+#: ../../tutorials/trusted-publishing.md:347
+msgid "Footnotes"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:210
+msgid "https://opensource.org/license/mit/"
+msgstr ""
+
+#: ../../tutorials/add-license-coc.md:211
+msgid "https://opensource.org/license/bsd-3-clause/"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:6
+#, python-brace-format
+msgid "Add a {term}`README` file to your {term}`Python package`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:8
+msgid "In the previous lessons you learned:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:10
+msgid "[What a Python package is](intro.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:11
+msgid "[How to make your code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:12
+msgid "[How to publish your package to (test) PyPI](publish-pypi.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:13
+msgid "[How to publish your package to conda-forge](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:19
+msgid "How to add a **README.md** file to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:20
+msgid "What the core elements of a **README.md** file are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:23
+msgid "What is a README file?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:25
+#, python-brace-format
+msgid ""
+"The `README.md` file is the project's {term}`README` and is located at "
+"the root of your project directory. It helps a user understand:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:29
+msgid "You package's name"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:30
+msgid ""
+"What the package does. Your README file should clearly state the "
+"problem(s) that your software is designed to solve and its target "
+"audience."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:31
+msgid "The current development \"state\" of the package (through badges)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:32
+msgid "How to get started with using your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:33
+msgid "How to contribute to your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:34
+msgid "How to cite your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:36
+msgid ""
+"Your **README.md** file is important as it is often the first thing that "
+"someone sees before they install your package. The README file is also "
+"used to populate your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:38
+msgid ""
+"Note that there is no specific content structure for README files. "
+"However, this tutorial outlines the sections that we suggest that you "
+"include in your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:42
+msgid "Create a README.md file for your package"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:44
+msgid "It's time to add a `README.md` file to your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:46
+msgid "Step 0: Create a README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:47
+msgid ""
+"To get started, if you don't already have a README.md file in your "
+"project directory, create one."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:50
+msgid "If you created your project directory from"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:52
+msgid "a GitHub repository online"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:53
+msgid "using `hatch init`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:55
+msgid "Then you may already have a README.MD file in your project directory."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:61
+msgid "Step 1: Add the name of your package as the README title"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:63
+msgid "At the top of the `README.md` file, add the name of your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:65
+msgid ""
+"If you are using markdown it should be a header 1 (H1) tag which is "
+"denoted with a single `#` sign."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:67
+msgid "`# Package-title-here`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:69
+msgid "Step 2: add badges to the top of your README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:71
+msgid ""
+"It's common for maintainers to add badges to the top of their README "
+"files. Badges allow you and your package users to track things like:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:73
+msgid "Broken documentation and test builds."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:74
+msgid "Versions of your package that are on PyPI and conda."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:75
+msgid ""
+"Whether your package has been reviewed and vetted by an organization such"
+" as pyOpenSci and/or JOSS."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:77
+msgid ""
+"If you have already published your package to pypi.org you can use "
+"[shields.io to create a package version badge](https://shields.io/badges"
+"/py-pi-version). This badge will dynamically update as you release new "
+"versions of your package to PyPI."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:79
+msgid ""
+"If not, you can leave the top empty for now and add badges to your README"
+" at a later point as they make sense."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:81
+msgid "Step 3: Add a description of what your package does"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:83
+msgid ""
+"Below the badges (if you have them), add a section of text that provides "
+"an easy-to-understand overview of what your package does."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:87
+msgid "Keep this section short."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:88
+msgid "Try to avoid jargon."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:89
+msgid ""
+"Define technical terms that you use to make the description accessible to"
+" more people."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:91
+msgid ""
+"Remember that the more people understand what your package does, the more"
+" people will use it."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:93
+msgid "Step 4: Add package installation instructions"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:95
+msgid "Next, add instructions that tell users how to install your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:97
+#, python-brace-format
+msgid ""
+"For example, can they use {term}`pip` to install your package? `python -m"
+" pip install packagename`"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:100
+msgid "or conda?"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:102
+msgid "`conda install -c conda-forge packagename`."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:104
+msgid ""
+"If you haven't yet published your package to pypi.org then you can skip "
+"this section and come back and add these instructions later."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:108
+msgid "Step 5: Any additional setup"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:110
+msgid ""
+"In some cases, your package users may need to manually install other "
+"tools in order to use your package. If that is the case, be sure to add a"
+" section on additional setup to your README file."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:115
+msgid ""
+"Here, briefly document (or link to documentation for) any additional "
+"setup that is required to use your package. This might include:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:119
+msgid "authentication information, if it is applicable to your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:120
+msgid "additional tool installations, such as GDAL."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:123
+msgid ""
+"Many packages won't need an additional setup section in their README. In "
+"that case you can always skip this section."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:128
+msgid "Step 6: Add a get started section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:130
+msgid ""
+"Next add a get-started section. Within this section, add a small code "
+"example that demonstrates importing and using some of the functionality "
+"in your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:133
+msgid "Provide a fully functional code snippet if possible"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:136
+msgid ""
+"It is important to try to make the code examples that you provide your "
+"users as useful as possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:138
+msgid ""
+"Be sure to provide a copy/paste code example that will work as-is when "
+"pasted into a Jupyter Notebook or .py file if that is possible."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:140
+msgid ""
+"If there are tokens and other steps needed to run your package, be sure "
+"to be clear about what those steps are."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:143
+msgid "For the pyosPackage, a short get started demo might look like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:151
+msgid ""
+"Or it could simply be a link to a getting started tutorial that you have "
+"created. If you don't have this yet, you can leave it empty for the time "
+"being."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:154
+msgid ""
+"This would also be a great place to add links to tutorials that help "
+"users understand how to use your package for common workflows."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:159
+msgid "Step 7: Community section"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:161
+msgid ""
+"The community section of your README file is a place to include "
+"information for users who may want to engage with your project. This "
+"engagement will likely happen on a platform like GitHub or GitLab."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:163
+msgid ""
+"In the community section, you will add links to your contributing guide "
+"and `CODE_OF_CONDUCT.md`. You will create a code of conduct file in the "
+"[next lesson](add-license-coc)."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:167
+msgid ""
+"As your package grows you may also have a link to a development guide "
+"that contributors and your maintainer team will follow. The development "
+"guide outlines how to perform maintenance tasks such as:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:170
+msgid "running tests"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:171
+msgid "making package releases"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:172
+msgid "building documentation"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:173
+msgid "and more."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:177
+msgid "Step 8: Citation information"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:179
+msgid ""
+"Finally it is important to let users know how to cite your package. You "
+"can communicate citation information in a few different ways."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:182
+msgid ""
+"You can use a tool such as zenodo to create a DOI and associated citation"
+" information for your package if it is hosted on a platform such as "
+"GitHub. [Check out this short tutorial that covers setting that "
+"up.](https://coderefinery.github.io/github-without-command-line/doi/)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:186
+msgid ""
+"Alternatively if you send your package through a peer review process such"
+" as the [one lead by pyOpenSci](https://www.pyopensci.org/about-peer-"
+"review/index.html). After being accepted by pyOpenSci, if your package is"
+" in scope, you can be accepted by the Journal of Open Source Software and"
+" get a cross-ref DOI through [our partnership with the Journal of Open "
+"Source Software.](https://www.pyopensci.org/about-peer-review/index.html)"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:190
+msgid "The finished README file"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:192
+msgid "Your finished `README.md` file should look something like this:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:242
+msgid ""
+"It's important to consider the information that a new user or contributor"
+" might need when creating your `README.md` file. While there is no "
+"perfect template, above is a set of recommendations as you are just "
+"getting started. You may find the need for other elements to be added to "
+"this file as you further develop your package and as a community begins "
+"to use your package."
+msgstr ""
+
+#: ../../tutorials/add-readme.md:248
+msgid ""
+"In the [next lesson](add-license-coc.md), you will add a LICENSE file to "
+"your Python package. A license file is critical as it tells users how "
+"they legally can (and can't) use your package. It also:"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:252
+msgid "Builds trust with your users"
+msgstr ""
+
+#: ../../tutorials/add-readme.md:253
+msgid "Discourages misuse of your package and associated code"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:63
+msgid "Command Line Reference Guide"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:9
+msgid ""
+"**What these tables are:** These tables summarize the command line inputs"
+" (e.g., `pipx install hatch`, `hatch build` or `python -m build`) "
+"necessary to complete all steps in the package creation process, from "
+"installing [Hatch](get-to-know-hatch) to publishing the package on [PyPI"
+"](publish-pypi) and conda-forge."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:14
+#, python-brace-format
+msgid ""
+"**What these tables are not:** These tables do not cover the manual or "
+"non-automated steps (e.g., create a PyPI account, create a {term}`API "
+"token`) you have to complete throughout the package creation process."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:18
+msgid ""
+"**Operating system note:** The current iteration of this guide has been "
+"tested on the Windows OS only. Many commands are Windows-specific. OS-"
+"specific commands are indicated with parentheses after the description of"
+" the command, e.g., [COMMAND_DESCRIPTION] (Windows). Corresponding "
+"commands for macOS and Linux will be added in the future."
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:21
+msgid "Environment Setup"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:43
+msgid "Package Development"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:62
+msgid "Package Publishing"
+msgstr ""
+
+#: ../../tutorials/command-line-reference.md:81
+msgid "Versions and Environments"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:7
+msgid "Create a pure Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:9
+#: ../../tutorials/develop-python-package-hatch.md:9
+msgid "About this lesson"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:13
+#, python-brace-format
+msgid ""
+"This lesson uses the pyOpenSci Python package copier template to create a"
+" {term}`Python package` quickly. Your package will be installable both "
+"locally and remotely from a website such as GitHub (or GitLab) into a "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:18
+#: ../../tutorials/setup-py-to-pyproject-toml.md:23
+msgid "In this lesson, you will learn:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:20
+msgid ""
+"How to make your code installable into any Python environment, both "
+"locally and from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:21
+msgid ""
+"How to update a [pyproject.toml file](pyproject-toml), which contains the"
+" metadata needed to build, install, and publish your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:23
+#, python-brace-format
+msgid ""
+"How to declare a {term}`Build backend` which will be used to [build"
+"](build-package) and install your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:25
+msgid "How to install your package in editable mode for interactive development"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:28
+msgid "**What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:30
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have "
+"[Copier](https://copier.readthedocs.io/en/stable/) and [Hatch installed"
+"](get-to-know-hatch) to complete the lesson successfully."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:35
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the Carpentries shell lesson[^shell-lesson]. Windows users will"
+" likely need to configure a tool such as "
+"[gitbash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:41
+msgid ""
+"This diagram has two smaller boxes with arrows pointing to the right to a"
+" Python environment. The small boxes read your-package and pip install "
+"package. The environment box on the right reads - your Python "
+"environment. It them lists your-package along with a few other core "
+"packages such as Matplotlib, NumPy, Pandas, Xarray and GeoPandas."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:43
+msgid ""
+"In a [previous lesson, you learned what a Python package is](intro). "
+"Creating a Python package allows you to install your code into any Python"
+" environment on your computer. You can then import it into workflows in "
+"the same way that you might import a package such as Pandas or GeoPandas."
+" If you push your code to GitHub or GitLab, you can also install it "
+"directly from there. [Scroll to the bottom of the page to learn more "
+"about the basic elements of a Python package.](package-overview)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:49
+msgid "Create your Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:51
+msgid ""
+"Below, you will create a pure Python package using the [pyOpenSci copier "
+"template](https://github.com/pyOpenSci/pyos-package-template). Our "
+"template uses Hatch as the default packaging tool. At the bottom of this "
+"lesson, you'll learn more about the basics of the Python package "
+"directory structure, and associated key files (`__init__.py` and "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:53
+msgid "Step 1: Set Up the Package Directory Structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:55
+msgid "Open your shell or preferred terminal."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:56
+msgid ""
+"Use the shell `cd` command to navigate in your shell to the location "
+"where you'd like your package to live. Our template will create the "
+"package directory structure for you"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:57
+msgid "Choose a name for your package. The name should:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:58
+msgid "Have no spaces (*Required*)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:59
+msgid ""
+"Use all lowercase characters (*Recommended*). For this tutorial, we will "
+"use `pyospackage`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:60
+msgid ""
+"Only use letters and the characters _ or - in the name. This means that "
+"the name `pyos*package` is not an acceptable name. However, the names "
+"`pyos_package` or `pyos-package` are both OK."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:62
+msgid ""
+"In your terminal, **run the command below**. This will begin a series of "
+"prompts that will ask you questions and help you to customize your Python"
+" package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:68
+msgid ""
+"After running the command above, the template will walk you through a "
+"series of questions."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:70
+msgid ""
+"Note that when you reach the prompt \"Do you want to answer one more "
+"question, and skip the rest, using the default values?\" you can choose "
+"Yes, but with a minimal setup to create the most basic version"
+" of your package that contains documentation, tests and a example module "
+"for you to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:72
+msgid ""
+"After this question, the template will ask you for your preferred GitHub "
+"username and will then create a package with basic tests, documentation, "
+"and GitHub configuration setup for you."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:93
+msgid ""
+"The template will then begin to copy files into the directory that used "
+"above. (`.` means current working directory.)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:101
+msgid "The final package structure will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md
+msgid "A full package with tests, docs, and GitHub infrastructure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:119
+msgid ""
+"If you use the \"bells and whistles\" default option when working through"
+" the template prompts, our template will create a complete package setup "
+"with GitHub CI actions, typing, tests, environments, and more using "
+"Hatch. If you customize the entire package, then you can select what "
+"platform you wish to host it on (GitHub vs GitLab), whether you want "
+"typing, what documentation engine you want to use, and more."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:123
+msgid "The resulting package directory looks like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:146
+msgid "The default tools that your package uses are:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:148
+msgid ""
+"[Sphinx](https://www.pyopensci.org/python-package-guide/documentation"
+"/hosting-tools/sphinx-python-package-documentation-tools.html) with the "
+"PyData Sphinx Theme for documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:149
+msgid "pytest for testing"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:150
+msgid "Hatch for environment setup"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:152
+msgid ""
+"**Full customization** If you want to customize any elements of your "
+"package setup, choose `No, I want to fully customize the template.`. "
+"This will allow you to select:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:155
+msgid "Sphinx vs [MkDocs](https://www.mkdocs.org/) vs no documentation"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:156
+msgid "GitHub vs GitLab"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:157
+msgid "VCS versioning"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:158
+msgid "and more"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:161
+msgid "Step 2: Explore the existing module in your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:163
+#, python-brace-format
+msgid ""
+"A {term}`Module` refers to a `.py` file containing the code that you want"
+" your package to access and run. Within the `pyospackage` subdirectory, "
+"you have an `example.py` module that you can use to test out your package"
+" quickly."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:167
+msgid "Notice that the code in the example.py module, has a few features:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:169
+msgid "It has a [numpy-style docstring](numpy-docstring)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:170
+msgid "It uses [typing](type-hints)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:171
+msgid ""
+"At the top of the module, there is a docstring explaining what the module"
+" does."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:173
+msgid ""
+"Python supports different docstring formats. The most popular formats for"
+" documenting Python objects are NumPy Style Docstring[^numpydoc], Google "
+"Style Docstring[^googledoc], and the Epytext Style "
+"Docstrings[^epytextdoc]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:175
+msgid "**pyOpenSci recommends using the NumPy Docstring convention.**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:177
+msgid ""
+"[Learn more about docstrings here](api-docstrings) for an overview of "
+"both topics."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:206
+msgid "Python modules and the `__init__.py` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:210
+msgid "The word module refers to a `.py` file containing Python code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:212
+msgid ""
+"The `__init__.py` allows Python to recognize that a directory contains "
+"at least one module that may be imported and used in your code. A package"
+" can have multiple modules[^python-modules]."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:217
+msgid "Step 3: Optional -- Add code to your module"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:219
+msgid ""
+"If you want, add a second function to the `example.py` module. It can be "
+"a simple function. For example, write a second function that multiplies "
+"numbers."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:222
+msgid "Step 4: Check out the metadata in your `pyproject.toml` file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:224
+msgid ""
+"A [pyproject.toml](pyproject-toml) file stores metadata that provides "
+"instructions to various tools interacting with it, including [Hatch](get-"
+"to-know-hatch), which will build your package. You can also specify "
+"metadata for your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:229
+msgid ""
+"You will learn more about the `pyproject.toml` format in the [next lesson"
+" when you add additional metadata/information to this file.](pyproject-"
+"toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:232
+msgid ""
+"The metadata in your generated `pyproject.toml` is already setup for you "
+"using the information you provided the copier template above."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:234
+msgid "Brief overview of the TOML file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:237
+msgid ""
+"[The TOML format](https://toml.io/en/) consists of tables and variables. "
+"Tables are sections of information denoted by square brackets:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:239
+msgid "`[this-is-a-table]`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:241
+msgid ""
+"Tables can contain variables within them defined by a variable name and "
+"an `=` sign. For instance, a `build-system` table most often holds two "
+"(2) variables:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:244
+msgid ""
+"`requires = `, which tells a build tool what tools it needs to install "
+"prior to building your package. In this case "
+"[hatchling](https://pypi.org/project/hatchling/)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:246
+msgid ""
+"`build-backend = `, which is used to define the specific build-backend "
+"name, (in this example we are using `hatchling.build`)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:255
+msgid ""
+"TOML organizes data structures, defining relationships within a "
+"configuration file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:258
+msgid "[Learn more about the pyproject.toml format here.](pyprojecttoml-metadata)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:261
+msgid ""
+"Open up the `pyproject.toml` file that Hatch created in your favorite "
+"text editor. It should look something like the example below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:262
+msgid ""
+"Make sure the package version, package name, and author name look "
+"correct. The email is optional."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:300
+msgid ""
+"At the bottom of the template-generated `pyproject.toml` file, you will "
+"see a section that defines Hatch environments. We will cover Hatch "
+"environments in a later lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:302
+msgid "The bare minimum needed in a pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:305
+msgid ""
+"The core information that you need in a `pyproject.toml` file to publish "
+"on PyPI is your **package's name** and the **version**. However, we "
+"suggest that you flesh out your metadata early on in the `pyproject.toml`"
+" file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:307
+msgid ""
+"Once you have your project metadata in the `pyproject.toml` file, you "
+"will rarely update it."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:311
+msgid "Step 5: Install your package locally"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:313
+msgid "At this point, you should have:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:315
+msgid "A project directory structure with a `pyproject.toml` file at the root"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:316
+msgid "A package directory containing an empty `__init__.py` file and"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:317
+msgid "At least one Python module (e.g. `example.py`)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:319
+msgid "You are now ready to install (and build) your Python package!"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:321
+msgid ""
+"While you can do this using Hatch, we will use pip for this lesson, so "
+"you can see how to install your tool into your preferred environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:323
+msgid ""
+"First, open your preferred shell (Windows users may use something like "
+"GitBash) and `cd` into your project directory if you are not already "
+"there."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:324
+msgid "Activate the Python environment that you wish to use."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:325
+msgid "Run `python -m pip install -e .`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:327
+#: ../../tutorials/create-python-package.md:560
+#: ../../tutorials/create-python-package.md:567
+#: ../../tutorials/get-to-know-hatch.md:199 ../../tutorials/intro.md:246
+#: ../../tutorials/publish-pypi.md:9 ../../tutorials/publish-pypi.md:185
+#: ../../tutorials/publish-pypi.md:358 ../../tutorials/pyproject-toml.md:744
+msgid "Todo"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:328
+msgid "Add this back in when the lesson is published"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:329
+msgid ""
+"Activate the Python environment that you wish to use. If you need help "
+"with working with virtual environments check out this lesson (add link)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:355
+msgid "What does `python -m pip install -e .` do?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:358
+msgid ""
+"`python -m pip install -e .` installs your package into the current "
+"active Python environment in **editable mode** (`-e`). Installing your "
+"package in editable mode, allows you to work on your code and then test "
+"the updates interactively in your favorite Python interface. One "
+"important caveat of editable mode is that every time you update your "
+"code, you need to restart Python."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:363
+msgid ""
+"If you wish to install the package regularly (not in editable mode) you "
+"can use:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:366
+msgid "`python -m pip install . `"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:368
+msgid "**Using `python -m` when calling `pip`**"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:370
+msgid ""
+"Above, you use`python -m` to call the version of pip installed into your "
+"current active environment. `python -m` is important to ensure that you "
+"are calling the version of pip installed in your current environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:374
+msgid ""
+"IMPORTANT: pip can also be used to install packages from PyPI. However, "
+"in this case, you are telling pip to install your package from a local "
+"folder by using the `.`. You could also specify a path to the project "
+"directory on your computer instead of the `.` which tells pip to use the "
+"current working directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:377
+msgid "Look for pyospackage in your environment"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:379
+msgid ""
+"Once you have installed your package, you can view it in your current "
+"environment. If you are using `venv` or `conda`, `pip` list will return a"
+" list of packages in the current active environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:383
+msgid ""
+"Note that because `pyospackage` is installed in editable mode (`-e`), pip"
+" will show you the directory path to your project's code"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:411
+msgid "Step 6: Test out your new package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:413
+msgid ""
+"After installing your package, type “python” at the command prompt in "
+"your chosen terminal to start a Python session in your active Python "
+"environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:416
+msgid "You can now import your package and access the `add_numbers` function."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:428
+msgid "Installing packages from GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:430
+msgid ""
+"If you wish to share your code without publishing to PyPI you can always "
+"install packages directly from GitHub using the syntax:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:437
+msgid "To make your package GitHub installable, you can:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:439
+msgid "Create a new GitHub repository"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:440
+msgid ""
+"Push the contents of the project directory that you created above, to "
+"GitHub"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:441
+msgid ""
+"Finally install the package from GitHub using the command above. When you"
+" use the command above, don't forget to substitute the user, repo, and "
+"branch_or_tag with your specific values."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:443
+msgid ""
+"For instance below you install the pyospackage from the main branch of "
+"the pyOpenSci repository."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:446
+msgid "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:450
+msgid "Congratulations! You created your first Python package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:452
+msgid ""
+"You have now created a Python package that you can install into any "
+"Python environment."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:457
+msgid ""
+"Add a [README file](add-readme.md) and [LICENSE](add-license-coc.md) to "
+"your package"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:458
+msgid ""
+"[Add more metadata to your `pyproject.toml`](pyproject-toml.md) file to "
+"support PyPI publication."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:459
+msgid ""
+"[Learn how to build your package distribution](publish-pypi) files "
+"(**sdist** and **wheel**) and publish to **test PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:460
+msgid ""
+"Finally you will learn how to [publish to **conda-forge**](publish-conda-"
+"forge) from **PyPI**."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:464
+msgid "About the Python package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:466
+msgid ""
+"To make your Python code installable you need to create a specific "
+"directory structure with the following elements:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:468
+msgid "A `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:469
+msgid "A specific directory structure."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:470
+msgid "Some code."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:471
+msgid "An `__init__.py` file in your code directory."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:473
+msgid "The directory structure you'll create in this lesson will look like this:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:488
+msgid ""
+"Diagram showing the basic steps to creating an installable package. There"
+" are 4 boxes with arrows pointing towards the right. The boxes read, your"
+" code, create package structure, add metadata to pyproject.toml and pip "
+"install package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:490
+msgid ""
+"Once you have the basic items of a Python package (code, metadata and a "
+"file structure), you can `pip install` your package into any Python "
+"environment on your computer."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:493
+msgid "About the basic package directory structure"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:495
+msgid "Notice a few things about the above layout:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:497
+msgid ""
+"Your package code lives within a `src/packagename` directory. We suggest "
+"that you use `src` (short for **source code**) directory as it [ensures "
+"that you are running tests on the installed version of your "
+"code](https://www.pyopensci.org/python-package-guide/package-structure-"
+"code/python-package-structure.html#the-src-layout-and-testing)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:498
+msgid ""
+"Within the `src` directory you have a package directory called "
+"`pyospackage`. Use the name of your package for that directory name. This"
+" will be the name for importing your package in Python code once "
+"installed."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:499
+msgid ""
+"In your package directory, you have an `__init__.py` file and all of your"
+" Python modules. You will learn more about the `__init__.py` file below."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:500
+msgid "The `pyproject.toml` file lives at the root directory of your package."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:501
+msgid ""
+"The name of the root directory for the package is **pyospackage** which "
+"is the name of the package. This is not a requirement but you will often "
+"see that the GitHub / GitLab repository and the root directory name are "
+"the same as the package name."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:503
+msgid "What is an `__init__.py` file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:505
+msgid ""
+"The `__init__.py` file tells Python that a directory should be treated as"
+" a Python package. As such, a directory with an `__init__.py` file can be"
+" imported directly into Python. The `__init__.py` file does not need to "
+"contain any code in order for Python to recognize it; it can be empty."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:509
+msgid ""
+"For example, following the file structure example above which has an "
+"`__init__.py` file within it, you can run:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:515
+#: ../../tutorials/pyproject-toml.md:56
+msgid "What is a pyproject.toml file?"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:517
+msgid "The **pyproject.toml** file is:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:519
+msgid ""
+"Where you define your project's metadata (including its name, authors, "
+"license, etc)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:520
+msgid "Where you define dependencies (the packages that it depends on)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:521
+msgid ""
+"Used to specify and configure what build backend you want to use to "
+"[build your package](../package-structure-code/python-package-"
+"distribution-files-sdist-wheel)."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:523
+msgid ""
+"After the `__init__.py` and `pyproject.toml` files have been added, your "
+"package can be built and distributed as an installable Python package "
+"using tools such as pip. Note that the `pyproject.toml` file needs to "
+"have a few basic items defined for the package to be installable "
+"including:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:529
+msgid "The `build-backend` that you want to use,"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:530
+msgid "The project `name` and `version`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:532
+msgid "Why the pyproject.toml file is important"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:535
+msgid ""
+"The `pyproject.toml` file replaces some of the functionality of both the "
+"`setup.py` file and `setup.cfg` files. If you try to pip install a "
+"package with no `pyproject.toml`, you will get the following error:"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:545
+msgid ""
+"If your project already has a `setup.py` file, Hatch can be used to "
+"automatically create a `pyproject.toml`."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:546
+msgid ""
+"See [Using Hatch to Migrate setup.py to a pyproject.toml](setup-py-to-"
+"pyproject-toml.md)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:561
+msgid ""
+"Is it clear where to add commands? Bash vs. Python console Bash vs. Zsh "
+"is different"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:563
+msgid ""
+"ADD: note about what makes something \"package worthy\", with a common "
+"misconception being that a package should be production-ready code that's"
+" valuable to a broad audience. This may not be a pervasive misconception "
+"in Python, but a quick break-out with an explanation of what a package "
+"can consist of would be helpful."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:564
+msgid "They can use a codespace to complete this lesson too."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:568
+msgid ""
+"When this lesson exists, uncomment this admonition You will learn how to "
+"automate defining a package version using git tags in the version and "
+"release your package lesson."
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:552
+msgid "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:556
+msgid "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:555
+msgid "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:557
+msgid "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
+msgstr ""
+
+#: ../../tutorials/create-python-package.md:554
+msgid ""
+"[Python module "
+"docs](https://docs.python.org/3/tutorial/modules.html#packages)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:7
+msgid "Use Hatch environments with your pure Python package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:13
+msgid ""
+"[In a previous lesson](create-pure-python-package), you learned how to "
+"create a Python package using the pyOpenSci copier template. In this "
+"lesson, you'll learn how to manage and use the Hatch environments set up "
+"by de **What you need to complete this lesson**"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:16
+msgid ""
+"To complete this lesson, you will need a local Python environment and "
+"shell on your computer. You will need to have created a package using "
+"our pyOpenSci copier template. You should also have [Hatch installed"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:20
+msgid ""
+"If you are using Windows or are not familiar with Shell, you may want to "
+"check out the [Carpentries shell lesson](https://swcarpentry.github.io"
+"/shell-novice/). Windows users will likely need to configure a tool such "
+"as [GitBash](https://gitforwindows.org/) for any Shell and git-related "
+"steps."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:23
+msgid ""
+"Welcome to your shiny new package! This page will help you get started "
+"with using [Hatch](get-to-know-hatch) to run tests, build and check your "
+"package, and build your documentation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:27
+#, python-brace-format
+msgid ""
+"To begin, have a look at the [pyproject.toml](pyproject-toml) file in "
+"your package directory. This file contains the configuration for your "
+"package and is written using {term}`TOML` format. Here's the TL&DR:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:31
+msgid "Each `[]` section in the toml file is called a table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:32
+msgid "You can nest tables with double brackets like this`[[]]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:33
+msgid ""
+"Tables contain information about a certain thing that you want to "
+"configure."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:36
+msgid ""
+"You can configure Hatch to use UV by default for environment management. "
+"UV is a package manager built in Rust. It is fast and will significantly "
+"speed up environment creation."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:38
+msgid ""
+"To use UV with Hatch, configure Hatch in the \"tools\" section of your "
+"`pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:46
+msgid ""
+"Using Hatch for developing, building, and maintaining your pure Python "
+"package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:48
+#, python-brace-format
+msgid ""
+"In the pyOpenSci Python package template, we have set up {term}`Hatch "
+"environment` definitions. You will notice at the bottom of the file, a "
+"[hatch environment](https://hatch.pypa.io/1.13/environment/) section, "
+"that looks like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:59
+msgid ""
+"Hatch allows you to configure and run environments and scripts similar to"
+" a workflow tool like tox or nox."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:62
+msgid ""
+"Hatch defaults to using `venv` to manage environments. However, you can "
+"configure it to use other environment tools, such as conda or mamba."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:64
+msgid ""
+"[Read the hatch documentation to learn more about environments. "
+"](https://hatch.pypa.io/1.13/tutorials/environment/basic-usage/)"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:68
+msgid ""
+"Below is the Hatch environment used to build and test your package. "
+"Anytime you see: `tool.hatch.envs.test`, it tells Hatch:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:71
+msgid ""
+"\"Hey, Hatch, this is the definition for an environment.`test` is the "
+"name of the environment that I want you to create.\""
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:73
+msgid "So `tool.hatch.envs.build` will create an environment called `build`."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:75
+msgid ""
+"Below the environment \"declaration,\" you can see the definition of what"
+" should be in that environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:77
+msgid "A Hatch environment to build your package"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:79
+#, python-brace-format
+msgid ""
+"Below is a Hatch environment definition that you will find in your new "
+"project's [pyproject.toml](pyproject-toml) file. It is set up to build "
+"your package's {term}`Distribution files` ({term}`Source distribution "
+"(sdist)` and {term}`Wheel (.whl)`)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:84
+#, python-brace-format
+msgid ""
+"Notice that the environment definition declares two {term}`Dependencies`:"
+" `pip` and `twine`, which the environment needs to run successfully. This"
+" declaration is similar to declaring dependencies for your package at the"
+" top of your [pyproject.toml](pyproject-toml)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:99
+msgid "Hatch will install your package in editable mode by default"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:100
+msgid ""
+"Notice the `detached = True` flag at the bottom of the environment. By "
+"default, hatch will install your package in editable mode into any "
+"environment it creates. `detached=True` tells it not to install your "
+"package into the environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:104
+msgid "Hatch scripts"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:106
+#, python-brace-format
+msgid ""
+"Hatch supports defining {term}`Script (Hatch)` commands that run in "
+"specific Hatch environments."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:109
+msgid ""
+"Above, you have defined a new environment called 'build' that Hatch will "
+"create as a virtual environment (venv). Because `detached = True` in that"
+" environment, Hatch won't install your package into it."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:111
+msgid ""
+"You can then use that environment to run \"scripts\". The definition "
+"below tells Hatch to run the following scripts in the build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:113
+msgid "`[tool.hatch.envs.build.scripts]`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:115
+msgid "You define this `scripts` to run using the following syntax, where:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:117
+msgid "`tool.hatch`: Alerts Hatch that this table is for Hatch to use"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:118
+msgid "`envs.build`: Use the defined build environment."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:119
+msgid ""
+"`scripts`: Define what scripts to run. In this case, Hatch will run shell"
+" scripts."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:122
+msgid ""
+"Below is the `build.scripts` table that defines 3 shell commands to be "
+"run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:124
+msgid "`pip check` # verifies your dependencies"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:125
+msgid "`hatch build --clean` # build your packages distribution files."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:126
+msgid ""
+"`twine check dist/*` # use twine to check that your package's sdist "
+"(source distribution) is ok."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:140
+msgid ""
+"Hatch, by default, will install your package in editable mode into any "
+"virtual environment (venv) that it creates. If `detached=True` is set, "
+"then it will skip that step."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:143
+msgid "Running the build script"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:145
+msgid "You can run the build script and build your package like this:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:147
+msgid "`hatch run build:check`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:149
+msgid ""
+"This step updates the build environment and then builds and checks the "
+"output distributions of your package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:151
+msgid "You can enter the build environment in your shell to check it out:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:157
+msgid "If you run `pip list` in the environment, twine will be there:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:163
+#: ../../tutorials/develop-python-package-hatch.md:221
+msgid "To leave the environment use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:169
+msgid "Hatch, testing, and matrix environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:171
+msgid ""
+"It's always helpful to run your tests on the Python versions that you "
+"expect your users to be using. In this section, you'll explore the test "
+"environment setup in the pyOpenSci template package."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:173
+msgid "Below, you see the Hatch environment test table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:175
+msgid ""
+"Similar to the above build environment, the environment below defines the"
+" dependencies that Hatch needs to install into the test environment "
+"(required to run your tests)."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:189
+msgid "Your test environment has a matrix associated with it"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:191
+msgid ""
+"If the environment has a matrix associated with it, that tells Hatch to "
+"run the tests across different Python versions. Below, you are running "
+"tests on versions 3.10 through 3.13."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:194
+msgid ""
+"Hatch by default will install Python [using "
+"UV](https://docs.astral.sh/uv/guides/install-python/) both when you "
+"install Hatch and also when you declare a matrix environment like the one"
+" below"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:202
+msgid ""
+"In your project, if you run `hatch shell test`, you will see the output "
+"below. This means that because there is a matrix of Python versions to "
+"choose from, you need to select the environment with the Python version "
+"you want to use."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:215
+msgid ""
+"Pick the Python test environment that you want to use and enter it, like "
+"this (this will open Python 3.13):"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:227
+msgid "Hatch scripts for tests"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:229
+msgid ""
+"In that same tests section, you will see a `tool.hatch.envs.test.scripts`"
+" section. Similar to what you saw above with the build steps, this is "
+"where the \"script\" to run your tests is defined."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:232
+msgid ""
+"Notice that below, the script has a script called `run`. And that script "
+"runs pytest with a set of arguments, including generating code coverage."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:239
+msgid "To run this script in your terminal, use the syntax:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:241
+msgid "`hatch run test:run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:243
+msgid "Reminder"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:246
+msgid ""
+"`hatch run`: this calls hatch and tells it that it will be running a "
+"command"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:247
+msgid ""
+"`test:run` defines the environment you want it to run (`test`) in this "
+"case, and the script is defined as `run`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:250
+msgid ""
+"If you have a matrix setup for tests, then it will both install the "
+"needed Python version using UV and run your tests in each version of the "
+"Python environment. In this case, since there are four Python versions in"
+" the environment, your tests will be run four times, once in each Python "
+"version listed in the matrix table."
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:280
+msgid "Build your documentation with Hatch environments"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:282
+msgid ""
+"Finally, you can build and serve your documentation using hatch. To build"
+" a static HTML version of the docs run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:285
+msgid "`hatch run docs:build`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:287
+msgid ""
+"To run a local server with your docs updated as you update your markdown "
+"files, run:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:289
+msgid "`hatch run docs:serve`"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:291
+msgid "To stop serving the docs use:"
+msgstr ""
+
+#: ../../tutorials/develop-python-package-hatch.md:293
+msgid "mac: ctrl + c windows:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:6
+msgid "Get to Know Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:8
+msgid ""
+"Our Python packaging tutorials use Hatch. While there are [many great "
+"packaging tools](/package-structure-code/python-package-build-tools) out "
+"there, we have selected Hatch because:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:13
+msgid ""
+"It is an end-to-end tool that supports most of the steps required to "
+"create a quality Python package. Beginners will have fewer tools to learn"
+" if they use Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:16
+#, python-brace-format
+msgid ""
+"It supports different {term}`Build backend` options if you ever need to "
+"compile code in other languages."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:18
+msgid ""
+"As a community, pyOpenSci has decided that Hatch is a user-friendly tool "
+"that supports many different scientific Python use cases."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:21
+msgid ""
+"In this tutorial, you will install and get to know Hatch a bit more "
+"before starting to use it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:24
+msgid "You need two things to successfully complete this tutorial:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:26
+msgid "You need Python installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:27
+msgid "You need Hatch installed."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:30
+msgid ""
+"If you don't already have Python installed on your computer, Hatch will "
+"do it for you when you install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:34
+msgid "Install Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:36
+msgid ""
+"To begin, follow the operating-system-specific instructions below to "
+"install Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "MAC"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:43
+msgid ""
+"Follow the instructions "
+"[here](https://hatch.pypa.io/latest/install/#installers)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:45
+msgid ""
+"Download the latest GUI installer for MAC [hatch-"
+"universal.pkg](https://github.com/pypa/hatch/releases/latest/download"
+"/hatch-universal.pkg)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:46
+msgid "Run the installer and follow the setup instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:47
+msgid "If your terminal is open, then restart it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Windows"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:53
+msgid ""
+"In your browser, download the correct `.msi` file for your system: "
+"[hatch-x64.msi](https://github.com/pypa/hatch/releases/latest/download/hatch-x64.msi)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:55
+msgid "Run your downloaded installer file and follow the on-screen instructions."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md
+msgid "Linux"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:61
+msgid ""
+"We suggest that you install Hatch using pipx on Linux. however, if you "
+"prefer another method, check out the [Hatch installation "
+"documentation](https://hatch.pypa.io/latest/install/) for other methods."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:75
+#, python-brace-format
+msgid ""
+"Hatch can also be installed directly using {term}`pip` or "
+"[conda](https://hatch.pypa.io/latest/install/#conda). We encourage you to"
+" follow the instructions above because we have found that the Hatch "
+"installers for Windows and Mac are the easiest and most efficient."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:80
+msgid ""
+"Our Linux users have found success installing Hatch with pipx if they "
+"already use apt install."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:83
+msgid ""
+"Both approaches (using a graphical installer on Windows/Mac and pipx) "
+"ensure that you have Hatch installed globally. A global install means "
+"that Hatch is available across all of your Python environments on your "
+"computer."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:88
+msgid "Check that hatch installed correctly"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:90
+msgid ""
+"Once you have completed the installation instructions above, you can open"
+" your terminal, and make sure that Hatch installed correctly using the "
+"command below:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:98
+msgid ""
+"*Note the version number output of `hatch --version` will likely be "
+"different from the output above in this tutorial.*"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:101
+msgid "Configure Hatch"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:103
+msgid ""
+"Once you have installed Hatch, you can customize its configuration. This "
+"includes setting the default name and setup for every package you create."
+" While this step is not required, we suggest that you do it."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:107
+msgid ""
+"Hatch stores your configuration in a [`config.toml` "
+"file](https://hatch.pypa.io/latest/config/project-templates/)."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:109
+msgid ""
+"While you can update the `config.toml` file through the command line, it "
+"might be easier to look at and update it in a text editor if you are "
+"using it for the first time."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:113
+msgid "Step 1: Open and Edit Your `config.toml` File"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:115
+msgid ""
+"To open the config file in your file browser, run the following command "
+"in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:118
+msgid "`hatch config explore`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:120
+msgid ""
+"This will open up a directory window that allows you to double-click on "
+"the file and open it in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:123
+msgid ""
+"You can also retrieve the location of the Hatch config file by running "
+"the following command in your shell:"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:131
+msgid "Step 2 - update your email and name"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:133
+msgid ""
+"Once the file is open, update the [template] table of the `config.toml` "
+"file with your name and email. This information will be used in any "
+"[pyproject.toml](pyproject-toml) metadata files that you create using "
+"Hatch."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:144
+msgid "Step 3"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:146
+msgid "Next, set tests to false in the `[template.plugins.default]` table."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:148
+msgid ""
+"While tests are important, setting the tests configuration in Hatch to "
+"`true` will create a more complex `pyproject.toml` file. You won't need "
+"to use this feature in this beginner friendly tutorial series but we will"
+" introduce it in later tutorials."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:153
+msgid "Your `config.toml` file should look something like the one below."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:191
+msgid ""
+"Also notice that the default license option is MIT. While we will discuss"
+" license in more detail in a later lesson, the MIT license is the "
+"recommended permissive license from "
+"[choosealicense.com](https://choosealicense.com/) and as such we will use"
+" it for this tutorial series."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:197
+msgid "You are of course welcome to select another license."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:200
+msgid ""
+"I think we'd need the SPDX license options here if they want to chose "
+"bsd-3 for instance"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:203
+msgid "Step 4: Close the config file and run `hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:205
+msgid ""
+"Once you have completed the steps above run the following command in your"
+" shell."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:207
+msgid "`hatch config show`"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:209
+msgid ""
+"`hatch config show` will print out the contents of your `config.toml` "
+"file in your shell. Look at the values and ensure that your name, email "
+"is set. Also make sure that `tests=false`."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:213
+msgid "Hatch features"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:215
+msgid ""
+"Hatch offers a suite of features that will make creating, publishing and "
+"maintaining your Python package easier."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:218
+msgid "Comparison to other tools"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:220
+msgid ""
+"[We compared Hatch to several of the other popular packaging tools in the"
+" ecosystem including flit, pdm and poetry. Learn more here](package-"
+"features)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:223
+msgid "[More on Hatch here](hatch)"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:225
+msgid "A few features that Hatch offers"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:227
+msgid ""
+"It will convert metadata stored in a `setup.py` or `setup.cfg` file to a "
+"pyproject.toml file for you (see [Migrating setup.py to pyproject.toml "
+"using Hatch](setup-py-to-pyproject-toml.md ))"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:229
+msgid ""
+"It will help you by storing configuration information for publishing to "
+"PyPI after you've entered it once."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:231
+msgid "Use `hatch -h` to see all of the available commands."
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:233
+msgid "What's next"
+msgstr ""
+
+#: ../../tutorials/get-to-know-hatch.md:235
+msgid ""
+"In the next lesson you'll learn how to package and make your code "
+"installable using Hatch."
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/setup-py-to-pyproject-toml.md:36
+msgid "Get to know Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34 ../../tutorials/run-python-scripts-hatch.md:8
+msgid "Run standalone Python scripts with Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34
+msgid "Python Packaging Tutorial Setup"
+msgstr ""
+
+#: ../../tutorials/intro.md:42 ../../tutorials/intro.md:89
+msgid "What is a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to PyPI"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Publish using GitHub Actions and Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/intro.md:42
+msgid "Create and publish a Python Package"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Develop package (Hatch environments)"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add README file"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Add a license & code of conduct"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Update metadata in pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/intro.md:53
+msgid "Project information files & metadata"
+msgstr ""
+
+#: ../../tutorials/intro.md:63
+msgid "Reference Guides"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Migrate setup.py to a pyproject.toml using Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:70
+msgid "Hatch for Existing Packages"
+msgstr ""
+
+#: ../../tutorials/intro.md:7
+msgid "Python packaging 101"
+msgstr ""
+
+#: ../../tutorials/intro.md:9
+msgid "_A start to finish beginner-friendly tutorial_"
+msgstr ""
+
+#: ../../tutorials/intro.md:11
+#, python-brace-format
+msgid ""
+"Welcome to the pyOpenSci Python packaging tutorial series. The lessons on"
+" the upcoming pages walk you through the core steps needed to create a "
+"{term}`Python package`."
+msgstr ""
+
+#: ../../tutorials/intro.md:17
+msgid ""
+"Diagram showing the lessons in our packaging tutorial. There are 6 total "
+"- what is a Python package, make code pip installable, publish your "
+"package to PyPI, add a README and LICENSE file, add metadata for PyPI and"
+" finally publish to conda forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:19 ../../tutorials/trusted-publishing.md:258
+msgid ""
+"This lesson is the first in a series of lessons to help you get started "
+"with Python packaging."
+msgstr ""
+
+#: ../../tutorials/intro.md:22
+msgid "Who are these tutorials for?"
+msgstr ""
+
+#: ../../tutorials/intro.md:24
+msgid ""
+"The content in this tutorial series is beginner friendly and assumes that"
+" you have not created a Python package before. However, the content will "
+"still be valuable if you are interested in better understanding the steps"
+" involved in creating a Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:29
+msgid ""
+"In this series you will learn about the core elements that you need to "
+"publish your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/intro.md:32
+msgid ""
+"In the second series, you will learn about infrastructure and "
+"documentation needed to support package maintenance."
+msgstr ""
+
+#: ../../tutorials/intro.md:77 ../../tutorials/publish-conda-forge.md:22
+#: ../../tutorials/publish-pypi.md:20 ../../tutorials/pyproject-toml.md:27
+#: ../../tutorials/setup-py-to-pyproject-toml.md:20
+#: ../../tutorials/trusted-publishing.md:13
+msgid "Learning Objectives"
+msgstr ""
+
+#: ../../tutorials/intro.md:79
+msgid ""
+"This lesson introduces you to the basic components of a Python package. "
+"After reading this lesson you will:"
+msgstr ""
+
+#: ../../tutorials/intro.md:82
+msgid "Understand what a Python package is"
+msgstr ""
+
+#: ../../tutorials/intro.md:83
+msgid "Be able to list the 5 core components of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:84
+msgid ""
+"Be able to explain the difference between generalizable code and code "
+"that supports a specific scientific application"
+msgstr ""
+
+#: ../../tutorials/intro.md:91
+msgid ""
+"At a high level, you can think about a Python package as a toolbox that "
+"you can use to perform various tasks."
+msgstr ""
+
+#: ../../tutorials/intro.md:94
+#, python-brace-format
+msgid ""
+"A Python package is basically a directory with a specific file structure."
+" Within the package directory structure, there are {term}`Module` objects"
+" which are files that end in `.py` (the same extension you'd see in a "
+"Python script). These modules allow you to group and structure your "
+"Python code. Each module contains functions and classes, that you can "
+"think about as the tools in your toolbox."
+msgstr ""
+
+#: ../../tutorials/intro.md:103
+msgid ""
+"Diagram showing a sketch of a toolbox filled with different tools "
+"including a hammer and a saw."
+msgstr ""
+
+#: ../../tutorials/intro.md:105
+msgid ""
+"You can think about a package as a toolbox filled with coding tools. A "
+"tool may be a function or a class. Each tool does a specific thing well."
+msgstr ""
+
+#: ../../tutorials/intro.md:110
+msgid "Python packages are installable"
+msgstr ""
+
+#: ../../tutorials/intro.md:112
+msgid ""
+"A package is installable, which means that you can add the functionality "
+"within the package's code to any Python environment and import that "
+"functionality like you would import core scientific Python packages such "
+"as NumPy or Matplotlib."
+msgstr ""
+
+#: ../../tutorials/intro.md:121
+msgid ""
+"Installing a package into an environment makes it easier to manage and "
+"reuse your code across different projects. Structuring your code as a "
+"package is the first step you need to take so you can share the tools in "
+"the toolbox you've created and let others build with it."
+msgstr ""
+
+#: ../../tutorials/intro.md:126
+msgid "Why create a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:128
+msgid "You might create a Python package because you want to:"
+msgstr ""
+
+#: ../../tutorials/intro.md:130
+msgid ""
+"**Use your code across different projects:** At its most basic level, "
+"creating a package allows you to install your code into a Python "
+"environment. This allows you to then import functions and classes into "
+"any workflows both locally and in the cloud."
+msgstr ""
+
+#: ../../tutorials/intro.md:131
+#, python-brace-format
+msgid ""
+"**Share your code:** If you publish a package on a public repository such"
+" as PyPI or conda-forge, your package can be installed on any machine "
+"using {term}`pip` or conda with a single command."
+msgstr ""
+
+#: ../../tutorials/intro.md:134
+msgid ""
+"**Build community around your code:** Packages make it easier for "
+"multiple people to work on the same project (particularly when published "
+"on GitHub). A version control system such as git (the system used by "
+"GitHub), further makes it easier to track changes to the codebase over "
+"time. Tools such as issues and pull requests make it easier for outside "
+"users to contribute bug fixes and to establish review processes for "
+"accepting changes to the code base."
+msgstr ""
+
+#: ../../tutorials/intro.md:135
+msgid ""
+"**Organize your code:** Packages can be used to organize large code "
+"projects, dividing them into smaller, more manageable components. This "
+"structure can help with both maintaining the codebase and with making it "
+"easier to understand."
+msgstr ""
+
+#: ../../tutorials/intro.md:137
+msgid "What to consider before you create a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:139
+msgid ""
+"Creating a Python package that others use takes considerable time and "
+"effort. Before you begin, think about your goals including:"
+msgstr ""
+
+#: ../../tutorials/intro.md:142
+msgid "Who you think will use your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:143
+msgid "How people might use your package and on what data (if data are relevant)"
+msgstr ""
+
+#: ../../tutorials/intro.md:144
+msgid "Whether you have time to add things such as documentation and tests"
+msgstr ""
+
+#: ../../tutorials/intro.md:145
+msgid ""
+"How long you might be able to maintain it: remember that once people "
+"begin using your package they will depend on your maintainer team to "
+"update it, fix bugs and answer questions."
+msgstr ""
+
+#: ../../tutorials/intro.md:147
+msgid ""
+"Before creating a user-facing package, it's important to consider all of "
+"the above."
+msgstr ""
+
+#: ../../tutorials/intro.md:149
+msgid "The elements of a Python package"
+msgstr ""
+
+#: ../../tutorials/intro.md:153 ../../tutorials/intro.md:231
+msgid "Diagram showing .. more here if this stays."
+msgstr ""
+
+#: ../../tutorials/intro.md:155
+msgid ""
+"The elements of a Python package include code, documentation, tests, an "
+"OSI-approved license and infrastructure. Maintainers are at the core "
+"making sure everything works and is up to date while fixing bugs and "
+"addressing user concerns."
+msgstr ""
+
+#: ../../tutorials/intro.md:161
+msgid "The core elements of Python package include:"
+msgstr ""
+
+#: ../../tutorials/intro.md:163
+msgid ""
+"**Code:** Functions and classes that provide functionality for a user of "
+"your package"
+msgstr ""
+
+#: ../../tutorials/intro.md:164
+msgid ""
+"**Documentation:** Installation instructions, tutorials, and examples "
+"that both help users get started using your package and contributors and "
+"maintainers fix bugs and maintain the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:165
+msgid ""
+"Contributor Documentation in the form of a **CONTRIBUTING.md** file is "
+"useful to help people to contribute to your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:166
+msgid ""
+"Development Documentation helps both maintainers and contributors "
+"understand how to maintain a package's infrastructure."
+msgstr ""
+
+#: ../../tutorials/intro.md:167
+msgid ""
+"**Tests:** that make sure your code works as it should and makes it "
+"easier for you and others to contribute to, modify and update the code in"
+" the future"
+msgstr ""
+
+#: ../../tutorials/intro.md:168
+msgid ""
+"**License:** An open source license, or license that is [OSI "
+"approved](https://opensource.org/license/), refers to an license that "
+"allows others to use your package. It also provides legal direction "
+"regarding how elements of the package can and can't be reused."
+msgstr ""
+
+#: ../../tutorials/intro.md:169
+msgid ""
+"**Infrastructure** that automates updates, publication workflows and runs"
+" test suites. Infrastructure includes a suite of things such as platforms"
+" like GitHub and GitLab, tools to run tests and tools locally such as nox"
+" and tox and continuous integration that automates package maintenance "
+"steps."
+msgstr ""
+
+#: ../../tutorials/intro.md:171
+msgid "What pyOpenSci looks for in a package"
+msgstr ""
+
+#: ../../tutorials/intro.md:174
+msgid ""
+"pyOpenSci performs an [initial set of editor "
+"checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-"
+"chief-guide.html#editor-checklist-template) for any package submitted to "
+"us for peer review. You may find these checks useful as you create your "
+"package as a baseline for things that you package should have."
+msgstr ""
+
+#: ../../tutorials/intro.md:180
+msgid "Packages are more than just code - Infrastructure"
+msgstr ""
+
+#: ../../tutorials/intro.md:182
+msgid ""
+"A package in any language is more than just code. If you expect other "
+"people to use your package, besides yourself, you should consider not "
+"only writing high quality code, but also the various elements of a "
+"package that make it a useful community resource."
+msgstr ""
+
+#: ../../tutorials/intro.md:187
+msgid "Version control and storing your package on GitHub or GitLab"
+msgstr ""
+
+#: ../../tutorials/intro.md:189
+msgid ""
+"Most Python packages live in an online version control platform such as "
+"GitHub or GitLab. GitHub and GitLab both run [git](https://git-scm.com/) "
+"for version control. Having your software under version control is "
+"important because it allows you to both track changes over time while "
+"also going back in history and undoing changes in the case that a change "
+"to the code base unexpectedly breaks something."
+msgstr ""
+
+#: ../../tutorials/intro.md:194
+msgid ""
+"By publishing your package on GitHub or GitLab, you are making your code "
+"public facing. This means that others can both see your code and also "
+"make contributions using a pull request (GitHub) / merge request (GitLab)"
+" / code review workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:196
+msgid "GitHub & GitLab vs. Git"
+msgstr ""
+
+#: ../../tutorials/intro.md:199
+msgid ""
+"GitHub and GitLab are online (cloud) platforms that run `git` (version "
+"control software) on the backend. Running git locally on your computer "
+"allows you to upload (`git push`) and download (`git pull`) files to "
+"GitHub and GitLab."
+msgstr ""
+
+#: ../../tutorials/intro.md:204
+msgid "Issues or Ticket Trackers"
+msgstr ""
+
+#: ../../tutorials/intro.md:206
+msgid ""
+"GitHub and GitLab also both offer community features such as issues that "
+"allow:"
+msgstr ""
+
+#: ../../tutorials/intro.md:208
+msgid "you to communicate with your maintainers and contributor community"
+msgstr ""
+
+#: ../../tutorials/intro.md:209
+msgid "users to report bugs, ask questions and request new features"
+msgstr ""
+
+#: ../../tutorials/intro.md:210
+msgid ""
+"you to publicly keep track of enhancements and features you want to work "
+"on for your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:212
+msgid "Continuous integration and continuous deployment"
+msgstr ""
+
+#: ../../tutorials/intro.md:214
+msgid ""
+"GitHub and GitLab also provide continuous integration and continuous "
+"deployment (CI/CD). Continuous integration (CI) refers to a platform that"
+" automatically runs a specific job when a certain event occurs, whereas "
+"continuous deployment (CD) is an extension of CI that refers to not only "
+"running or building but also to publishing the final outputs somewhere."
+msgstr ""
+
+#: ../../tutorials/intro.md:216
+msgid "**An example of Continuous integration:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:218
+msgid ""
+"When someone submits a change to your code, your tests will run across "
+"different operating systems and the code will be checked for format "
+"issues."
+msgstr ""
+
+#: ../../tutorials/intro.md:220
+msgid "**An example of Continuous deployment:**"
+msgstr ""
+
+#: ../../tutorials/intro.md:222
+msgid ""
+"When you are ready to release your package to PyPI, a continuous "
+"deployment operation might be triggered on release to publish your "
+"package to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:224
+msgid ""
+"Integrated CI/CD will help you maintain your software, ensuring that "
+"changes to the code don't break things unexpectedly. They can also help "
+"you maintain code style and format consistency for every new change to "
+"your code."
+msgstr ""
+
+#: ../../tutorials/intro.md:233
+msgid "The lifecycle of a scientific Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:236
+msgid "When should you turn your code into a Python package?"
+msgstr ""
+
+#: ../../tutorials/intro.md:238
+msgid ""
+"You may be wondering, what types of code should become a Python package "
+"that is both on GitHub and published to PyPI and/or conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:240
+msgid "There are a few use cases to consider:"
+msgstr ""
+
+#: ../../tutorials/intro.md:242
+msgid ""
+"**Creating a basic package for yourself:** Sometimes you want create a "
+"package for your own personal use. This might mean making your code "
+"locally pip installable and you may also want to publish it to GitHub. In"
+" that case you don't expect others to use your code, and as such you may "
+"only have documentation for you and your future self if you need to "
+"update the package."
+msgstr ""
+
+#: ../../tutorials/intro.md:244
+msgid ""
+"An example of this type of package might be a set of functions that you "
+"write that are useful across several of your projects. It could be useful"
+" to have those functions available to all of your projects."
+msgstr ""
+
+#: ../../tutorials/intro.md:247
+msgid "LINK to pip installable lesson when it's published - it's in review now"
+msgstr ""
+
+#: ../../tutorials/intro.md:250
+msgid ""
+"**Creating a package for the community:** In other cases, you may create "
+"some code that you soon realize might also be useful to not just you, but"
+" to other people as well. In that case, you might consider both creating "
+"the package, publishing it on GitHub, and because other users may be "
+"using it, you may make use of GitHub's infrastructure including CI/CD "
+"pipelines and issue trackers. Because you want other people to use your "
+"package, you will want to also include LICENSE information, documentation"
+" for users and contributors and tests. This type of package is most often"
+" published to PyPI."
+msgstr ""
+
+#: ../../tutorials/intro.md:253
+msgid ""
+"For example, all of the [pyOpenSci packages](https://www.pyopensci.org"
+"/python-packages.html) are public facing with an intended audience beyond"
+" just the maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:255
+msgid "Packages that you expect others to use should be well-scoped"
+msgstr ""
+
+#: ../../tutorials/intro.md:257
+msgid ""
+"Ideally the code in your Python package is focused on a specific theme or"
+" use case. This theme is important as it's a way to scope the content of "
+"your package."
+msgstr ""
+
+#: ../../tutorials/intro.md:259
+msgid ""
+"It can be tricky to decide when your code becomes something that might be"
+" more broadly useful to others. But one question you can ask yourself is "
+"- is your code written specifically for a single research project? Or "
+"could it have a broader application across multiple projects in your "
+"domain?"
+msgstr ""
+
+#: ../../tutorials/intro.md:261
+msgid "How does this relate to code for a research project?"
+msgstr ""
+
+#: ../../tutorials/intro.md:264
+msgid ""
+"A [Research Compendium](https://book.the-turing-way.org/reproducible-"
+"research/compendia.html) is an organized set of code, data and "
+"documentation that supports a specific research project. It aims to "
+"enhance the reproducibility and transparency of research by providing a "
+"comprehensive record of the methods, data, and analyses used in a study."
+msgstr ""
+
+#: ../../tutorials/intro.md:269
+msgid ""
+"A Python package is a collection of modules that can be used to perform a"
+" specific set of tasks. These tasks should be applicable to numerous "
+"workflows. As such a Python package is more generalizable than a Research"
+" Compendium which supports a specific project."
+msgstr ""
+
+#: ../../tutorials/intro.md:274
+msgid ""
+"[Read about `Good enough practices in scientific "
+"computing`](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510)"
+msgstr ""
+
+#: ../../tutorials/intro.md:275
+msgid ""
+"[Learn more about research compendia (also called repo-packs) in this "
+"blog post.](https://lorenabarba.com/blog/how-repro-packs-can-save-your-"
+"future-self/)"
+msgstr ""
+
+#: ../../tutorials/intro.md:278
+msgid "Below are a few examples well scoped pyOpenSci packages:"
+msgstr ""
+
+#: ../../tutorials/intro.md:280
+msgid ""
+"[Crowsetta](https://crowsetta.readthedocs.io/en/latest/): is a package "
+"designed to work with annotating animal vocalizations and bioacoustics "
+"data. This package helps scientists process different types of "
+"bioacoustic data rather than focusing on a specific individual research "
+"application associated with a user-specific research workflow."
+msgstr ""
+
+#: ../../tutorials/intro.md:281
+msgid ""
+"[Pandera](https://www.union.ai/pandera) is another more broadly used "
+"Python package. Pandera supports data testing and thus also has a broader"
+" research application."
+msgstr ""
+
+#: ../../tutorials/intro.md:283
+msgid "Matplotlib as an example"
+msgstr ""
+
+#: ../../tutorials/intro.md:285
+msgid ""
+"At the larger end of the user spectrum, Matplotlib is a great example. "
+"Matplotlib does one thing really well:"
+msgstr ""
+
+#: ../../tutorials/intro.md:288
+msgid "_It creates visual plots of data._"
+msgstr ""
+
+#: ../../tutorials/intro.md:290
+msgid ""
+"Thousands of people use Matplotlib for different plotting applications "
+"using different types of data. While few scientific packages will have "
+"the same broad application and large user base that Matplotlib has, the "
+"idea of scoping out what your package does is still important."
+msgstr ""
+
+#: ../../tutorials/intro.md:296
+msgid "Code should also be clean & readable & documented"
+msgstr ""
+
+#: ../../tutorials/intro.md:298
+msgid ""
+"The code in your package should also be clean, readable, and well "
+"documented."
+msgstr ""
+
+#: ../../tutorials/intro.md:300
+msgid ""
+"**Clean code:** Clean code refers to code that uses expressive variable "
+"names, is concise and doesn't repeat itself. You can learn about best "
+"practices for clean code in future pyOpenSci tutorials."
+msgstr ""
+
+#: ../../tutorials/intro.md:304
+msgid ""
+"**Readable code:** readable code is code written with a consistent style."
+" You can use linters and code formatters such as black and flake8 to "
+"ensure this consistency throughout your entire package. [Learn more about"
+" code formatters here.](../package-structure-code/code-style-linting-"
+"format)"
+msgstr ""
+
+#: ../../tutorials/intro.md:308
+msgid ""
+"**Documented code:** documented code is written using docstrings that "
+"help a user understand both what the functions and methods in your code "
+"do and also what the input and output elements of each function are. [You"
+" can learn more about docstrings in our guide, here.](../documentation"
+"/write-user-documentation/document-your-code-api-docstrings)"
+msgstr ""
+
+#: ../../tutorials/intro.md:312
+msgid "Making your package installable - publishing to PyPI & conda-forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:314
+msgid "Python packages and environments"
+msgstr ""
+
+#: ../../tutorials/intro.md:316
+msgid ""
+"You can install a Python package into a Python environment in the same "
+"way you might install NumPy or Pandas. Installing your package into an "
+"environment allows you to access it from any code run with that specific "
+"Python environment activated."
+msgstr ""
+
+#: ../../tutorials/intro.md:322
+msgid ""
+"Diagram showing the steps associated with creating a package and then "
+"installing it. The first arrow says your package and the second says pip "
+"install package. The second arrow leads to a box that represents a Python"
+" environment that already has some packages installed such as Pandas and "
+"NumPy. Your package will also get installed into that same environment "
+"when you pip install it."
+msgstr ""
+
+#: ../../tutorials/intro.md:324
+msgid ""
+"You don't have to publish to PyPI to make your code installable. With the"
+" correct file structure and project metadata you can make your code "
+"installable locally on your computer and use it for projects that you are"
+" working on without having to ever publish to PyPI. Publishing to PyPI is"
+" useful when you want to make your code public-facing and share it with "
+"others."
+msgstr ""
+
+#: ../../tutorials/intro.md:331
+msgid "Publishing a package to PyPI / Conda-Forge"
+msgstr ""
+
+#: ../../tutorials/intro.md:333
+msgid ""
+"If you want to make your package directly installable without having to "
+"download the code to your computer locally then you need to publish it in"
+" a repository such as **PyPI** or **conda-forge**."
+msgstr ""
+
+#: ../../tutorials/intro.md:337
+msgid ""
+"Learn [how to publish your package to PyPI in this tutorial.](publish-"
+"pypi.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:339
+msgid ""
+"Then you can create a conda-forge recipe using the "
+"[Grayskull](https://github.com/conda/grayskull) tool. You can then submit"
+" this recipe to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:341
+msgid ""
+"[You will learn more about the conda-forge publication process here"
+".](publish-conda-forge.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:344
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. Documentation and data are below that box because they aren't "
+"normally published in your packaging wheel distribution. An arrow to the "
+"right takes you to a build distribution files box. That box leads you to "
+"either publishing to TestPyPI or the real PyPI. From PyPI you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/intro.md:346
+msgid ""
+"In the image above, you can see the steps associated with publishing your"
+" package on PyPI and conda-forge. PyPI supports [sdist](#python-source-"
+"distribution) and [wheel](#python-wheel) files. Once you are ready to "
+"make your code publicly installable, you can publish it on PyPI. Once "
+"your code is on PyPI it is straight forward to then publish to conda-"
+"forge. You create a recipe using the Grayskull package and then you open "
+"a pr in the conda-forge recipe repository. You will learn more about this"
+" process in the [conda-forge lesson](/tutorials/publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/intro.md:350
+msgid "Yay, your package has users! Now what?"
+msgstr ""
+
+#: ../../tutorials/intro.md:352
+msgid ""
+"As the community using your package grows, you may also find yourself "
+"managing users, contributors, and others who want to interact with your "
+"package. It’s important to consider all this before you dive into "
+"development. Once you have a user base in the community, people will "
+"depend upon your code to work and will need direction regarding how to "
+"use it."
+msgstr ""
+
+#: ../../tutorials/intro.md:354
+msgid "To support your community, you'll want to add things like:"
+msgstr ""
+
+#: ../../tutorials/intro.md:356
+msgid ""
+"[a development guide that documents your maintainer workflow process "
+"](/documentation/repository-files/development-guide.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:357
+msgid ""
+"[a code of conduct to defines community interaction standards and "
+"expectations](/documentation/repository-files/code-of-conduct-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:358
+msgid ""
+"[a contributing guide that helps users understand expectations associated"
+" with making contributions to your project](/documentation/repository-"
+"files/contributing-file.md)"
+msgstr ""
+
+#: ../../tutorials/intro.md:360
+msgid "Support for contributors and maintainers"
+msgstr ""
+
+#: ../../tutorials/intro.md:362
+msgid ""
+"If you intend for others to use and contribute to your code, consider who"
+" will maintain it over time. You will want a **contributing and "
+"development** guide to help new potential contributors get started with "
+"contributing to your package, as well as a **code of conduct** to ensure "
+"community interactions remain healthy both for you and your contributors "
+"and maintainer team."
+msgstr ""
+
+#: ../../tutorials/intro.md:364
+msgid ""
+"The elements above are also important for future maintenance of your "
+"package. In the case that you are no long able to maintain it or simply "
+"want extra help, development, and contributing documentation will help "
+"you onboard new maintainers."
+msgstr ""
+
+#: ../../tutorials/intro.md:369
+msgid "What's next?"
+msgstr ""
+
+#: ../../tutorials/intro.md:371
+msgid ""
+"In future lessons you will learn more about the infrastructure around a "
+"published Python package that makes it both easier to maintain, easier "
+"for others to contribute to and easier for other scientists to use. "
+"However, first we want to get you to your initial goal of publishing a "
+"Python package."
+msgstr ""
+
+#: ../../tutorials/intro.md:373
+msgid ""
+"In this next lesson you will learn how to create a basic installable "
+"Python package. Make your code pip installable "
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:6
+msgid "Publish your Python package that is on PyPI to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:8
+msgid "In the previous lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:10
+msgid ""
+"How to [create the most basic version of a Python package](create-python-"
+"package.md). This entailed making your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:11
+msgid "[How to publish your Python package to PyPI](publish-pypi)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:12
+msgid "How to add a `README` and `LICENSE` file to your package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:13
+msgid ""
+"How to setup your [pyproject.toml](pyproject-toml) file with all of the "
+"metadata that PyPI requires and also metadata that will be helpful for "
+"users to find your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:17
+msgid ""
+"If you have gone through all of the above lessons, you are now ready to "
+"publish your package on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:20
+msgid ""
+"**IMPORTANT:** Please do not practice publishing your package to conda-"
+"forge. You should only publish to conda-forge when you have a package on "
+"pypi.org that you plan to maintain."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:26 ../../tutorials/publish-pypi.md:24
+msgid "In this lesson you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:28
+msgid "Create a conda-forge yaml recipe for your package using Grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:29
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:30
+msgid ""
+"Maintain your conda-forge package by creating new releases for your "
+"package on PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:33
+#, python-brace-format
+msgid ""
+"Once your package is on PyPI you can then easily publish it to conda-"
+"forge using the [grayskull](https://conda.github.io/grayskull/) tool. You"
+" do not need to build the package specifically for conda, conda-forge "
+"will build from your PyPI {term}`Source distribution (sdist)` file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:41
+msgid ""
+"Image showing the progression of creating a Python package, building it "
+"and then publishing to PyPI and conda-forge. You take your code and turn "
+"it into distribution files (sdist and wheel) that PyPI accepts. Then "
+"there is an arrow towards the PyPI repository where ou publish both "
+"distributions. From PyPI if you create a conda-forge recipe you can then "
+"publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:43
+#, python-brace-format
+msgid ""
+"Once you have published both package distributions (the {term}`Source "
+"distribution (sdist)` and the {term}`Wheel (.whl)`) to PyPI, you can then"
+" publish to conda-forge. Conda-forge requires a source distribution on "
+"PyPI in order to build your package on conda-forge. You do not need to "
+"rebuild your package to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:50
+msgid "What is conda-forge?"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:52
+msgid ""
+"conda is an open source package and environment management tool that can "
+"be used to install tools from the different channels on Anaconda.org."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:55
+msgid ""
+"You can think about a channel as a specific location where a group of "
+"packages are stored and can be installed from using a command such as "
+"`conda install packagename`. In the case of conda channels, some of these"
+" channels such as the `defaults` channel, is managed by Anaconda (the "
+"company). Only Anaconda can decide what packages are available in the "
+"`defaults` channel. However, the conda-forge (and bioconda) channel are "
+"community-managed channels. Anyone can submit a package to these channels"
+" however they must pass a technical review in the [staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes) to be "
+"published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:58
+msgid "[Learn more about conda channels here.](#about-conda)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:62
+msgid ""
+"Graphic with the title Python package repositories. Below it says "
+"anything hosted on PyPI can be installed using pip install. Packaging "
+"hosted on a conda channel can be installed using conda install. Below "
+"that there are two rows. The top row says conda channels. Next to it are "
+"three boxes one with conda-forge, community maintained; bioconda and then"
+" default - managed by the Anaconda team. Below that there is a row that "
+"says PyPI servers. PyPI - anyone can publish to PyPI and test PyPI (a "
+"testbed server for you to practice)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:64
+msgid ""
+"Conda channels represent various repositories that you can install "
+"packages from. Because conda-forge is community maintained, anyone can "
+"submit a recipe there. PyPI is also a community maintained repository. "
+"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
+"there are no manual checks of packages submitted to PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:67
+msgid "Why publish to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:69
+msgid ""
+"There are many users, especially in the scientific Python ecosystem that "
+"use conda as their primary package manager / environment tool. Thus, "
+"having packages available to these users on the conda-forge channel is "
+"useful. In some cases packages on conda-forge can minimize dependency "
+"conflicts that can occur when mixing installations using pip and conda. "
+"This is particularly important for the spatial ecosystem."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:71
+msgid "How publishing to conda-forge works"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:73
+msgid ""
+"Once you have built and published your package to PyPI, you have "
+"everything that you need to publish to conda-forge. There is no "
+"additional build step needed to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:75
+msgid ""
+"Conda-forge will build your package from the source distribution which "
+"you [published to PyPI in the previous lesson](publish-pypi) using the "
+"recipe that you will create below."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:77
+msgid "Conda-forge publication steps"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:80
+msgid ""
+"Image showing the steps associated with publishing to conda-forge. Check "
+"out the caption below for a detailed description."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:82
+msgid ""
+"The steps for publishing to conda-forge begin with publishing your Python"
+" package to PyPI. Once you have published to PyPI you can then create a "
+"yaml file recipe that can be submitted to the conda-forge staged recipes "
+"repository for review. Once that recipe is accepted, your package will "
+"get it's on repository (known as a feedstock) on conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:85
+msgid "The steps to publish to conda-forge are:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:87
+msgid "Publish your Python package distribution files (sdist & wheel) to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:88
+msgid ""
+"Create a conda-forge recipe, which is a yaml file with instructions on "
+"how to build your package on conda-forge, using the grayskull[^grayskull]"
+" package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:89
+msgid ""
+"Submit the recipe (yaml file) to the conda-forge staged recipes "
+"repository as a pull request for review. [Click here for an example "
+"submission from pyOpenSci.](https://github.com/conda-forge/staged-"
+"recipes/pull/25173)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:91
+msgid ""
+"Once someone from the conda-forge team reviews your pull request, you may"
+" need to make some changes. Eventually the pull request will be approved "
+"and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:93
+msgid ""
+"Once your recipe is accepted and merged on conda-forge, users can install"
+" your package using:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:95
+msgid "`conda install -c conda-forge your-package`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:97
+msgid ""
+"You only create the recipe once. Once the recipe is accepted and merged, "
+"you only need to maintain the repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:99
+msgid "Maintaining a conda-forge package"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:101
+msgid ""
+"Once your package is on conda-forge, the repository will track release "
+"activity on the package's PyPI repository. Any time you make a new PyPI "
+"release with a new source distribution, conda-forge will build and update"
+" your conda-forge repository (also known as a feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:103
+msgid ""
+"When the update is processed, the friendly conda-forge bot will create a "
+"new pull request with an updated distribution recipe in your feedstock."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:105
+msgid ""
+"You can review that pull request and then merge it once all of the "
+"continuous integration tests pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:107
+msgid ""
+" How to Publish your package"
+" on conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:109
+msgid ""
+"It's time to add your package to the conda-forge channel. Remember that "
+"your package needs to be on PyPI before the steps below will work. And "
+"also remember that the team managing conda-forge are all volunteers."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:112
+msgid ""
+"Be sure that your package is on PyPI.org (not test.pypi.org) before you "
+"attempt to publish to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:115
+msgid ""
+"Only submit your package to conda-forge if you intend to maintain it over"
+" time."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:118
+msgid ""
+"Note - this is a tutorial aimed to help you get your package onto conda-"
+"forge. The official conda documentation for this processed [is "
+"here](https://conda-forge.org/docs/maintainer/adding_pkgs.html)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:120
+msgid "Step 1: Install grayskull"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:122
+msgid ""
+"First, [install "
+"grayskull](https://conda.github.io/grayskull/user_guide.html). You can "
+"install it using either pip:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:128
+msgid "or conda"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:134
+msgid ""
+"To run this command, use the same shell / terminal that you have been "
+"using to run hatch commands in the previous tutorials."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:139
+msgid ""
+"You can also install grayskull using pipx[^pipx]. pipx is a tool that "
+"allows you to install commonly used tools that you might want to have "
+"available across multiple Python environments rather than installing the "
+"package into every Python environment that you create."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:142
+msgid "Step 2: Fork and clone the conda-forge staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:144
+msgid ""
+"Next, open your shell and `cd` to a location where you want to clone the "
+"**conda-forge/staged-recipes** repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:145
+msgid ""
+"fork and clone the [conda-forge/staged-recipes GitHub "
+"repository](https://github.com/conda-forge/staged-recipes)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:146
+msgid ""
+"Create a new branch in your fork rather than submitting from the main "
+"branch of your fork. We suggest naming the branch your package's name."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:148
+msgid "`git checkout -b your-package-name `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:150
+msgid "In bash, `cd` into the `staged-recipes/recipes` folder"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:158
+msgid ""
+"Next, create a new branch in your `conda-forge/staged-recipes` cloned "
+"repository. You might want to make that branch the same name as your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:169
+msgid "Step 3: Create your conda-forge recipe"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:171
+msgid "Next, navigate to the recipes directory"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:173
+msgid ""
+"If you run `ls` here, you will notice there is an example directory with "
+"an example recipe for you to look at."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:185
+msgid "Next, run `grayskull pypi your-package-name` to generate a recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:229
+msgid ""
+"Grayskull will pull metadata about your package from PyPI. It does not "
+"use your local installation of the package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:230
+msgid ""
+"An internet connection is needed to run the `grayskull pypi your-package-"
+"name` step."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:233
+msgid ""
+"When you run grayskull, it will grab the latest distribution of your "
+"package from PyPI and will use that to create a new recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:235
+msgid ""
+"The recipe will be saved in a directory named after your package's name, "
+"wherever you run the command."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:237
+msgid "`recipes/packagename/meta.yaml`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:239
+msgid ""
+"At the very bottom of the grayskull output, it will also tell you where "
+"it saved the recipe file."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:242
+msgid ""
+"Open the meta.yaml file. The finished `meta.yaml` file that grayskull "
+"creates should look like the example below:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:289
+msgid "Step 3b: Bug fix - add a home url to the about: section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:291
+msgid ""
+"There is currently a small bug in Grayskull where it doesn't populate the"
+" home: element of the recipe. If you don't include this, [you will "
+"receive an error message](https://github.com/conda-forge/staged-"
+"recipes/pull/25173#issuecomment-1917916528) from the friendly conda-forge"
+" linter bot."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:305
+msgid "to fix this, open your meta.yaml file in your favorite text editor."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:306
+msgid "and add a home: element to the about section"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:308
+msgid "The about section will look like this after you create your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:318
+msgid ""
+"Below you add a home: element. If you have a project home page / website "
+"you can use that url. Otherwise, you can also use your PyPI landing page."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:329
+msgid "Step 4: tests for conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:331
+msgid ""
+"Next, have a look at the tests section in your **meta.yaml** file. At a "
+"minimum you should import your package or the main modules associated "
+"with your package and run `pip check`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:333
+msgid ""
+"`pip check` will ensure that your package installs properly with all of "
+"the proper dependencies."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:345
+msgid ""
+"If you have more advanced tests that you wish to run, you can add them "
+"here. However, you can also simply leave the tests section as it is."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:347
+msgid "Step 4: Submit a pull request to the staged-recipes repository"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:349
+msgid ""
+"Once you have completed all of the above, you are ready to open up a pull"
+" request in the `conda-forge/staged-recipes repository`."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:351
+msgid ""
+"Submit a pull request from your fork/branch of the staged-recipes "
+"repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:352
+msgid ""
+"Remember that the conda-forge maintainers are volunteers. Be patient for "
+"someone to respond and supportive in your communication with them."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md
+msgid "Conda-forge checklist help"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:358
+msgid "Conda-forge Staged-recipes Pull Request Checklist"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:360
+msgid ""
+"When you submit your package to conda-forge, the pull request template "
+"includes a list of checks that you want to ensure you have covered."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:362
+msgid "Below we break down each element of that list."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:364
+msgid "Pull request template checklist tips"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:367
+msgid ""
+"-[x] Title of this PR is meaningful: e.g. \"Adding my_nifty_package\", "
+"not \"updated meta.yaml\"."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:369
+msgid ""
+"**Translation:** Make sure that your pull request title is specific. We "
+"suggest something like: `Add recipe for `"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:372
+msgid ""
+"-[x] License file is packaged (see [here](https://github.com/conda-forge"
+"/staged-"
+"recipes/blob/5eddbd7fc9d1502169089da06c3688d9759be978/recipes/example/meta.yaml#L64-L73)"
+" for an example)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:374
+msgid ""
+"**Translation:** You should have a LICENSE file included in your "
+"package's source distribution. If you have followed the pyOpenSci "
+"tutorials then you already have a LICENSE file and are likely using the "
+"MIT license. When you run `hatch build`, it will bundle that file into "
+"the output [source distribution file (which is the tar.gz file)](python-"
+"source-distribution) that conda-forge will use to build your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:376
+msgid "[x] Source is from official source."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:378
+msgid ""
+"**Translation:** If your package is on PyPI as you learned in the "
+"[previous lesson on publishing your Python package](publish-pypi) then "
+"you are in good shape. conda-forge prefers that your distribution is "
+"published to a known repository."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:380
+msgid ""
+"-[x] Package does not vendor other packages. (If a package uses the "
+"source of another package, they should be separate packages or the "
+"licenses of all packages need to be packaged)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:382
+msgid ""
+"**Translation:** If the code base in your package is your own and it all "
+"shares the same LICENSE then you are in good shape. If you have code "
+"taken from other packages then you may need to declare that and include "
+"licenses for that code if it is different. If you followed these "
+"tutorials then you do not have any vendored code."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:384
+msgid ""
+"-[x] If static libraries are linked in, the license of the static library"
+" is packaged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:386
+msgid ""
+"-[x] Package does not ship static libraries. If static libraries are "
+"needed, [follow CFEP-18](https://github.com/conda-"
+"forge/cfep/blob/main/cfep-18.md)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:388
+msgid ""
+"**Translation:** A static library refers to a copy of a package built "
+"into your package. If your package is a pure Python package, then you can"
+" check that your package does not ship static libraries as this does not "
+"apply to you."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:390
+msgid ""
+"The pyOpenSci tutorials are all pure Python and as such do not use static"
+" libraries in a linked or shipped (included in the package distribution) "
+"format."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:392
+msgid ""
+"If your package has a more complex build that includes links to "
+"extensions written in other languages such as C++, then be sure to "
+"include the proper licenses for those extensions in your metadata."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:397
+msgid ""
+"If you want to learn more about static libraries, then [this "
+"overview](https://pypackaging-"
+"native.github.io/background/compilation_concepts/#shared-vs-static-"
+"libraries) might help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:400
+msgid "-[ ] Build number is 0."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:402
+msgid ""
+"**Translation:** The build number in your recipe is right below the "
+"source location of your package's source distribution. `number: 0` is "
+"what you should see in that section of your recipe."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:415
+msgid ""
+"[x] A tarball (`url`) rather than a repo (e.g. `git_url`) is used in your"
+" recipe (see [here](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html) for more details)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:417
+msgid ""
+"**Translation:** Here conda wants you to provide a link to the source "
+"distribution on PyPI rather than a link to your GitHub repository "
+"distribution. Notice above in the Source section of your recipe there is "
+"a `url:` section that provides a PyPI url that ends in tar.gz. That is a "
+"link to your source distribution that conda-forge will use."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:423
+msgid ""
+"[x] GitHub users listed in the maintainer section have posted a comment "
+"confirming they are willing to be listed there."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:425
+msgid ""
+"**Translation** Once you have submitted your recipe, be sure that all "
+"maintainers listed in your recipe respond acknowledging that they are ok "
+"with being listed as a maintainer for the conda-forge version of your "
+"package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:427
+msgid ""
+"[x] When in trouble, please check our [knowledge base "
+"documentation](https://conda-"
+"forge.org/docs/maintainer/knowledge_base.html) before pinging a team."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:429
+msgid ""
+"**Translation** The conda team are volunteers who spend their time "
+"supporting our community. Please try to troubleshoot on your own first "
+"before tagging one of them for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:431
+msgid ""
+"This is also why we don't suggest you publish to conda-forge as a "
+"practice run."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:435
+msgid ""
+"Once you create your pull request, a suite of CI actions will run that "
+"build and test the build of your package. A conda-forge maintainer will "
+"work with you to get your recipe in good shape and merged."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:439
+msgid ""
+"Image showing the 5 CI tasks that will run against your package in the "
+"GitHub interface after you'ce created a pull request."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:441
+msgid ""
+"Wait until all of the CI steps in your pull request have run. At that "
+"point your pull request is ready for review by a conda-forge maintainer."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:444
+msgid ""
+"In some cases getting all of the checks to run successfully in CI might "
+"take a bit of work. If you are struggling to get your recipe to build "
+"properly, you can ping the conda-forge maintainer team for help."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:446
+msgid "Please be patient and wait for them to respond."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:448
+msgid "conda-forge staged recipes and CI failures"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:451
+msgid ""
+"If your package is a pure Python package that can be installed on any "
+"type of computer (Windows, mac, linux) and has no architecture "
+"requirements (known as noarch: Python or no architecture requirements) "
+"then the conda-forge team only requires tests for Linux CI to pass."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:453
+msgid ""
+"So if tests for Windows and MAC OS fail, that is to be expected. In this "
+"case, don't worry about failing tests, the maintainer team can help you "
+"get your package published."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:456
+msgid ""
+"Once you have submitted your recipe, you can wait for the CI build to "
+"pass. If it's not passing, and you aren't sure why, a conda-forge "
+"maintainer can likely help you figure things out."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:458
+msgid ""
+"Once your recipe is built and merged, the conda team will create a new "
+"package repository for you similar to [this one for the GemGIS "
+"package](https://github.com/conda-forge/gemgis-feedstock)."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:460
+msgid ""
+" Congratulations - you "
+"have added your package to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:462
+msgid ""
+"The last part of this process is maintaining the repository. We cover "
+"that next."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:465
+msgid "Maintaining your conda-forge feedstock"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:467
+msgid ""
+"Every time you create a new release on PyPI, the conda-forge bots will "
+"recognize the release and will rebuild the newly released version of your"
+" package. This process may take a day or two to complete so be patient."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:469
+msgid ""
+"Once the conda-forge build is complete, all of the maintainers of your "
+"conda-forge feedstock will get a ping on GitHub that a new pull request "
+"has been opened."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:471
+msgid ""
+"Review the pull request. If all tests are passing, you can merge it. "
+"Shortly after merging your pull request, the conda-forge release will be "
+"available for users to install:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:473
+msgid "`conda install -c conda-forge yourpackage`"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:477
+msgid "If you have walked through this entire tutorial series you will now:"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:479
+msgid "Understand [what a Python package is ](intro.md)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:480
+msgid ""
+"Know how to [make your code installable](create-python-package.md) into "
+"Python environments"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:481
+msgid ""
+"Know how to create a `pyproject.toml` file, a `README` file, and a "
+"`LICENSE` and code of conduct."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:482
+msgid "Know how to [publish your package to PyPI](publish-pypi.md) and"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:483
+msgid "Know how to publish your package to conda-forge"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:485
+msgid ""
+"The above are the basic steps that you need to take to create and publish"
+" a Python package. In a future tutorial series we will cover that basics "
+"of maintaining your package."
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:489
+msgid "[Grayskull blogpost](https://conda-forge.org/blog/2020/03/05/grayskull/)"
+msgstr ""
+
+#: ../../tutorials/publish-conda-forge.md:490
+msgid "[Pipx documentation](https://pipx.pypa.io/stable/)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:7
+msgid "Publish your Python package to PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:11
+msgid "Make sure they add /dist to their .gitignore file. Where does that fit?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:15
+msgid "In the previous Python packaging lessons, you've learned:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:17
+msgid "What a Python package is"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:18
+msgid "How to make your code installable."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:26
+#, python-brace-format
+msgid ""
+"Build your package's {term}`Source distribution (sdist)` and {term}`Wheel"
+" (.whl)` {term}`Distribution files`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:28
+msgid "Setup an account on TestPyPI (the process is similar for PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:29
+msgid "Publish your package to TestPyPI and PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:31
+msgid ""
+"You will do all of your development work in this lesson using [Hatch"
+"](get-to-know-hatch)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:34
+msgid ""
+"Once your package is on PyPI you can publish it to conda-forge (which is "
+"a channel on conda) using "
+"[Grayskull](https://conda.github.io/grayskull/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:37
+msgid ""
+"You will learn how to publish to conda-forge in the [next lesson"
+"](publish-conda-forge)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:41
+msgid ""
+"Graphic showing the high level packaging workflow. On the left you see a "
+"graphic with code, metadata and tests in it. Those items all go into your"
+" package. An arrow to the right takes you to a build distribution files "
+"box. Another arrow to the right takes you to a publish to PyPI box which "
+"has an arrow containing sdist and wheel that notes those files go to PyPI"
+" for hosting. From PyPI is an arrow containing sdist since you can then "
+"connect to conda-forge for an automated build that sends distributions "
+"from PyPI to conda-forge."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:43
+msgid ""
+"You need to build your Python package in order to publish it to PyPI (or "
+"Conda). The build process organizes your code and metadata into a "
+"distribution format that can be uploaded to PyPI and subsequently "
+"downloaded and installed by users."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:46
+msgid "TestPyPI vs PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:48
+msgid ""
+"There are two repositories associated with PyPI to which you can upload "
+"your Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:51
+msgid ""
+"**[TestPyPI](https://test.pypi.org):** TestPyPI is a package repository "
+"provided by PyPI that you can use for testing that your package can be "
+"uploaded, downloaded, and installed correctly. This is a great place to "
+"practice and learn how to publish a package without exposing your "
+"incomplete package on the real PyPI service."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:52
+msgid ""
+"**[PyPI](https://pypi.org):** This is the live, production PyPI "
+"repository where you can officially publish your Python package, and from"
+" which users will get your package. IMPORTANT: Only publish your package "
+"to PyPI when you are ready for it to be used by others and/or confident "
+"that it will become a package that you will maintain. PyPI is not a place"
+" to practice learning how to publish a Python package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:54
+msgid ""
+"The steps for publishing on TestPyPI vs. PyPI are similar with the "
+"exception of a different url. We will point out where they differ."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:57
+msgid "4 Steps for publishing a Python package on TestPyPI (or PyPI)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:59
+msgid ""
+"In this lesson you will learn how to publish your package to TestPyPI "
+"using [Hatch](https://hatch.pypa.io/latest/). There are 4 things that you"
+" need to do to publish your Python package: to TestPyPI. You need to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:64
+msgid "**Create a package development environment**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:65
+#, python-brace-format
+msgid ""
+"[**Build your package using `hatch build`**](../package-structure-code"
+"/python-package-distribution-files-sdist-wheel). Building a package is "
+"the process of turning your code into two types of distribution files: "
+"sdist and wheel. The wheel distribution file is particularly important "
+"for users who will use {term}`pip` to install your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:66
+#, python-brace-format
+msgid ""
+"**Create an account on TestPyPI (or PyPI)**: You will need to create a "
+"TestPyPI account and associated {term}`API token` which provides "
+"permissions for you to upload your package. When you later publish your "
+"package to PyPI, you will need a separate PyPI account and token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:67
+msgid "**Publish to TestPyPI using `hatch publish`**"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:69
+msgid ""
+"In a [future lesson](trusted-publishing), you will learn how to create an"
+" automated GitHub Actions workflow that publishes an updated version of "
+"your package to PyPI every time you create a GitHub release."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:71
+msgid "Learn more about building Python packages in our guide"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:75
+msgid ""
+"[Learn more about what building a Python package is](../package-"
+"structure-code/python-package-distribution-files-sdist-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:76
+msgid ""
+"[Learn more about the package distribution file that PyPI needs called "
+"the wheel](#python-wheel)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:77
+msgid ""
+"[Learn more about the package distribution file that conda-forge will "
+"need on PyPI called the sdist (source distribution)](#python-source-"
+"distribution)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:80
+msgid "Step 1: Create a Python package development environment"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:82
+msgid ""
+"The first step in building your package is to create a development "
+"environment. The Python environment will contain all of the dependencies "
+"needed to both install and work on your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:84
+msgid "Use Hatch to create your environment."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:92
+msgid "Then view all of the current environments that hatch has access to:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:104
+msgid ""
+"Then activate the environment. Note that when you call a shell from a "
+"Hatch environment, it will automatically install your package into the "
+"environment in development or editable mode."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:114
+msgid "View what's in the environment using `pip list`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:130
+msgid "At any time you can exit the environment using `exit`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:144
+msgid "Hatch and environments"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:146
+msgid ""
+"Behind the scenes when hatch creates a new virtual environment, by "
+"default it uses venv[^venv] which is the default environment management "
+"tool that comes with Python installations."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:149
+msgid "Hatch will:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:151
+msgid "Create a new virtualenv (venv) that is located on your computer."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:152
+msgid ""
+"Install your package into the environment in editable mode (similar to "
+"`python -m pip install -e`). This means it installs both your project and"
+" your project's dependencies as declared in your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:154
+msgid "Step 2: Build your package's sdist and wheel distributions"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:156
+msgid ""
+"Once you have your development environment setup, you are ready to build "
+"your package using Hatch. Remember that building is the process of "
+"turning your Python package file structure into two distribution files:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:158
+msgid ""
+"The [wheel distribution](#python-wheel) is a pre-built version of your "
+"package. It useful for users as it can be directly installed using a tool"
+" such as `pip`. This file has the extension `.whl`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:159
+msgid ""
+"The [source distribution](#python-source-distribution) contains the files"
+" that make up your package in an unbuilt format. This file will have the "
+"extension `.tar.gz`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:161
+msgid ""
+"You will use Hatch as a **Front end** tool that builds your package's "
+"sdist and wheel using the [hatchling](https://hatch.pypa.io/latest/) "
+"build back-end. The hatchling build back-end is used because you declared"
+" it in your pyproject.toml file in the [previous lesson](create-python-"
+"package)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:165
+msgid "To build your package run `hatch build`:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:176
+msgid "Learn more about building a Python package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:178
+msgid ""
+"You can learn more about building in the [build page of our packaging "
+"guide](../package-structure-code/python-package-distribution-files-sdist-"
+"wheel)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:182
+msgid ""
+"The sdist is important if you wish to [publish your package to conda-"
+"forge](publish-conda-forge). You will learn about this in a later lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:186
+msgid ""
+"➜ hatch build ────────────────────────────────────── sdist "
+"────────────────────────────────────── dist/pyospackage-0.1.tar.gz "
+"────────────────────────────────────── wheel "
+"────────────────────────────────────── dist/pyospackage-0.1-py3-none-"
+"any.whl"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:193
+msgid ""
+" Congratulations - "
+"you've created your Python package distribution files "
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:195
+msgid ""
+"You've now built your Python package and created your package "
+"distribution files. The next step is to setup your account on TestPyPI so"
+" you can publish your package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:198
+msgid "Step 3. Setup your TestPyPI account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:200
+msgid ""
+"Next, you'll setup an account on TestPyPI. Remember that you are using "
+"TestPyPI here instead of the real PyPI as a way to safely learn how to "
+"publish a package without accidentally \"releasing\" your package before "
+"it's ready."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:204
+msgid "TestPyPI vs. PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:205
+msgid ""
+"If you have a package that you are confident belongs on PyPI, all of the "
+"steps below will also work for you. When you publish using Hatch, you "
+"will call `hatch publish` to publish directly to PyPI instead of `hatch "
+"publish -r test` which publishes to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:208
+msgid ""
+"[Open up a web browser and go to the TestPyPI "
+"website](https://test.pypi.org/)."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:209
+msgid ""
+"[Create an account](https://test.pypi.org/account/register/) if you don't"
+" already have one. Be sure to store your password in a safe place!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:210
+msgid "Once you have an account setup, login to it."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:211
+msgid ""
+"Search on [https://test.pypi.org/](https://test.pypi.org/) (and also on "
+"[https://pypi.org/](https://pypi.org/)) to ensure that the package name "
+"that you have selected doesn't already exist. If you are using our test "
+"pyosPackage, then we suggest that you add your name or GitHub username to"
+" the end of the package name to ensure it's unique."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:213
+msgid "Example: `pyosPackage_yourNameHere`."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:215
+msgid ""
+"How to rename your Python package if the name is already taken in (test) "
+"PyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:219
+msgid "Required"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:221
+msgid ""
+"Search your publishing location(s) to make sure your new name isn't taken"
+" ([TestPyPI](https://test.pypi.org/), [PyPI](https://pypi.org/), [conda-"
+"forge](https://conda-forge.org/packages/))"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:222
+msgid ""
+"Update the project name in your pyproject.toml file (e.g. `name = "
+"\"pyospackage_yourNameHere\"`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:223
+msgid ""
+"Update the module folder name to be the same (e.g. "
+"`src/pyospackage_yourNameHere`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:224
+msgid "Rebuild your project (`hatch build`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:225
+msgid "Publish your package to capture the name (continue this tutorial!)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:227
+msgid "Recommended"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:229
+msgid "Update the GitHub repository name to align with the new package name"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:230
+msgid ""
+"Update your local project folder to match the new package name (e.g. "
+"`pyospackage_yourNameHere/src`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:231
+msgid "Update mentions of your repository name in other files (e.g. `README.md`)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:235
+msgid ""
+"This is a screenshot of the TestPyPI website. At the top in the search "
+"bar, you can see the search for pyosPackage. The search return says there"
+" were no results for pyosPackage Did you mean probpackage"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:237
+msgid ""
+"Before you try to upload to TestPyPI, check to see if the name of your "
+"package is already taken. You can do that using the search box at the top"
+" of the TestPyPI website."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:241
+msgid "Setup 2-factor (2FA) authentication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:243
+msgid ""
+"2-factor authentication is a secure login process that allows you to use "
+"a backup device that only you can access to validate that the person "
+"logging in is really you. It addresses the issue of password phishing "
+"where someone else gains access to a password and can login to your "
+"account."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:246
+msgid ""
+"This matters on PyPI because someone could login to your account and "
+"upload a version of your package that has security issues. These issues "
+"will then impact all of your users when they download and install that "
+"version of the package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:248
+msgid ""
+"2-factor authentication is required for PyPI authentication as of 1 "
+"January 2024."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:252
+msgid "Step 4. Create a package upload token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:254
+msgid ""
+"To upload your package to TestPyPI (or PyPI), you will need to create a "
+"token for your account first, and should then create a package-specific "
+"token. (If you completed this step previously, you can reuse the tokens "
+"when you upload your package again.)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:256
+msgid "Why create package-specific tokens?"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:258
+msgid ""
+"It's ideal to create a package-specific token. When you create an "
+"account-wide token this allows anyone with access to the account to then "
+"access all of your TestPyPI (or PyPI) projects. By creating a package-"
+"specific token, you are limiting the scope of the token to only your "
+"specific package. This is just a safe way to set things up for you "
+"particularly if you are collaborating with others on package development."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:261
+msgid "Follow the steps below to create your token"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:263
+msgid "Login to TestPyPI and go to your account settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:264
+msgid "Scroll down to the **API tokens** section"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:265
+msgid "Click on the **Add API Token** button"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:266
+msgid ""
+"If you are new to using TestPyPI and don't have any packages there yet, "
+"OR if you have other packages on TestPyPI but are uploading a new "
+"package, you will need to create an account-wide token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:267
+msgid ""
+"When you create your token, be sure to copy the token value and store it "
+"in a secure place before closing that browser."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:269
+msgid "Your token should look something like this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:271
+msgid "`pypi-abunchofrandomcharactershere...`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:273
+msgid "It should start with `pypi` followed by a dash and a bunch of characters."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:275
+msgid "Upload to TestPyPI using Hatch"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:277
+msgid "Once you have your token, you are ready to publish to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:280
+msgid "Run `hatch publish -r test`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:282
+msgid ""
+"`-r` stands for repository. In this case because you are publishing to "
+"TestPyPI you will use `-r test`. Hatch will then ask for a username and "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:284
+msgid ""
+"Add the word `__token__` for your username. This tells TestPyPI that you "
+"are using a token value rather than a username."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:285
+msgid "Paste your TestPyPI token value in at the `Enter your credentials` prompt:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:296
+msgid ""
+"If your credentials are valid, and you have already run `hatch build` and"
+" thus have your 2 distribution files in a `dist/` directory then Hatch "
+"will publish your package to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:300
+msgid ""
+"Hatch also has a caching system so once you enter your credentials it "
+"will remember them."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:303
+msgid "Install your package from TestPyPI"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:305
+msgid ""
+"Once your package upload is complete, you can install it from TestPyPI. "
+"You can find the installation instructions on the TestPyPI landing page "
+"for your newly uploaded package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:310
+msgid ""
+"A screenshot of the TestPyPI page for pyosPackage. It says pyosPackage "
+"0.1.0 at the top with the pip install instructions below. The landing "
+"page of the package has information from the package's README file."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:312
+msgid ""
+"This is an example landing page for the pyosPackage that was just "
+"uploaded. Notice at the top of the page there are instructions for how to"
+" install the package from TestPyPI. You can simply copy that code and use"
+" it to install your package from TestPyPI locally."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:315
+msgid ""
+"As an example, [check out our pyOpenSci pyosPackage landing page on "
+"TestPyPI](https://test.pypi.org/project/pyosPackage/). Notice that the "
+"page has information about the current package version and also "
+"installation instructions as follows:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:319
+msgid "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:322
+msgid ""
+"Publishing to TestPyPI vs PyPI While you can install from TestPyPI it's "
+"not recommended that you publish to TestPyPI as a permanent way to "
+"install your package. In fact, you cannot, because TestPyPI may delete "
+"accounts after a time. TestPyPI is a perfect place to learn how to "
+"publish your package and test the installation process. But your end goal"
+" should be to publish to PyPI once you have figured out your workflow and"
+" your package is ready to deploy."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:326
+msgid "Time to install your package"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:328
+msgid ""
+"On your computer, activate the development environment that you wish to "
+"install your newly published package in."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:330
+msgid "Run the installation instructions for your package from TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "Conda"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md
+msgid "venv Mac / Linux"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:354
+msgid "The value of end-to-end tools like hatch, flit and poetry"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:355
+msgid ""
+"In this lesson you are using Hatch and hatchling to create, build and "
+"publish your Python package. [Click here to learn about other packaging "
+"tools in the ecosystem.](../package-structure-code/python-package-build-"
+"tools.md)"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:359
+msgid ""
+"teach them to setup trusted publisher for actions... in the actions "
+"lesson https://pypi.org/help/#twofa"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:362
+msgid ""
+"from PyPI: https://pypi.org/help/#apitoken - You can create a token for "
+"an entire PyPI account, in which case, the token will work for all "
+"projects associated with that account. Alternatively, you can limit a "
+"token's scope to a specific project."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:365
+msgid "Package-specific token vs trusted publisher"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:367
+msgid ""
+"For long run maintenance of your package, you have two options related to"
+" PyPI publication."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:370
+msgid ""
+"You can create a package-specific token which you will use to publish "
+"your package (manually) to PyPI. This is a great option if you don't wish"
+" to automate your PyPI publication workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:371
+msgid ""
+"You can also create an automated publication workflow on GitHub using "
+"GitHub Actions. This is a great way to make the publication process "
+"easier and it also supports a growing maintainer team. In this case we "
+"suggest you don't worry about the token and instead setup a specific "
+"GitHub Actions that publishes your package when you make a release. You "
+"can then create a \"trusted publisher\" workflow on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:373
+msgid "Trusted Publishing"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:376
+msgid ""
+"While publishing from GitHub Action is possible using tokens, we "
+"recommend the _Trusted Publishing_ approach as it also confers "
+"significant security and usability benefits."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:378
+msgid ""
+"On the usability front, when Trusted Publishing is enabled, users no "
+"longer need to manually create API tokens on PyPI and store them in the "
+"GitHub release workflow."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:380
+msgid ""
+"On the security front, Trusted Publishing reduces a risk related to the "
+"API token being long lived: with API tokens, as soon as an attacker gets "
+"access to it, they can publish many packages and versions in your name "
+"(depending on the scope of the token), until you discover the token "
+"compromise and rotate the credential. Trusted Publishing avoids this "
+"problem by minting very short lived tokens which expire automatically."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:382
+msgid ""
+"For these benefits, it is recommended that users use _only_ the GitHub "
+"Actions release workflow to publish packages."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:385
+msgid ""
+"You will learn how to create the automated trusted publisher workflow in "
+"a followup lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:387
+msgid "OPTIONAL: If you want to use a manual token-based publication workflow"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:389
+msgid ""
+"If you plan to use your token regularly to publish to PyPI, we strongly "
+"recommend going through the above steps again to create a token specific "
+"to your new package."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:392
+msgid "To do this:"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:393
+msgid "Go to TestPyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:394
+msgid "Navigate to the \"Your Projects\" section of your account"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:395
+msgid ""
+"Click on the manage button for the project that you wish to add a token "
+"for"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:396
+msgid "Go to settings"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:397
+msgid "Click on \"Create a token for your-package-name-here\""
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:398
+msgid ""
+"Create the token and follow the steps above publish your package using "
+"the repository specific token."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:400
+msgid "And you're all done!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:402
+msgid "Trusted Publishing instead of token-based publication"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:405
+msgid ""
+"Trusted Publishing will generate short lived tokens, scoped to the "
+"project, on demand, only when a specific release workflows gets "
+"triggered. This solves all the security and usability issues associated "
+"with storing credentials in files/GitHub secrets."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:411
+msgid "You have published your package to TestPyPI!"
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:413
+msgid ""
+"Congratulations. You have now successfully published your package to "
+"TestPyPI. If you have a package that is ready for real-world use on the "
+"real PyPI, then you can follow the same steps (with the differences noted"
+" above) to publish it on PyPI."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:415
+msgid ""
+"Once you publish on PyPI, you can then easily add your package to the "
+"conda-forge ecosystem using the [grayskull](https://conda-"
+"forge.org/blog/posts/2020-03-05-grayskull/) tool."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:417
+msgid "You will learn how to do that in the next lesson."
+msgstr ""
+
+#: ../../tutorials/publish-pypi.md:421
+msgid "https://docs.python.org/3/library/venv.html"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:6
+msgid "Make your Python package PyPI ready - pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:8
+msgid ""
+"In [the installable code lesson](create-python-package), you learned how "
+"to add the bare minimum information to a `pyproject.toml` file to make it"
+" installable. You then learned how to publish a bare minimum version of "
+"your package to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:13
+msgid "Following that you learned how to add a:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:14
+msgid "[README.md](add-readme)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:15
+msgid "[LICENSE](add-license-coc) and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:16
+msgid "[CODE_OF_CONDUCT](add-coc)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:18
+msgid "to the root of your project directory."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:20
+msgid ""
+"To enhance the visibility of your package on PyPI and provide more "
+"information about its compatibility with Python versions, project "
+"development status, and project maintainers, you should add additional "
+"metadata to your `pyproject.toml` file. This lesson will guide you "
+"through the process."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:32
+msgid ""
+"More about the `pyproject.toml` file and how it's used to store different"
+" types of metadata about your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:33
+msgid ""
+"How to declare information (metadata) about your project to help users "
+"find and understand it on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:35
+msgid ""
+"If you wish to learn more about the `pyproject.toml` format, [check out "
+"this page. ](../package-structure-code/pyproject-toml-python-package-"
+"metadata.md)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Click for lesson takeaways"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:42
+msgid "When creating your pyproject.toml file, consider the following:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:44
+msgid ""
+"There are only two required metadata tables that you need to install and "
+"publish your Python package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:45
+msgid "**[build-system]**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:46
+msgid "**[project]**."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:47
+msgid ""
+"The **[project]** table stores your package's metadata. Within the "
+"**[project]** table, There are only two _required_ fields:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:48
+msgid "**name=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:49
+msgid "**version=**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:50
+msgid ""
+"You should add more metadata to the `[project]` table as it will make it "
+"easier for users to find your project on PyPI. And it will also make it "
+"easier for installers to understand how to install your package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:51
+msgid ""
+"When you are adding classifiers to the **[project]** table, only use "
+"valid values from [PyPI's classifier "
+"page](https://PyPI.org/classifiers/). An invalid value here will raise an"
+" error when you build and publish your package on PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:52
+msgid ""
+"There is no specific order for tables in the `pyproject.toml` file. "
+"However, fields need to be placed within the correct tables. For example "
+"`requires =` always need to be in the **[build-system]** table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:53
+msgid ""
+"We suggest that you include your **[build-system]** table at the top of "
+"your `pyproject.toml` file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:58
+msgid ""
+"The `pyproject.toml` file is a human and machine-readable file that "
+"serves as the primary configuration file for your Python package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:63
+msgid ""
+"[Building your package](build-package) is the step that created the "
+"distribution files that are required for you to publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:67
+msgid "About the .toml format"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:69
+#, python-brace-format
+msgid ""
+"The **pyproject.toml** file is written in {term}`TOML` format. TOML is an"
+" easy-to-read structure that is based on key/value pairs. Each section in"
+" the **pyproject.toml** file contains a `[table identifier]`. The TOML "
+"format can be compared to other structured formats such as `.json`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:74
+msgid ""
+"Below you can see the `[build-system]` table. Within that table there are"
+" two required key/value pairs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:77
+msgid ""
+"`requires =` is the key and the value is `[\"hatchling\"]` within the "
+"`[build-system]` array specified by square brackets `[]`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:87
+msgid "What is the pyproject.toml used for?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:89
+msgid "The pyproject.toml file tells your build tool:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:91
+#, python-brace-format
+msgid ""
+"What {term}`Build backend` to use to build your package (we are using "
+"{term}`Hatchling` in this tutorial but there are [many others to choose "
+"from](/package-structure-code/python-package-build-tools))."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:94
+msgid "How and where to retrieve your package's version:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:95
+msgid "**statically** where you declare the version `version = \"0.1.0\"` or"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:96
+msgid ""
+"**dynamically** where the tool looks to the most recent tag in your "
+"history to determine the current version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:97
+#, python-brace-format
+msgid "What {term}`Dependencies` your package needs"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:98
+msgid "What versions of Python your package supports (important for your users)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:100
+msgid ""
+"The `pyproject.toml` file also makes it easy for anyone browsing your "
+"GitHub repository to quickly understand your package's structure such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:103
+msgid "How your package is built,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:104
+msgid "What Python versions and operating systems it supports"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:105
+msgid "What it does,"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:106
+msgid "Who maintains it"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:108
+msgid ""
+"Finally, the pyproject.toml file is also often used to configure tools "
+"such as static type checkers (e.g. mypy) and code formatters/linters "
+"(e.g. black, ruff)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:111
+msgid ""
+"Check out the [PyPA "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend) if you are interested in "
+"setting build configurations for other tools."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:113
+msgid ""
+"Note that some build tools may deviate in how they store project "
+"metadata. As such you may want to refer to their documentation if you "
+"decide to use a tool other than Hatch and hatchling. We have selected "
+"hatchling and hatch as our tool of choice for this tutorial as it adheres"
+" to PyPA rules and guidelines."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:117
+msgid "How is pyproject.toml metadata used?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:119
+msgid ""
+"The pyproject.toml file is the file that your build tool uses to populate"
+" a `METADATA` that is included in your Python distribution files that get"
+" published to PyPI. This `METADATA` file is then used by PyPI to populate"
+" your package's PyPI landing page and help users filter through the tens "
+"of thousands of packages published there."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:122
+msgid ""
+"Image showing the left side bar of PyPI for the package xclim. The "
+"section at the top says Classifier. Below there is a list of items "
+"including Development status, intended audience, License, natural "
+"language, operating system, programming language and topic. Below each of"
+" those sections are various classifier options.\" width=\"300px\">"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:127
+msgid ""
+"When you add the classifier section to your pyproject.toml and your "
+"package is built, the build tool organizes the metadata into a format "
+"that PyPI can understand and represent on your PyPI landing page. These "
+"classifiers also allow users to sort through packages by version of "
+"python they support, categories and more."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:133
+msgid "A more in-depth overview of pyproject.toml files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:135
+msgid ""
+"[Our guidebook page has a more in depth overview of this file"
+"](../package-structure-code/pyproject-toml-python-package-metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:138
+msgid "How to update your pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:140
+msgid ""
+"In the last lesson, you created a bare-bones pyproject.toml file that "
+"contained the core elements needed to build your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:144
+msgid ""
+"A `[build-system]` table where you defined your project's backend build "
+"tool (`hatchling`)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:145
+msgid "A `[project]` table where you defined your project's version and name."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:147
+msgid "The `pyproject.toml` file that you created, looked like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:159
+msgid ""
+"Your next step is to add additional recommended metadata fields that will"
+" both help users find your package on PyPI and also better describe the "
+"scope of your package. Once you add this metadata, you don't have to do "
+"it again. These metadata fields will only be updated periodically when "
+"you do something such as:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:162
+msgid "drop a package dependency"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:163
+msgid "modify what Python versions your package supports."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:165
+msgid "More on hatchling"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:168
+msgid ""
+"The documentation for the hatchling back-end is "
+"[here](https://hatch.pypa.io/latest/config/metadata/)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:171
+msgid "Step 1: Add Author, maintainer and project description"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:173
+msgid ""
+"After completing the [installable code tutorial](create-python-package), "
+"you should have a pyproject.toml file with a project name and a version "
+"in the `[project]` table."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:181
+msgid "Add the following to your table:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:183
+msgid ""
+"A **description** of your package. This should be a single line and "
+"should briefly describe the goal of your package using non technical "
+"terms if as all possible!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:184
+msgid "package **authors**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:185
+msgid "package **maintainers**"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:187
+msgid "The `description` is just a string like the other values you've set:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:198
+msgid ""
+"When you add authors and maintainers you need to use a format that will "
+"look like a Python list with a dictionary within it:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:212
+msgid "Author names & emails"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:216
+msgid ""
+"There is a quirk with PyPI for authors that have names but not emails in "
+"the pyproject.toml. If you are missing the email for one or more authors "
+"or maintainers, like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:225
+msgid ""
+"Then we suggest that you only provide names in your list of names to "
+"ensure that everything renders properly on your PyPI page - like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:234
+msgid "don't have emails for everyone, we suggest that you only add names."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:237
+msgid ""
+"Your `pyproject.toml` file now should look like the example below. It is "
+"OK if you only have 1 author and the same author is also maintainer of "
+"your package:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid ""
+"Learn More: What's the difference between author and maintainer in open "
+"source?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:265
+msgid ""
+"When adding maintainers and authors, you may want to think about the "
+"difference between the two."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:267
+msgid "Authors generally include people who:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:268
+msgid "originally created / designed developed the package and"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:269
+msgid "people who add new functionality to the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:271
+msgid ""
+"Whereas maintainers are the people that are currently, actively working "
+"on the project. It is often the case that there is overlap in authors and"
+" maintainers. As such these lists may be similar or the same."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:273
+msgid ""
+"A good example of when the lists might diverge is sometimes you have a "
+"package where an initial author developed it and then stepped down as a "
+"maintainer to move on to other things. This person may continue to be "
+"considered an author but no longer actively maintains the package."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:275
+msgid ""
+"It is important to note that there are many ways to define author vs "
+"maintainer and we don't prescribe a single approach in this tutorial."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:277
+msgid ""
+"However, we encourage you to consider carefully, for PyPI publication, "
+"who you want to have listed as authors and maintainers on your PyPI "
+"landing page."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:281
+msgid "Step 2: Add README and license"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:283
+msgid ""
+"In the previous lessons, you added both a [README.md](add-readme) file "
+"and a [LICENSE](add-license-coc) to your package repository. Once you "
+"have those files, you can refer to the README from your pyproject.toml "
+"file, and add a short code indicating your choice of LICENSE following "
+"the example below."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:312
+msgid ""
+"The license entry in your pyproject.toml file must use the [license "
+"expression syntax](https://packaging.python.org/en/latest/specifications"
+"/license-expression/). Often this is a short name (with no spaces) for "
+"the license, such as \"MIT\", \"BSD-3-Clause\" or \"Apache-2.0\". More "
+"precisely, it must be a valid SPDX license expression, as documented in "
+"the [SPDX specification](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-"
+"license-expressions/), either version 2.2 or a later compatible version."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:314
+msgid ""
+"If you have multiple licenses, or a custom license, you can also express "
+"these using a license expression."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:316
+msgid ""
+"If you want to distribute license files, or other files containing legal "
+"information, with your package, you can include these using the "
+"[`license-files`](https://packaging.python.org/en/latest/guides/writing-"
+"pyproject-toml/#license-files) entry, but this is not required."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:318
+msgid "Step 3: Specify Python version with `requires-python`"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:320
+msgid ""
+"Add the `requires-python` field to your `pyproject.toml` `[project]` "
+"table. The `requires-python` field helps pip identify which Python "
+"versions that your package supports. It is set to a single value. The "
+"[packaging "
+"specification](https://packaging.python.org/en/latest/specifications"
+"/core-metadata/#core-metadata-requires-python) defines`requires-python` "
+"as a string that uses version specifiers. Most projects will specify the "
+"oldest Python version supported by the package. In some advanced cases, "
+"an upper bound is set to indicate which future Python versions, if any, "
+"will be supported."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:325
+msgid "But how do I figure out which Python versions I should support?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:327
+msgid ""
+"Good question. The Python developer guide provides a [status "
+"page](https://devguide.python.org/versions/) (and a handy visualization) "
+"that explains the status of each Python release. Python releases go "
+"through several different phases that are explained in [PEP "
+"602](https://peps.python.org/pep-0602/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:329
+msgid ""
+"We recommend that you use the latest Python release in the **bugfix** "
+"phase. If your Python release is in the **security** phase, we recommend "
+"migrating to a newer version of Python."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:331
+msgid ""
+"[SPEC 0](https://scientific-python.org/specs/spec-0000/) of the "
+"Scientific Python project suggests a common schedule for dependencies, "
+"including Python release versions, and is also worth considering for your"
+" project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:360
+msgid "Step 4: Specify Dependencies"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:362
+msgid ""
+"Next add your dependencies table to the project table. The `dependencies "
+"=` section contains a list (or array in the toml language) of the Python "
+"packages that your package requires to run properly in a Python "
+"environment. Similar to the requirements listed in the `[build-system]` "
+"table above:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:370
+msgid "dependencies are added in an array (similar to a Python list) structure."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:376
+msgid ""
+"A dependency can be limited to specific versions using a **version "
+"specifier.** If the dependency has no version specifier after the "
+"dependency name, your package can use any version of the dependent "
+"package. Code changes over time, bugs are fixed, APIs change, and so it's"
+" good to be clear about which version of the dependency you wrote your "
+"code to be compatible with - a package you wrote this year probably isn't"
+" compatible with numpy v0.0.1!"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:380
+msgid ""
+"[Learn more about various ways to specify ranges of package versions "
+"here.](https://packaging.python.org/en/latest/specifications/version-"
+"specifiers/#id5)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:382
+msgid ""
+"The most common version specifier is a **lower bound,** allowing any "
+"version higher than the specified version. Ideally you should set this to"
+" the lowest version that is still compatible with your package, but in "
+"practice for new packages this is often set at the version that was "
+"current at the time the package was written[^lowerbound]."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:387
+msgid "Lower bounds look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:393
+msgid ""
+"Commas are used to separate individual dependencies, and each package in "
+"your `dependencies` section can use different types of version "
+"specifiers:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:404
+msgid "Your `pyproject.toml` file will now look like this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:434
+msgid "Pin dependencies with caution"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:435
+msgid ""
+"\"Pinning\" a dependency means setting it to a specific version, like "
+"this:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:437
+msgid "`numpy == 1.0`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:439
+msgid ""
+"If you are building a library package that other developers will depend "
+"upon, you must be cautious before pinning to a precise dependency "
+"version. Applications, such as production websites, will often pin their "
+"dependencies since other packages will not depend on their project. This "
+"is because users will be installing your package into various "
+"environments. A dependency pinned to a single specific version can make "
+"resolving a Python environment more challenging. As such only pin "
+"dependencies to a specific version if you absolutely need to do so."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:447
+msgid ""
+"Similarly, you should be cautious when specifying an upper bound on a "
+"package. These two specifications are equivalent:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:455
+msgid ""
+"One build tool that you should be aware of that pins dependencies to an "
+"upper bound by default is Poetry. [Read more about how to safely add "
+"dependencies with Poetry, here.](challenges-with-poetry)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:458
+msgid "Step 5: Add PyPI classifiers"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:460
+msgid ""
+"Next you will add classifiers to your `pyproject.toml` file. The value "
+"for each classifier that you add to your `pyproject.toml` file must come "
+"from the list of [PyPI accepted classifier values found "
+"here](https://PyPI.org/classifiers/). Any deviations in spelling and "
+"format will cause issues when you publish to PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:462
+msgid "What happens when you use incorrect classifiers?"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:465
+msgid ""
+"If you do not [use standard classifier "
+"values](https://PyPI.org/classifiers/), when you try to publish your "
+"package on PyPI it will be rejected. 😔 Don't worry if PyPI rejects you on"
+" your first try! It has happened to all of us."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:468
+msgid "Review that list and add items below to your `pyproject.toml` file:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:470
+msgid "development status"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:471
+msgid "intended audiences"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:472
+msgid "topic"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:473
+msgid "programming language support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:475
+msgid ""
+"The classifier key should look something like the example below. A few "
+"notes:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:477
+msgid ""
+"Your classifier values might be different depending upon your intended "
+"audience, development status of your package and the Python versions that"
+" you support"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:478
+msgid ""
+"You can add as many classifiers as you wish as long as you use the "
+"[designated PyPI classifier values](https://PyPI.org/classifiers/)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:517
+msgid ""
+"Note that while classifiers are not required in your `pyproject.toml` "
+"file, they will help users find your package. As such we strongly "
+"recommend that you add them."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:519
+msgid "Step 6: Add the `[project.urls]` table"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:521
+msgid "Finally, add the project.urls table to your pyproject.toml file."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:523
+msgid ""
+"`project.urls` contains links that are relevant for your project. You "
+"might want to include:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:525
+msgid ""
+"**Homepage:** A link to your published documentation for your project. If"
+" you are working through this tutorial, then you may not have this link "
+"yet. That's ok, you can skip it for the time being."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:526
+msgid ""
+"**Bug reports:** a link to your issues/discussions or wherever you want "
+"users to report bugs."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:527
+msgid "**Source:** the GitHub / GitLab link for your project."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:572
+msgid ""
+"There are many other urls that you can add here. Check out the [README "
+"file here for an overview](https://github.com/patrick91/links-demo)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:575
+msgid "Putting it all together - your completed pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:577
+msgid ""
+"Below is an example of a complete `pyproject.toml` file that is commented"
+" with all of the sections we discussed above."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md
+msgid "Appendix - Click for a fully commented pyproject.toml file"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:626
+msgid ""
+"Below is a fully commented pyproject.toml file if you want to use it for "
+"reference."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:692
+msgid "Example `pyproject.toml` files"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:694
+msgid ""
+"Below are some examples of `pyproject.toml` files from various packages "
+"in the scientific and pyOpenSci ecosystem."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:695
+msgid ""
+"[PyPA's fully documented example pyproject.toml "
+"file](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:696
+msgid ""
+"[taxpasta has a nicely organized pyproject.toml file and is a pyOpenSci "
+"approved "
+"package](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a53dd49ad77e4cf143573/pyproject.toml)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:702
+msgid "At this point you've created:"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:704
+msgid "A [README.md](add-readme) file for your package"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:705
+msgid "A [CODE_OF_CONDUCT.md](add-coc) file to support your user community"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:706
+msgid ""
+"And a [LICENSE](add-license-coc) file which provides legal boundaries "
+"around how people can and can't use your software"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:708
+msgid ""
+"You also learned [how to publish your package to (test)PyPI](publish-"
+"pypi)."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:710
+msgid "Publish a new version of your package to PyPI"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:712
+msgid ""
+"You are now ready to publish a new version of your Python package to "
+"(test) PyPI. When you do this you will see that the landing page for your"
+" package now contains a lot more information."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:714
+msgid "Try to republish now."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:716
+msgid ""
+"First, update the version of your package in your pyproject toml file. "
+"Below version is updated from `0.1` to `0.1.1`."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:729
+msgid "Now use hatch to publish the new version of your package to test.PyPI.org."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:736
+msgid "Next (optional) step - publishing to conda-forge"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:738
+msgid ""
+"You now have all of the skills that you need to publish your package to "
+"PyPI."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:741
+msgid ""
+"If you also want to publish your package on conda-forge (which is a "
+"channel within the conda ecosystem), you will learn how to do that in the"
+" next lesson."
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:745
+msgid ""
+"Really good resources from jeremiah "
+"https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet "
+"useful (and the linked links-demo even more so)"
+msgstr ""
+
+#: ../../tutorials/pyproject-toml.md:385
+msgid ""
+"Some packaging tools will do this for you when you add a dependency using"
+" their cli interface. For example [`poetry add`](https://python-"
+"poetry.org/docs/cli/#add) will add the most recent version with a `^` "
+"specifier, and [`pdm add`](https://pdm-"
+"project.org/latest/reference/cli/#add) will add the most recent version "
+"with `>=`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:10
+msgid ""
+"Python supports inline metadata for scripts (a feature added in 2024). "
+"This makes it possible to run standalone scripts with dependencies and "
+"Python versions managed automatically."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:14
+#, python-brace-format
+msgid ""
+"Many tools support this workflow, including PDM, [Hatch](get-to-know-"
+"hatch), and {term}`uv`. In this tutorial, we focus on Hatch and UV. The "
+"same metadata format can also be used with other tools."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:22
+msgid ""
+"[Hatch: How to run Python scripts](https://hatch.pypa.io/latest/how-"
+"to/run/python-scripts/)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:23
+msgid ""
+"[uv: Running "
+"scripts](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-"
+"script)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:26
+msgid "How to create a reproducible script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:28
+#, python-brace-format
+msgid ""
+"Sometimes you want to share or run a single script without creating a "
+"full {term}`Python package`. To do this, you can use inline script "
+"metadata. This format lets you specify dependencies and Python versions "
+"at the top of your script in a comment block."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:34
+msgid ""
+"When you add metadata at the top of a script, Hatch (or PDM or uv) will "
+"use that metadata to:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:37
+msgid "Create an isolated virtual Python environment for that script."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:38
+#, python-brace-format
+msgid ""
+"Install the {term}`Dependencies` listed in the script into that "
+"environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:39
+msgid "Use the required Python version that you specify in the metadata."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:41
+msgid ""
+"This approach is useful for workflows that you want to make reproducible,"
+" but that do not need to become full Python packages."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:44
+msgid "Why use Hatch for scripts?"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:46
+msgid ""
+"Inline metadata helps you make scripts reproducible. Anyone can run your "
+"script without manually creating a new environment or guessing which "
+"dependencies it needs. Hatch takes care of installing dependencies and "
+"using the correct Python version."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:51
+msgid "How to add inline metadata to your script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:53
+msgid ""
+"You will use Hatch in this example, but you can also use uv if that is "
+"your preferred tool."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:56
+#, python-brace-format
+msgid ""
+"First, create a new file named `script.py` with the block below at the "
+"top. The metadata block starts with `# /// script` and ends with `# ///`."
+" Everything in between must be {term}`TOML` metadata written as comments."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:60
+msgid ""
+"In the example below, the script requires Python 3.11 or newer, and NumPy"
+" is declared as a dependency."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:81
+msgid "Run the script with Hatch"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:83
+msgid ""
+"Open your terminal and change to the directory where `script.py` lives. "
+"Then run:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:90
+msgid ""
+"On first run, Hatch will create an environment and install dependencies. "
+"On later runs, Hatch will reuse that environment so startup is faster."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:94
+msgid ""
+"The environment name is based on the script path. If you move the script "
+"to a new location, Hatch will treat it as a new script environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:98
+msgid "Optional: configure script environment behavior"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:100
+msgid ""
+"You can control script-specific Hatch behavior in the same metadata "
+"block. For example, to use `pip` instead of `uv` as the installer:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:113
+msgid "Run the same script with uv"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:115
+msgid "If you prefer uv, you can run the same inline-metadata script with:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:121
+msgid ""
+"The same `# /// script` metadata block works with uv, including "
+"`requires-python` and `dependencies`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:124
+msgid ""
+"For more on using uv to run scripts, see the guide: [Running scripts with"
+" uv](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:128
+msgid "When to use scripts vs. packages"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:130
+msgid "You may be wondering when to use scripts versus creating a package."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:132
+msgid "This depends on your use case. Scripts are often useful when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:134
+msgid "You have one small task, or a specific workflow that is not generalizable."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:135
+msgid ""
+"Your workflow is still evolving, but you want to run it in a reproducible"
+" environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:137
+msgid "You want reproducible dependencies quickly."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:138
+msgid "You are sharing a single file with collaborators."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:140
+msgid "Create a full package when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:142
+msgid "You are building reusable modules for multiple projects."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:143
+msgid "You need tests, documentation, releases, and long-term maintenance."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:144
+msgid "Your codebase is growing beyond one or two scripts."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:148
+msgid "[Get to know Hatch](get-to-know-hatch.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:149
+msgid "[Create a Python package](create-python-package.md)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:150
+msgid "[Command line reference guide](command-line-reference.md)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:7
+msgid "Using Hatch to Migrate setup.py to a pyproject.toml"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:9
+msgid ""
+"[Hatch](get-to-know-hatch) can be useful for generating your project's "
+"[pyproject.toml](pyproject-toml) file if your project already has a "
+"`setup.py` file."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:13
+msgid "Note"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:16
+msgid ""
+"This step is not necessary and is only helpful if your project already "
+"has a `setup.py` file defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:17
+msgid ""
+"If your project does not already define a `setup.py` see [Make your "
+"Python code installable](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:25
+msgid ""
+"The process of using Hatch to transition to using `pyproject.toml` for "
+"projects that already have a `setup.py` defined."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:28
+msgid "What is Hatch?"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:30
+#, python-brace-format
+msgid ""
+"Hatch is a Python package manager designed to streamline the process of "
+"creating, managing, and distributing Python packages. It provides a "
+"convenient CLI (Command-Line Interface) for tasks such as creating new "
+"projects, managing {term}`Dependencies`, building distributions, and "
+"publishing packages to repositories like [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:40
+msgid "See [Get to know Hatch](get-to-know-hatch) for more information."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:43
+msgid "Prerequisites"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:45
+msgid ""
+"Before we begin, ensure that you have Hatch installed on your system. You"
+" can install it via pip:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:51
+msgid "Sample Directory Tree"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:53
+msgid ""
+"Let's take a look at a sample directory tree structure before and after "
+"using `hatch init`:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:55
+msgid "Before `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:71
+msgid "After `hatch init`"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:89
+msgid ""
+"As you can see, the main change after running `hatch init` is the "
+"addition of the `pyproject.toml` file in the project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:91
+msgid "Step-by-Step Guide"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:93
+msgid ""
+"Now, let's walk through the steps to use Hatch to create a "
+"`pyproject.toml` file for your project."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:95
+msgid ""
+"**Navigate to Your Project Directory**: Open your terminal or command "
+"prompt and navigate to the directory where your Python project is "
+"located."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:97
+msgid ""
+"**Initialize Hatch**: Run the following command to initialize Hatch in "
+"your project directory:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:103
+msgid ""
+"**Review and Customize**: After running the previous command, Hatch will "
+"automatically generate a `pyproject.toml` file based on your existing "
+"project configuration. Take some time to review the contents of the "
+"generated `pyproject.toml` file. You may want to customize certain "
+"settings or dependencies based on your project's requirements (see "
+"[pyproject.toml tutorial](pyproject-toml) for more information about the "
+"`pyproject.toml`)."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:105
+msgid ""
+"**Verify**: Verify that the `pyproject.toml` file accurately reflects "
+"your project configuration and dependencies. You can manually edit the "
+"file, but be cautious and ensure that the syntax is correct."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:107
+msgid ""
+"**Delete setup.py**: Since we're migrating to using `pyproject.toml` "
+"exclusively, the `setup.py` file becomes unnecessary. You can safely "
+"delete it from your project directory."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:109
+msgid ""
+"**Test Build**: Before proceeding further, it's essential to ensure that "
+"your project builds successfully using only the `pyproject.toml` file. "
+"Run the following command to build your project:"
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:115
+msgid ""
+"This command will build your project based on the specifications in the "
+"`pyproject.toml` file. Make sure to check for any errors or warnings "
+"during the build process."
+msgstr ""
+
+#: ../../tutorials/setup-py-to-pyproject-toml.md:117
+msgid ""
+"**Test Existing Functionality**: After successfully building your project"
+" with `pyproject.toml`, it's crucial to ensure that your project's "
+"existing functionality remains intact. Run any pre-existing tests to "
+"verify that everything still works as expected."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:6
+msgid ""
+"Setup Trusted Publishing for secure and automated publishing via GitHub "
+"Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:8
+msgid "In the previous Python packaging lessons, you learned:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:10
+msgid "[How to create a Python package](create-python-package)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:11
+msgid ""
+"How to publish the code to [PyPI](publish-pypi) and [Conda](publish-"
+"conda-forge)"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:16
+msgid "In this lesson, you will learn how to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:18
+msgid "Automate building and publishing the package on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:19
+#, python-brace-format
+msgid "Configure {term}`Trusted publishing` for the project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:20
+msgid ""
+"Secure your workflow using GitHub action hashes and versions in your "
+"workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:22
+msgid ""
+"This tutorial assumes that your project is hosted on GitHub and that you "
+"want to publish a package from your project to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:26
+msgid "Configure a release job on GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:28
+msgid ""
+"GitHub Actions[^gha] is an infrastructure provided by GitHub to automate "
+"software workflows, straight from the GitHub repository of the project. "
+"You can configure automated testing for every pull request, automate "
+"publishing of documentation, automate creation of web pages for the "
+"project, and even automate the release process. For this lesson, we will "
+"focus on using actions to release and publish your Python package "
+"securely to [PyPI](publish-pypi)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:36
+msgid "Why Trusted Publishing Matters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:38
+msgid ""
+"If you are wondering why trusted publishing is so important, [check out "
+"this blog post:](https://www.pyopensci.org/blog/python-packaging-"
+"security-publish-pypi.html) that dives deeper into what can happen when "
+"you don't lock down your publishing workflows."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:41
+msgid "Step 0: Create a release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:43
+msgid ""
+"To get started, create a file named `release.yaml` under the "
+"`.github/workflows` directory of your project. If the `.github/workflows`"
+" directory does not exist, you can create it. It is GitHub's convention "
+"that all GitHub Actions are configured via YAML files in the "
+"`.github/workflows` directory."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:48
+msgid "Naming your workflow file"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:51
+msgid ""
+"You can name the workflow file whatever you wish. We suggest using "
+"something simple and expressive like `release.yaml` so you, your future "
+"self, and contributors who work on your project know exactly what the "
+"workflow does."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:56
+msgid "Step 1: Name the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:58
+msgid "At the top of the `release.yaml` file, type the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:64
+msgid ""
+"This provides a name to the workflow that you can use to quickly find all"
+" runs of this GitHub Action on the \"Actions\" tab in the GitHub "
+"repository."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:68
+msgid ""
+"Graphic showing an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, \"Release,\" as configured in this step. "
+"Finally, in the center, in the red box labeled \"3\" you can see several "
+"runs of the workflow, for the \"1.0\" and \"1.0.1\" releases of the "
+"package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:70
+msgid ""
+"This image shows an example of a configured workflow for the release. On "
+"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
+"GitHub repository. On the left, in the red box labeled \"2\" you can see "
+"the name of the workflow, as configured in this step. Finally, in the "
+"center, in the red box labeled \"3\" you can see several runs of the "
+"workflow, for the \"1.0\" and \"1.0.1\" releases of the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:73
+msgid "Step 2: Add triggers to the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:75
+msgid ""
+"Every GitHub Actions workflow runs when [certain "
+"conditions](https://docs.github.com/en/actions/reference/events-that-"
+"trigger-workflows) are met. In this case, we assume that a release "
+"workflow should only run when the repository owner creates a new "
+"[release](https://docs.github.com/en/repositories/releasing-projects-on-"
+"github/managing-releases-in-a-repository) for the package. Add the "
+"following to the `release.yaml` file to ensure it runs when you create "
+"and publish a release:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:87
+msgid "Step 3: Configure the jobs in the workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:89
+msgid ""
+"A GitHub Actions *workflow* file can contain multiple *jobs* that run "
+"independently; each job can also have multiple *steps.* When triggered, "
+"the GitHub Action runs all the jobs in a workflow (excluding any steps "
+"that have conditional requirements)."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:93
+msgid ""
+"Jobs and steps can also have [conditional "
+"logic](https://docs.github.com/en/actions/reference/workflow-syntax-for-"
+"github-actions#jobsjob_idif) that allows them only to run if specific "
+"criteria exist. For instance, you may want only to have a job step to "
+"publish to PyPI if a release was made for the package. But you might want"
+" to test building the package every time you merge a new pull request."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:96
+msgid ""
+"For a release job, you need to clone or check out the repository. You can"
+" use the `actions/checkout` action to check out the code. You then "
+"install and use [Hatch](get-to-know-hatch) to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:101
+msgid ""
+"You also need to make sure to set up Hatch on the machine GitHub is using"
+" to run the workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:104
+msgid "A minimal job definition would look like this:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:124
+msgid ""
+"Notice that above, you provide a version for each action step. "
+"`action/checkout@v5` tells GitHub to use version 5 of the checkout "
+"action. The checkout action checks out the code from your repository. In "
+"this case, the code will be used to build your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:126
+msgid ""
+"Next, you will learn about a better way to secure (or \"harden\") your "
+"workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:128
+msgid "Step 4: Secure the GitHub Actions workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:130
+msgid ""
+"There are several improvements you can make to the GitHub Actions "
+"workflow you just configured to improve security and readability."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:133
+msgid ""
+"First, we can give names to relevant steps in the process to increase the"
+" readability of the logs generated during the workflow run. This can be "
+"achieved using `name: ` lines."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:137
+msgid ""
+"More importantly, each time you use an existing action (via `uses`) you "
+"should pin that action to a commit hash. Pinning your action ensures that"
+" if a malicious user takes over the action, they won't be able to impact "
+"your repository (an example of a supply chain attack due to GitHub "
+"Actions is the recent `tj-actions/changed-files` attack[^changed-files-"
+"supply-chain-attack])."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:144
+msgid ""
+"Enabling Dependabot[^dependabot] in the repository will ensure that your "
+"actions stay up to date. The dependabot tool will open pull requests that"
+" update your action versions at whatever frequency you want."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:149
+msgid "Thus, the workflow that you should use should be similar to:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:157
+msgid ""
+"Now, you can commit the `.github/workflows/release.yaml` file to the "
+"repository and push to GitHub."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:159
+msgid ""
+"At this point, if you create a new release for your project on GitHub, "
+"the configured workflow should run and build a wheel for you. "
+"Unfortunately, the wheel is only available on the runner and will be "
+"deleted at the end of the workflow run."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:163
+msgid "Step 5: Upload the built artifact to GitHub Artifacts"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:165
+msgid ""
+"You need to add one more step to the job definition to be able to access "
+"the wheel. You will upload it to the artifacts temporary area[^github-"
+"artifacts]. Add the following to the `release.yaml` file:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:175
+msgid "Upload artifacts parameters"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:178
+msgid ""
+"Above, you have configured the artifact to be deleted after 1 day. The "
+"artifacts storage on GitHub actions is temporary; users should not "
+"download your package from the GitHub artifacts."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:181
+msgid ""
+"You have also configured the release job to error if the `dist/` "
+"directory does not exist. This means that `hatch build` (from the "
+"previous step) failed to build our package, so there is nothing to "
+"release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:186
+msgid ""
+"At this point, if you push the `release.yaml` to GitHub and create a new "
+"release, the GitHub Actions job will:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:189
+msgid "run,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:190
+msgid "clone your repository,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:191
+msgid "install and set up Hatch,"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:192
+msgid "build your package and"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:193
+msgid "upload your package as an archive to the artifacts storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:196
+msgid ""
+"Graphic showing an example of a release workflow that has just finished "
+"running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:198
+msgid ""
+"This figure shows an example of a release workflow that has just finished"
+" running. Each step in the log is matched to one step in the workflow "
+"definition."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:201
+msgid ""
+"At the bottom of the workflow run page on GitHub, you should see a "
+"section for the artifacts produced during runtime and uploaded to this "
+"storage area:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:205
+msgid ""
+"Graphic showing an example of an artifact produced by the release "
+"workflow."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:207
+msgid ""
+"This figure shows the artifact produced by the above release workflow. It"
+" is now marked as expired since the workflow ran more than a day ago."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:210
+msgid ""
+"You can download the artifact (before it expires), unzip it, and install "
+"the wheel contained within. However, this should only be done if you want"
+" to test the built wheel. Next, you will configure uploading to PyPI "
+"using trusted publishing."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:215
+msgid "Configure automatic publishing to PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:217
+msgid ""
+"The job you configured above using GitHub Actions builds your package "
+"using your code. You still need to upload it to PyPI. You could upload "
+"the package from the same job, but it is better to create a separate one "
+"to maintain a separation of tasks. This is why, in the previous section, "
+"we uploaded the artifact to the temporary storage."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:223
+msgid ""
+"In the new job, you will download the package from there and upload it to"
+" PyPI. Since the `build` job does nothing else, there is no possibility "
+"that the package could get compromised before the release."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:227
+msgid "Step 1: Add the upload job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:229
+msgid ""
+"In the `release.yaml` file, add the following new job, after the job "
+"defined in the previous section:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:238
+msgid "Make sure to change the URL"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:240
+msgid "Remember to change the `url:` value to the URL for your package on PyPI!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:243
+msgid "This job has two steps:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:245
+msgid ""
+"It uses `download-artifact` to download the artifacts built in the "
+"previous job"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:247
+msgid "It uses `gh-action-pypi-publish` to publish the package to PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:249
+msgid ""
+"You are almost there!! Now, you just need to enable trusted publishing "
+"for your project on PyPI. And then, your work is done!"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:252
+msgid "Step 2: Enable trusted publishing on PyPI"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:256
+msgid ""
+"Diagram showing PyPI's trusted publisher workflow: Step 1 builds "
+"distribution files via GitHub, Step 2 uses a trusted environment (PyPI), "
+"Step 3 securely uploads to PyPI. Shows chain of trust with lock icon "
+"connecting GitHub Action to Python Package Index."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:261
+msgid ""
+"Before trusted publishing was created, in order to upload to PyPI from "
+"GitHub actions you would have needed to add the username and password as "
+"arguments to the `gh-action-pypi-publish` step. While documentation "
+"recommends using the GitHub's `secrets` environment for the "
+"password/token, in several cases, users were pasting the password "
+"directly into the workflow file. Furthermore, accidental leakage of the "
+"password or token could allow attackers to publish new packages using "
+"your account, until you discover the compromise and revoke the leaked "
+"credentials."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:269
+msgid ""
+"To prevent these incidents and improve supply chain security, developers "
+"created [Trusted Publishing](https://docs.pypi.org/trusted-publishers/). "
+"Trusted publishing allows you to register a publishing workflow on PyPI "
+"and then map that workflow to an automation workflow (e.g., GitHub "
+"Actions) that is allowed to publish the package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:274
+msgid ""
+"You do not need to enter a token or password value in a trusted publisher"
+" workflow. It's a secure connection between your"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:277
+msgid "Trusted Publishing outside of GitHub Actions"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:280
+msgid ""
+"Trusted Publishing supports other automation platforms, beyond GitHub "
+"Actions. It is also possible to configure a trusted publisher for "
+"multiple workflows or multiple publishers for the same package. These are"
+" advanced uses, out of scope for this lesson."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:286
+msgid ""
+"For this lesson, we will focus on configuring a trusted publisher for a "
+"project that already exists on PyPI. If you completed the [lesson about "
+"PyPI publishing](create-python-package), you should have this project "
+"already created."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:288
+msgid ""
+"This setup step needs to be performed only once for the project. Future "
+"releases will only run the GitHub Actions workflow we are configuring in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:291
+msgid ""
+"On the [\"Your projects\" page on "
+"PyPI](https://pypi.org/manage/projects/), click \"Manage\" on any project"
+" you want to configure."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:295
+msgid ""
+"Graphic showing a screenshot of the \"Your projects\" page on PyPI. The "
+"\"Manage\" button for one of the projects is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:297
+msgid ""
+"This image shows several projects. The \"Manage\" button is highlighted "
+"for one of the projects, the one we want to configure trusted publishing "
+"for."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:300
+msgid "Then click \"Publishing\" in the project's sidebar."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:303
+msgid ""
+"Graphic showing the management page for one project. The \"Publishing\" "
+"link in the sidebar is highlighted."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:305
+msgid ""
+"Once clicking on the \"Manage\" button we got to the project's page. In "
+"the sidebar, we have the \"publishing\" option, as highlighted here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:309
+msgid ""
+"This will take you to the publisher configuration page for the project. "
+"Trusted publishers can be configured via the forms here. Fill in the "
+"GitHub form with the following information:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:313
+msgid ""
+"Owner: the GitHub organization name for the organization that owns the "
+"project. If this is your personal project, then use your GitHub username "
+"here."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:315
+msgid "Repository name: the name of the repository that contains the project."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:316
+msgid ""
+"Workflow name: Should be `release.yaml` if you followed this guide, it is"
+" the workflow we just configured."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:318
+msgid ""
+"Environment name: Should be `pypi`, as that is what we configured in "
+"`release.yaml`."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:321
+msgid ""
+"Once you fill in this form and click \"Add\" the publisher is configured "
+"and can be used to publish new releases of your package."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:324
+msgid "Fully hardened GitHub Actions release workflow"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:326
+msgid ""
+"For better security, it is also recommended to control the permissions of"
+" the GitHub token used within each job of the workflow. The permissions "
+"should be scoped at job level and be as minimal as possible. A workflow "
+"that configures trusted publishing and also does this is the following:"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:336
+msgid ""
+"You can copy the above into your `release.yaml` file. You only need to "
+"update the `url:` field and configure trusted publishing on PyPI."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:340
+msgid ""
+"The workflow above should be up to date with the current versions of "
+"GitHub actions. However, it's good to turn on Dependabot to update the "
+"action versions in the future."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:343
+msgid "You have enabled trusted publishing for your project"
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:345
+msgid ""
+"Congratulations!! You have now configured your project to do secure "
+"releases when a new version is being tagged on GitHub. The workflow we "
+"have configured builds the package from the exact version of code that we"
+" are tagging. This provides a guarantee for your users that the package "
+"that you have released does precisely what the code states it does. There"
+" is little to no potential for supply chain related vulnerabilities "
+"arising from your package! If you have a package that is ready for real-"
+"world use on the real PyPI, then you can follow the same steps to publish"
+" it securely."
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:349
+msgid ""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:350
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:351
+msgid ""
+""
+msgstr ""
+
+#: ../../tutorials/trusted-publishing.md:352
+msgid ""
+msgstr ""
diff --git a/locales/ja/LC_MESSAGES/CONTRIBUTING.po b/locales/ja/LC_MESSAGES/CONTRIBUTING.po
index d47820073..2dc634003 100644
--- a/locales/ja/LC_MESSAGES/CONTRIBUTING.po
+++ b/locales/ja/LC_MESSAGES/CONTRIBUTING.po
@@ -419,13 +419,13 @@ msgstr "ローカルに構築されたガイドを見るには、ブラウザで
#: ../../CONTRIBUTING.md:191
msgid "`docs-linkcheck`: this session checks that links in documentation work"
-msgstr ""
+msgstr "`docs-linkcheck`: このセッションでドキュメント内のリンクが正常に機能するか確認します。"
#: ../../CONTRIBUTING.md:195
msgid ""
"If the tests fail, you will see logs in the terminal and in "
"`_build/linkcheck_output/output.txt`."
-msgstr ""
+msgstr "テストが失敗した場合はターミナル及び`_build/linkcheck_output/output.txt`.にログが表示されます"
#: ../../CONTRIBUTING.md:197
msgid "`docs-test`: this session runs the tests for the guide."
diff --git a/locales/ja/LC_MESSAGES/TRANSLATING.po b/locales/ja/LC_MESSAGES/TRANSLATING.po
index 89094d412..736ac16de 100644
--- a/locales/ja/LC_MESSAGES/TRANSLATING.po
+++ b/locales/ja/LC_MESSAGES/TRANSLATING.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2025-07-12 11:17+0200\n"
+"POT-Creation-Date: 2026-05-22 12:19-0700\n"
"PO-Revision-Date: 2025-04-14 18:12+0000\n"
"Last-Translator: Tetsuo Koyama , 2025\n"
"Language: ja\n"
@@ -20,7 +20,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.17.0\n"
+"Generated-By: Babel 2.18.0\n"
#: ../../TRANSLATING.md:5
msgid "Translation Guide for the Python Packaging Guide"
@@ -162,9 +162,10 @@ msgstr ""
"/python-package-guide/issues) ことから始めてください。"
#: ../../TRANSLATING.md:60
+#, fuzzy
msgid ""
"To generate the translation files for a new language, add the language to"
-" the `LANGUAGES` list in the `noxfile.py` configuration file. "
+" the `LANGUAGES` list in the `conf.py` configuration file. "
"[Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to "
"manage the building of the guide and its translations."
msgstr ""
diff --git a/locales/ja/LC_MESSAGES/documentation.po b/locales/ja/LC_MESSAGES/documentation.po
index 45ea2588f..642125ff3 100644
--- a/locales/ja/LC_MESSAGES/documentation.po
+++ b/locales/ja/LC_MESSAGES/documentation.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-01-04 09:59+0900\n"
+"POT-Creation-Date: 2026-05-22 12:19-0700\n"
"PO-Revision-Date: 2025-04-14 18:12+0000\n"
"Last-Translator: Tetsuo Koyama , 2025\n"
"Language: ja\n"
@@ -20,7 +20,535 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.17.0\n"
+"Generated-By: Babel 2.18.0\n"
+
+#: ../../documentation/glossary.md:7
+msgid "Python packaging glossary"
+msgstr ""
+
+#: ../../documentation/glossary.md:9
+#, fuzzy
+msgid "Core packaging"
+msgstr "あなたのパッケージ"
+
+#: ../../documentation/glossary.md
+msgid "`__init__.py`"
+msgstr ""
+
+#: ../../documentation/glossary.md:13
+msgid ""
+"A special Python file that marks a directory as a Python package. When "
+"Python sees this file, it knows the folder contains importable code. It "
+"can either be empty or contain code that runs when the package is "
+"imported."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "API token"
+msgstr ""
+
+#: ../../documentation/glossary.md:19
+msgid ""
+"A secret key used to authenticate with PyPI or TestPyPI when publishing a"
+" package. You generate one in your account settings and use it in place "
+"of a password. **Treat it like a password and never share it or commit it"
+" to version control**."
+msgstr ""
+
+#: ../../documentation/glossary.md:12
+msgid "Build backend"
+msgstr ""
+
+#: ../../documentation/glossary.md:25
+msgid ""
+"The tool that does the actual work of building your package into "
+"distribution files. In this guide, the build backend is Hatchling. You "
+"specify it in your `pyproject.toml` file under `[build-system]`."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid ""
+"You execute a build by running `hatch build`. Alternatively, you can run"
+" `python -m build`. [Reference: official Python Packaging "
+"documentation](https://packaging.python.org/en/latest/tutorials"
+"/packaging-projects/#choosing-a-build-backend)"
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+#, fuzzy
+msgid "Distribution files"
+msgstr "貢献ファイル"
+
+#: ../../documentation/glossary.md:33
+msgid ""
+"The files you upload to PyPI so others can install your package. There "
+"are two common types: a wheel (`.whl`) and a source distribution "
+"(`.tar.gz`). See also `Wheel (.whl)` and `Source distribution (sdist)`."
+msgstr ""
+
+#: ../../documentation/glossary.md:26
+msgid "Module"
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid ""
+"A single Python file (`.py`) containing code such as functions, classes, "
+"or variables that can be imported. A package is made up of one or more "
+"modules."
+msgstr ""
+
+#: ../../documentation/glossary.md:31
+msgid "`pyproject.toml`"
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid ""
+"The configuration file at the root of your Python package. Written in "
+"TOML format, it stores metadata such as name, version, authors, and "
+"license. It can also configure tools such as Hatch, uv, and pytest. See "
+"also [Make your Python package PyPI ready](../tutorials/pyproject-toml)."
+msgstr ""
+
+#: ../../documentation/glossary.md:37
+#, fuzzy
+msgid "Python package"
+msgstr "あなたのパッケージ"
+
+#: ../../documentation/glossary.md:50
+msgid ""
+"A directory of Python code structured so it can be installed, imported, "
+"and shared with others. A package includes at least an `__init__.py` file"
+" and a `pyproject.toml` file. This is sometimes referred to as a "
+"**regular package**."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid ""
+"Info: You may hear the term **namespaced package** which is not really a "
+"package at all but a container of subpackages. This is out of scope for "
+"this guide. If interested, consult the [Python "
+"documentation](https://docs.python.org/3/glossary.html#term-namespace-"
+"package)."
+msgstr ""
+
+#: ../../documentation/glossary.md:47
+msgid "PyPI / TestPyPI"
+msgstr ""
+
+#: ../../documentation/glossary.md:60
+msgid ""
+"PyPI (the Python Package Index) is the official repository where Python "
+"packages are published and installed from. TestPyPI is a separate "
+"practice environment used for learning and testing publishing workflows. "
+"See [pypi.org](https://pypi.org) and "
+"[test.pypi.org](https://test.pypi.org). See also [Publish your Python "
+"package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:55
+msgid "Source distribution (sdist)"
+msgstr ""
+
+#: ../../documentation/glossary.md:68
+msgid ""
+"One of the two distribution file types for a Python package. The sdist "
+"(`.tar.gz`) contains source code and project files. When someone installs"
+" from an sdist, tools build the package locally first. See also [Publish "
+"your Python package to PyPI](../tutorials/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:61
+msgid "TOML"
+msgstr ""
+
+#: ../../documentation/glossary.md:74
+msgid ""
+"Tom's Obvious Minimal Language, a simple format for configuration files. "
+"TOML organizes data into tables such as `[project]` or `[tool.hatch]` and"
+" arrays. `pyproject.toml` uses TOML."
+msgstr ""
+
+#: ../../documentation/glossary.md:66
+msgid "Trusted publishing"
+msgstr ""
+
+#: ../../documentation/glossary.md:79
+msgid ""
+"A secure way to publish to PyPI using GitHub Actions instead of an API "
+"token. Rather than storing a secret token, you configure PyPI to trust "
+"your repository directly. See also [Setup Trusted Publishing for secure "
+"and automated publishing via GitHub Actions](../tutorials/trusted-"
+"publishing)."
+msgstr ""
+
+#: ../../documentation/glossary.md:72
+msgid "Wheel (.whl)"
+msgstr ""
+
+#: ../../documentation/glossary.md:85
+msgid ""
+"The binary distribution type for a Python package. A wheel is a pre-built"
+" binary format (`.whl`, a ZIP file) that installs directly without a "
+"build step. For many pure Python packages, one wheel can work across "
+"platforms. See also [Publish your Python package to PyPI](../tutorials"
+"/publish-pypi)."
+msgstr ""
+
+#: ../../documentation/glossary.md:92
+#, fuzzy
+msgid "Tools"
+msgstr "Todo"
+
+#: ../../documentation/glossary.md
+#, fuzzy
+msgid "copier"
+msgstr "互換性"
+
+#: ../../documentation/glossary.md:96
+msgid ""
+"A command-line tool for creating new projects from templates. In this "
+"guide, you can use copier with the pyOpenSci package template to set up "
+"structure, configuration, and tooling quickly. See "
+"[copier.readthedocs.io](https://copier.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "coverage.py"
+msgstr ""
+
+#: ../../documentation/glossary.md:102
+msgid ""
+"A tool that measures how much of your code is exercised by tests, often "
+"as a percentage. It shows which lines and branches are covered. See "
+"[coverage.readthedocs.io](https://coverage.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:11
+msgid "Hatch"
+msgstr ""
+
+#: ../../documentation/glossary.md:107
+msgid ""
+"A modern Python packaging and project management tool. In this guide, "
+"Hatch is used to build packages, manage environments, run scripts, and "
+"publish. Configuration lives in `pyproject.toml`. See "
+"[hatch.pypa.io](https://hatch.pypa.io). See also [Get to know "
+"Hatch](../tutorials/get-to-know-hatch)."
+msgstr ""
+
+#: ../../documentation/glossary.md:18
+msgid "Hatchling"
+msgstr ""
+
+#: ../../documentation/glossary.md:114
+msgid ""
+"The build backend used by Hatch. When you run `python -m build` or `hatch"
+" build`, Hatchling reads `pyproject.toml` and creates sdist and wheel "
+"files. See "
+"[hatch.pypa.io/latest/backend](https://hatch.pypa.io/latest/backend/)."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "pip"
+msgstr ""
+
+#: ../../documentation/glossary.md:120
+msgid ""
+"Python's default package installer. You can use it to install packages "
+"from PyPI into an environment with commands such as `pip install package-"
+"name`. See [pip.pypa.io](https://pip.pypa.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:29
+msgid "pytest"
+msgstr ""
+
+#: ../../documentation/glossary.md:125
+msgid ""
+"A widely used Python testing framework for discovering and running tests."
+" In this guide, pytest often runs through Hatch scripts. See "
+"[docs.pytest.org](https://docs.pytest.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:34
+msgid "Ruff"
+msgstr ""
+
+#: ../../documentation/glossary.md:130
+msgid ""
+"A fast Python linter and formatter. It checks style and can automatically"
+" fix many styling issues. See "
+"[docs.astral.sh/ruff](https://docs.astral.sh/ruff)."
+msgstr ""
+
+#: ../../documentation/glossary.md:39
+msgid "Sphinx"
+msgstr ""
+
+#: ../../documentation/glossary.md:135
+msgid ""
+"A documentation generator for Python projects. Sphinx reads docstrings "
+"and documentation files to build a docs site. See [sphinx-"
+"doc.org](https://www.sphinx-doc.org)."
+msgstr ""
+
+#: ../../documentation/glossary.md:44
+msgid "Twine"
+msgstr ""
+
+#: ../../documentation/glossary.md:140
+msgid ""
+"A tool for securely uploading distribution files to PyPI or TestPyPI. See"
+" [twine.readthedocs.io](https://twine.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:48
+msgid "uv"
+msgstr ""
+
+#: ../../documentation/glossary.md:144
+msgid ""
+"A fast Python package and environment manager. In this guide, you can use"
+" uv to manage dependencies and run commands in project environments. See "
+"[docs.astral.sh/uv](https://docs.astral.sh/uv)."
+msgstr ""
+
+#: ../../documentation/glossary.md:149
+msgid "Hatch-specific concepts"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Hatch environment"
+msgstr ""
+
+#: ../../documentation/glossary.md:153
+msgid ""
+"An isolated Python environment managed by Hatch. You can define multiple "
+"environments in `pyproject.toml` for testing, docs, builds, and style "
+"checks, each with its own dependencies and scripts."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+msgid "Script (Hatch)"
+msgstr ""
+
+#: ../../documentation/glossary.md:158
+msgid ""
+"A named command defined inside a Hatch environment in `pyproject.toml`. "
+"Scripts provide shortcuts such as `hatch run build:check` and `hatch run "
+"test:run`."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Task runner"
+msgstr ""
+
+#: ../../documentation/glossary.md:163
+msgid ""
+"A tool that automates repetitive development workflows. Hatch can "
+"function as a task runner by letting you define scripts that run in "
+"specific environments."
+msgstr ""
+
+#: ../../documentation/glossary.md:168
+#, fuzzy
+msgid "Development concepts"
+msgstr "開発ガイド"
+
+#: ../../documentation/glossary.md
+msgid "Code coverage"
+msgstr ""
+
+#: ../../documentation/glossary.md:172
+msgid ""
+"A measure of how much source code executes during tests, usually as a "
+"percentage. High coverage does not guarantee no bugs, but low coverage "
+"can indicate untested areas."
+msgstr ""
+
+#: ../../documentation/glossary.md:5
+#, fuzzy
+msgid "Dependencies"
+msgstr "参考文献"
+
+#: ../../documentation/glossary.md:177
+msgid ""
+"Other Python packages needed for your package to work. Common classes "
+"include required dependencies, optional dependencies, and development "
+"dependencies."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+#, fuzzy
+msgid "Docstring"
+msgstr "ドキュメントビルディング"
+
+#: ../../documentation/glossary.md:182
+msgid ""
+"A string at the top of a function, class, or module that describes "
+"behavior, inputs, and outputs. Docstrings can be used by tools such as "
+"Sphinx to generate API documentation."
+msgstr ""
+
+#: ../../documentation/glossary.md:15
+msgid "End-to-end test"
+msgstr ""
+
+#: ../../documentation/glossary.md:187
+msgid ""
+"A test that simulates a complete user workflow from start to finish. In "
+"scientific packages, tutorials executed during docs builds can serve as "
+"end-to-end tests."
+msgstr ""
+
+#: ../../documentation/glossary.md:20
+msgid "Integration test"
+msgstr ""
+
+#: ../../documentation/glossary.md:192
+msgid ""
+"A test that checks how multiple functions or components work together. "
+"Unlike a unit test, it verifies behavior across a broader workflow."
+msgstr ""
+
+#: ../../documentation/glossary.md:24
+msgid "Linting"
+msgstr ""
+
+#: ../../documentation/glossary.md:196
+msgid ""
+"Automatic checks for style issues, formatting problems, and potential "
+"errors in code."
+msgstr ""
+
+#: ../../documentation/glossary.md:28
+msgid "Unit test"
+msgstr ""
+
+#: ../../documentation/glossary.md:200
+msgid ""
+"A test that checks one function or method in isolation. Unit tests are "
+"fast and help pinpoint where failures occur."
+msgstr ""
+
+#: ../../documentation/glossary.md:32
+msgid "Version specifier / lower bound"
+msgstr ""
+
+#: ../../documentation/glossary.md:204
+msgid ""
+"A constraint on which dependency versions are accepted. For example, "
+"`numpy>=1.24` sets a lower bound so versions older than 1.24 are not "
+"used."
+msgstr ""
+
+#: ../../documentation/glossary.md:209
+msgid "Git / GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "git"
+msgstr ""
+
+#: ../../documentation/glossary.md:213
+msgid "A tool for version control."
+msgstr ""
+
+#: ../../documentation/glossary.md:3
+msgid "GitHub"
+msgstr ""
+
+#: ../../documentation/glossary.md:216
+msgid ""
+"A service providing accounts and organizations to facilitate sharing "
+"repositories."
+msgstr ""
+
+#: ../../documentation/glossary.md:6
+msgid "GitHub Codespace"
+msgstr ""
+
+#: ../../documentation/glossary.md:219
+msgid ""
+"A cloud-based development environment that runs in a browser. See "
+"[github.com/features/codespaces](https://github.com/features/codespaces)."
+msgstr ""
+
+#: ../../documentation/glossary.md:10
+msgid "Scoped commit"
+msgstr ""
+
+#: ../../documentation/glossary.md:223
+msgid ""
+"A git commit that makes one focused change, such as one fix or one "
+"feature update. Scoped commits improve reviewability and history clarity."
+msgstr ""
+
+#: ../../documentation/glossary.md:228
+#, fuzzy
+msgid "Documentation"
+msgstr "ドキュメントの概要"
+
+#: ../../documentation/glossary.md
+#, fuzzy
+msgid "Code of conduct"
+msgstr "あなたの行動規範"
+
+#: ../../documentation/glossary.md:232
+msgid ""
+"A document that sets expectations for how contributors and community "
+"members treat one another in a project."
+msgstr ""
+
+#: ../../documentation/glossary.md:4
+#, fuzzy
+msgid "Contributing guide"
+msgstr "貢献ファイル"
+
+#: ../../documentation/glossary.md:236
+msgid ""
+"A document, often `CONTRIBUTING.md`, that explains how others can "
+"contribute, including setup steps, workflow, and code style."
+msgstr ""
+
+#: ../../documentation/glossary.md:8
+#, fuzzy
+msgid "MyST Markdown"
+msgstr "myST vs Markdown vs rst"
+
+#: ../../documentation/glossary.md:240
+msgid ""
+"Markedly Structured Text, a Markdown flavor that supports Sphinx "
+"directives and roles. It allows Markdown-based docs while keeping Sphinx "
+"features. See [myst-parser.readthedocs.io](https://myst-"
+"parser.readthedocs.io)."
+msgstr ""
+
+#: ../../documentation/glossary.md:14
+#, fuzzy
+msgid "README"
+msgstr "README ファイル"
+
+#: ../../documentation/glossary.md:246
+msgid ""
+"The front page of your package on GitHub and often on PyPI. A good README"
+" explains purpose, installation, usage, and support options."
+msgstr ""
+
+#: ../../documentation/glossary.md:250
+msgid "AI"
+msgstr ""
+
+#: ../../documentation/glossary.md
+msgid "Generative AI / LLM"
+msgstr ""
+
+#: ../../documentation/glossary.md:254
+msgid ""
+"Generative AI systems produce content such as text, code, or images. LLM "
+"stands for Large Language Model, the technology behind tools such as "
+"ChatGPT, GitHub Copilot, and Claude."
+msgstr ""
#: ../../documentation/hosting-tools/intro.md:1
msgid "Tools to Build and Host your Documentation"
@@ -520,6 +1048,7 @@ msgid "[sphinxext.opengraph](https://github.com/sphinx-doc/sphinxext-opengraph)"
msgstr "[sphinxext.opengraph](https://github.com/sphinx-doc/sphinxext-opengraph)"
#: ../../documentation/hosting-tools/website-hosting-optimizing-your-docs.md:42
+#, fuzzy
msgid ""
"OpenGraph is an extension that allows you to add metadata to your "
"documentation content pages. [The OpenGraph protocol allows other "
@@ -527,8 +1056,8 @@ msgid ""
"shared](https://www.freecodecamp.org/news/what-is-open-graph-and-how-"
"can-i-use-it-for-my-website/#heading-what-is-open-graph). This is "
"important for when the pages in your documentation are shared on social "
-"media sites like Twitter and Mastodon and even for shares on tools like "
-"Slack and Discourse."
+"media and even for shares on collaboration platforms like Slack and "
+"Discourse."
msgstr ""
"OpenGraphは、ドキュメントのコンテンツページにメタデータを追加できる拡張機能です。 "
"[OpenGraphプロトコルは、共有されたときに他のウェブサイトがあなたのページのコンテンツの有用なプレビューを提供することを可能にします](https://www.freecodecamp.org/news"
@@ -866,8 +1395,9 @@ msgstr ""
"このドキュメントは、ソフトウェアの各バージョンで何が追加、修正、変更、削除されたかをユーザーが理解するのに役立ちます。"
#: ../../documentation/repository-files/changelog-file.md:11
+#, fuzzy
msgid ""
-"[Keep a CHAGELOG.md](https://keepachangelog.com/en/1.1.0/) is a great, "
+"[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) is a great, "
"simple resource for understanding what a changelog is and how to create a"
" good changelog. It also includes examples of things to avoid."
msgstr ""
@@ -921,11 +1451,12 @@ msgid "What does it include?"
msgstr "その内容は?"
#: ../../documentation/repository-files/changelog-file.md:27
+#, fuzzy
msgid ""
-"The contents of a changelog.md file typically follow a structured format,"
-" detailing the changes introduced in each release. While the exact format"
-" may vary depending on the project's conventions, some common elements "
-"found in changelogs for Python packages include:"
+"The contents of a `CHANGELOG.md` file typically follow a structured "
+"format, detailing the changes introduced in each release. While the exact"
+" format may vary depending on the project's conventions, some common "
+"elements found in changelogs for Python packages include:"
msgstr ""
"changelog.md ファイルの内容は一般的に構造化されたフォーマットに従い、各リリースで導入された変更の詳細を記述します。 "
"正確なフォーマットはプロジェクトの規約によって異なるかもしれませんが、 Python パッケージの changelog "
@@ -1328,10 +1859,11 @@ msgstr ""
"formatting-and-styling-tools), など。"
#: ../../documentation/repository-files/contributing-file.md:53
+#, fuzzy
msgid ""
"This guide should also include information for someone interested in "
"asking questions. Some projects accept questions as GitHub or GitLab "
-"issues. Others use GitHub discussions, Discourse, or even a Discord "
+"issues. Others use GitHub Discussions, Discourse, or even a Discord "
"server."
msgstr ""
"このガイドには、質問することに興味がある人のための情報も含まれているはずです。 "
@@ -1917,11 +2449,31 @@ msgstr ""
"repository/about-citation-files) を使うことで、あなたのパッケージの引用方法をユーザに伝えることができます。 "
"このトピックについては、Zenodoを使ってパッケージのDOIを作成する際に説明します。"
-#: ../../documentation/repository-files/license-files.md:135
+#: ../../documentation/repository-files/license-files.md:136
+msgid ""
+"Additional resources on software citation The Turing Way has excellent "
+"guides on this topic:"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:139
+msgid ""
+"[CITATION.cff files](https://book.the-turing-"
+"way.org/communication/citable/citable-cff) — detailed guide on creating "
+"and maintaining citation files"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:140
+msgid ""
+"[Software citation pathways](https://book.the-turing-way.org/pathways"
+"/pathways-software-citation) — overview of how software citation works in"
+" practice"
+msgstr ""
+
+#: ../../documentation/repository-files/license-files.md:142
msgid "Citation.cff files: Making your software citable"
msgstr ""
-#: ../../documentation/repository-files/license-files.md:137
+#: ../../documentation/repository-files/license-files.md:144
msgid ""
"A `CITATION.cff` file is a machine-readable file that provides citation "
"information for your software package. The \"cff\" stands for \"Citation "
@@ -1929,11 +2481,11 @@ msgid ""
"metadata."
msgstr ""
-#: ../../documentation/repository-files/license-files.md:139
+#: ../../documentation/repository-files/license-files.md:146
msgid "What citation.cff files add to your repository"
msgstr ""
-#: ../../documentation/repository-files/license-files.md:141
+#: ../../documentation/repository-files/license-files.md:148
msgid ""
"When you add a `CITATION.cff` file to your repository, GitHub "
"automatically detects it and displays a \"Cite this repository\" button. "
@@ -1943,11 +2495,11 @@ msgid ""
"citation formats for users."
msgstr ""
-#: ../../documentation/repository-files/license-files.md:143
+#: ../../documentation/repository-files/license-files.md:150
msgid "How dates are tracked in citation.cff files"
msgstr ""
-#: ../../documentation/repository-files/license-files.md:145
+#: ../../documentation/repository-files/license-files.md:152
msgid ""
"The citation file tracks important dates for your software. The `date-"
"released` field shows when the current version was released. The `date-"
@@ -1955,17 +2507,17 @@ msgid ""
"also include a `version` field with the specific version number."
msgstr ""
-#: ../../documentation/repository-files/license-files.md:147
+#: ../../documentation/repository-files/license-files.md:154
msgid ""
"You should update these dates with each new release so people cite the "
"correct version of your software."
msgstr ""
-#: ../../documentation/repository-files/license-files.md:149
+#: ../../documentation/repository-files/license-files.md:156
msgid "Integration with Zenodo"
msgstr ""
-#: ../../documentation/repository-files/license-files.md:151
+#: ../../documentation/repository-files/license-files.md:158
msgid ""
"Citation.cff files work well with Zenodo, which is a popular place to "
"store research software and get DOIs. When you create a Zenodo release, "
@@ -1976,11 +2528,11 @@ msgid ""
"citation information."
msgstr ""
-#: ../../documentation/repository-files/license-files.md:154
+#: ../../documentation/repository-files/license-files.md:161
msgid "Here's a basic example of what a `CITATION.cff` file might look like:"
msgstr ""
-#: ../../documentation/repository-files/license-files.md:170
+#: ../../documentation/repository-files/license-files.md:177
msgid "References"
msgstr "参考文献"
@@ -2385,6 +2937,25 @@ msgstr ""
"[Art of README - Kira (@hackergrrl)](https://github.com/hackergrrl/art-"
"of-readme)"
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+#, python-format
+msgid ""
+"[Standard Readme - Richard Littauer](https://github.com/RichardLitt"
+"/standard-readme) [](https://github.com/RichardLitt/standard-readme)"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:178
+msgid "standard-readme compliant"
+msgstr ""
+
+#: ../../documentation/repository-files/readme-file-best-practices.md:179
+msgid ""
+"[Standard Readme pre-commit hooks](https://github.com/tkoyama010"
+"/standard-readme-pre-commit)"
+msgstr ""
+
#: ../../documentation/write-user-documentation/create-package-tutorials.md:1
msgid "Create tutorials in your Python package documentation"
msgstr "Pythonパッケージのドキュメントにチュートリアルを作成する"
diff --git a/locales/ja/LC_MESSAGES/index.po b/locales/ja/LC_MESSAGES/index.po
index b6fe51d29..0da6c7850 100644
--- a/locales/ja/LC_MESSAGES/index.po
+++ b/locales/ja/LC_MESSAGES/index.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-01-04 09:59+0900\n"
+"POT-Creation-Date: 2026-05-22 12:19-0700\n"
"PO-Revision-Date: 2025-04-14 18:12+0000\n"
"Last-Translator: Tetsuo Koyama , 2025\n"
"Language: ja\n"
@@ -20,36 +20,45 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.17.0\n"
+"Generated-By: Babel 2.18.0\n"
-#: ../../index.md:284
+#: ../../index.md:257
msgid "Tutorials"
msgstr "チュートリアル"
-#: ../../index.md:291
+#: ../../index.md:264
msgid "Packaging"
msgstr "パッケージング"
-#: ../../index.md:146 ../../index.md:299
+#: ../../index.md:135 ../../index.md:272
msgid "Documentation"
msgstr "ドキュメンテーション"
-#: ../../index.md:194 ../../index.md:307
+#: ../../index.md:175 ../../index.md:280
msgid "Tests"
msgstr "テスト"
-#: ../../index.md:307
+#: ../../index.md:280
msgid "Testing"
msgstr "テスト"
-#: ../../index.md:315
+#: ../../index.md:288
msgid "Maintain"
-msgstr ""
+msgstr "保守"
-#: ../../index.md:315
+#: ../../index.md:288
msgid "Continuous Integration"
msgstr "継続的インテグレーション"
+#: ../../index.md:296
+msgid "Glossary"
+msgstr "用語集"
+
+#: ../../index.md:296
+#, fuzzy
+msgid "Reference"
+msgstr "✿ リファレンスガイド ✿"
+
#: ../../index.md:1
msgid "pyOpenSci Python Package Guide"
msgstr "pyOpenSci Pythonパッケージガイド"
@@ -61,12 +70,13 @@ msgid ""
msgstr "私たちは、科学者がオープンサイエンスのワークフローを作成するために必要なPythonツールをサポートしています。"
#: ../../index.md:20
+#, fuzzy
msgid ""
" "
"[](https://github.com/pyopensci/contributing-guide) "
+"guide?style=social)](https://github.com/pyopensci/python-package-guide) "
"[](https://zenodo.org/badge/latestdoi/556814582)"
msgstr ""
" で今後のチュートリアルの開発を見守ったりしてください。"
-#: ../../index.md:70
+#: ../../index.md:68
msgid "✿ Create a Package Tutorials ✿"
msgstr "✿ チュートリアルパッケージの作成 ✿"
-#: ../../index.md:74
+#: ../../index.md:72
msgid "[What is a Python package?](/tutorials/intro)"
msgstr "[Pythonパッケージとは何か?](/tutorials/intro)"
-#: ../../index.md:75
+#: ../../index.md:73
#, fuzzy
msgid "[Create a Python package](/tutorials/create-python-package)"
msgstr "[コードをインストール可能にする](/tutorials/create-python-package)"
-#: ../../index.md:76
+#: ../../index.md:74
msgid "[Publish your package to (test) PyPI](/tutorials/publish-pypi)"
msgstr "[パッケージを(テスト用の)PyPIに公開する](/tutorials/publish-pypi)"
-#: ../../index.md:77
+#: ../../index.md:75
msgid "[Publish your package to conda-forge](/tutorials/publish-conda-forge)"
msgstr "[パッケージを conda-forge に公開する](/tutorials/publish-conda-forge)"
-#: ../../index.md:82
+#: ../../index.md:78
msgid "✿ Package Metadata Tutorials ✿"
msgstr "✿パッケージメタデータチュートリアル✿"
-#: ../../index.md:86
+#: ../../index.md:82
msgid "[How to add a README file](/tutorials/add-readme)"
msgstr "[READMEファイルの追加方法](/tutorials/add-readme)"
-#: ../../index.md:87
+#: ../../index.md:83
msgid ""
"[How to add metadata to a pyproject.toml file for publication to "
"PyPI.](/tutorials/pyproject-toml.md)"
@@ -213,27 +223,32 @@ msgstr ""
"[PyPIに公開するためにpyproject.tomlファイルにメタデータを追加する方法](/tutorials/pyproject-"
"toml.md)"
-#: ../../index.md:92
+#: ../../index.md:86
msgid "✿ Packaging Tool Tutorials ✿"
msgstr "✿パッケージングツールのチュートリアル✿"
-#: ../../index.md:96
+#: ../../index.md:90
msgid "[Introduction to Hatch](/tutorials/get-to-know-hatch)"
msgstr "[Hatch入門](/tutorials/get-to-know-hatch)"
-#: ../../index.md:101
+#: ../../index.md:91
+#, fuzzy
+msgid "[Run Python scripts using Hatch](/tutorials/run-python-scripts-hatch)"
+msgstr "[コードをインストール可能にする](/tutorials/create-python-package)"
+
+#: ../../index.md:94
msgid "✿ Reference Guides ✿"
msgstr "✿ リファレンスガイド ✿"
-#: ../../index.md:105
+#: ../../index.md:98
msgid "[Command Line Reference Guide](/tutorials/command-line-reference)"
msgstr "[コマンドラインリファレンスガイド](/tutorials/command-line-reference)"
-#: ../../index.md:109
+#: ../../index.md:102
msgid "Python Packaging for Scientists"
msgstr "科学者のためのPythonパッケージング"
-#: ../../index.md:111
+#: ../../index.md:104
msgid ""
"Learn about Python packaging best practices. You will also get to know "
"the the vibrant ecosystem of packaging tools that are available to help "
@@ -242,15 +257,15 @@ msgstr ""
"Python のパッケージングのベストプラクティスについて学びます。 また、Python "
"のパッケージングを支援するために利用可能なパッケージングツールの活発なエコシステムを知ることができます。"
-#: ../../index.md:120
+#: ../../index.md:111
msgid "✨ Create your package ✨"
msgstr "✨パッケージの作成✨"
-#: ../../index.md:124
+#: ../../index.md:115
msgid "[Package file structure](/package-structure-code/python-package-structure)"
msgstr "[パッケージファイル構造](/package-structure-code/python-package-structure)"
-#: ../../index.md:125
+#: ../../index.md:116
msgid ""
"[Package metadata / pyproject.toml](package-structure-code/pyproject-"
"toml-python-package-metadata.md)"
@@ -258,7 +273,7 @@ msgstr ""
"[パッケージメタデータ / pyproject.toml](package-structure-code/pyproject-toml-"
"python-package-metadata.md)"
-#: ../../index.md:126
+#: ../../index.md:117
msgid ""
"[Build your package (sdist / wheel)](package-structure-code/python-"
"package-distribution-files-sdist-wheel.md)"
@@ -266,11 +281,11 @@ msgstr ""
"[パッケージのビルド (sdist / wheel)](package-structure-code/python-package-"
"distribution-files-sdist-wheel.md)"
-#: ../../index.md:127
+#: ../../index.md:118
msgid "[Declare dependencies](package-structure-code/declare-dependencies.md)"
msgstr "[依存関係の宣言](package-structure-code/declare-dependencies.md)"
-#: ../../index.md:128
+#: ../../index.md:119
msgid ""
"[Navigate the packaging tool ecosystem](package-structure-code/python-"
"package-build-tools.md)"
@@ -278,7 +293,7 @@ msgstr ""
"[パッケージングツールのエコシステムをナビゲートする](package-structure-code/python-package-build-"
"tools.md)"
-#: ../../index.md:129
+#: ../../index.md:120
msgid ""
"[Non pure Python builds](package-structure-code/complex-python-package-"
"builds.md)"
@@ -286,23 +301,23 @@ msgstr ""
"[純粋な Python 以外のビルド](package-structure-code/complex-python-package-"
"builds.md)"
-#: ../../index.md:134
+#: ../../index.md:123
msgid "✨ Publish your package ✨"
msgstr "✨パッケージを公開する✨"
-#: ../../index.md:138
+#: ../../index.md:127
msgid ""
"Gain a better understanding of the Python packaging ecosystem Learn about"
" best practices for:"
msgstr "Pythonのパッケージングエコシステムをより深く理解するためのベストプラクティスを学ぶ:"
-#: ../../index.md:141
+#: ../../index.md:130
msgid ""
"[Package versioning & release](/package-structure-code/python-package-"
"versions.md)"
msgstr "[パッケージのバージョン管理とリリース](/package-structure-code/python-package-versions.md)"
-#: ../../index.md:142
+#: ../../index.md:131
msgid ""
"[Publish to PyPI & Conda-forge](/package-structure-code/publish-python-"
"package-pypi-conda.md)"
@@ -310,23 +325,23 @@ msgstr ""
"[PyPIとConda-forgeへの公開](/package-structure-code/publish-python-package-"
"pypi-conda.md)"
-#: ../../index.md:155
+#: ../../index.md:142
msgid "✨ Write The Docs ✨"
msgstr "✨ドキュメントを書く✨"
-#: ../../index.md:158
+#: ../../index.md:145
msgid ""
"[Create documentation for your users](/documentation/write-user-"
"documentation/intro)"
msgstr "[ユーザーのための文書を作成する](/documentation/write-user-documentation/intro)"
-#: ../../index.md:159
+#: ../../index.md:146
msgid ""
"[Core files to include in your package repository](/documentation"
"/repository-files/intro)"
msgstr "[パッケージリポジトリに含めるコアファイル](/documentation/repository-files/intro)"
-#: ../../index.md:160
+#: ../../index.md:147
msgid ""
"[Write tutorials to show how your package is used](/documentation/write-"
"user-documentation/create-package-tutorials)"
@@ -334,27 +349,27 @@ msgstr ""
"[パッケージがどのように使われるかを示すチュートリアルを書く](/documentation/write-user-documentation"
"/create-package-tutorials)"
-#: ../../index.md:165
+#: ../../index.md:150
msgid "✨ Developer Docs ✨"
msgstr "✨開発者向けドキュメント✨"
-#: ../../index.md:168
+#: ../../index.md:153
msgid ""
"[Create documentation for collaborating developers](/documentation"
"/repository-files/contributing-file)"
msgstr "[共同開発者のためのドキュメントの作成](/documentation/repository-files/contributing-file)"
-#: ../../index.md:169
+#: ../../index.md:154
msgid ""
"[Write a development guide](/documentation/repository-files/development-"
"guide)"
msgstr "[開発ガイドを書く](/documentation/repository-files/development-guide)"
-#: ../../index.md:174
+#: ../../index.md:157
msgid "✨ Document For A Community ✨"
msgstr "✨コミュニティのためのドキュメント✨"
-#: ../../index.md:177
+#: ../../index.md:160
msgid ""
"[Writing a README file](/documentation/repository-files/readme-file-best-"
"practices)"
@@ -362,29 +377,29 @@ msgstr ""
"[READMEファイルの書き方](/documentation/repository-files/readme-file-best-"
"practices)"
-#: ../../index.md:178
+#: ../../index.md:161
msgid ""
"[Set norms with a Code of Conduct](/documentation/repository-files/code-"
"of-conduct-file)"
msgstr "[行動規範で規範を定める](/documentation/repository-files/code-of-conduct-file)"
-#: ../../index.md:179
+#: ../../index.md:162
msgid "[License your package](/documentation/repository-files/license-files)"
msgstr "[パッケージのライセンス](/documentation/repository-files/license-files)"
-#: ../../index.md:184
+#: ../../index.md:165
msgid "✨ Publish Your Docs ✨"
msgstr "✨ドキュメントを公開する✨"
-#: ../../index.md:187
+#: ../../index.md:168
msgid "[How to publish your docs](/documentation/hosting-tools/intro)"
msgstr "[ドキュメントを公開する方法](/documentation/hosting-tools/intro)"
-#: ../../index.md:188
+#: ../../index.md:169
msgid "[Using Sphinx](/documentation/hosting-tools/intro)"
msgstr "[Sphinxを使う](/documentation/hosting-tools/intro)"
-#: ../../index.md:189
+#: ../../index.md:170
msgid ""
"[Markdown, MyST, and ReST](/documentation/hosting-tools/myst-markdown-"
"rst-doc-syntax)"
@@ -392,7 +407,7 @@ msgstr ""
"[Markdown、MyST、およびReST](/documentation/hosting-tools/myst-markdown-rst-"
"doc-syntax)"
-#: ../../index.md:190
+#: ../../index.md:171
msgid ""
"[Host your docs on Read The Docs or GitHub Pages](/documentation/hosting-"
"tools/publish-documentation-online)"
@@ -400,79 +415,71 @@ msgstr ""
"[Read The Docs または GitHub Pages でドキュメントをホストする](/documentation/hosting-"
"tools/publish-documentation-online)"
-#: ../../index.md:203
+#: ../../index.md:181
msgid "✨ Tests for your Python package ✨"
msgstr "✨Pythonパッケージのテスト✨"
-#: ../../index.md:206
+#: ../../index.md:184
msgid "[Intro to testing](tests/index.md)"
msgstr "[テスト入門](tests/index.md)"
-#: ../../index.md:207
+#: ../../index.md:185
msgid "[Write tests](tests/write-tests)"
msgstr "[テストを書く](tests/write-tests)"
-#: ../../index.md:208
+#: ../../index.md:186
msgid "[Types of tests](tests/test-types)"
msgstr "[テストの種類](tests/test-types)"
-#: ../../index.md:213
+#: ../../index.md:189
msgid "✨ Run your tests ✨"
msgstr "✨テストの実行✨"
-#: ../../index.md:216
-msgid "[Run tests locally](tests/run-tests)"
+#: ../../index.md:192
+#, fuzzy
+msgid "[Run tests locally with Hatch](tests/run-tests)"
+msgstr "[ローカルでテストを実行する](tests/run-tests)"
+
+#: ../../index.md:193
+#, fuzzy
+msgid "[Run tests with nox](tests/run-tests-nox)"
msgstr "[ローカルでテストを実行する](tests/run-tests)"
-#: ../../index.md:217
+#: ../../index.md:194
msgid "[Run tests in CI](tests/tests-ci)"
msgstr "[CIでテストを実行する](tests/tests-ci)"
-#: ../../index.md:221
+#: ../../index.md:198
msgid "Contributing"
msgstr "貢献"
-#: ../../index.md:230
+#: ../../index.md:205
msgid "✨ Code style & Format ✨"
msgstr "✨コードスタイルとフォーマット✨"
-#: ../../index.md:233
+#: ../../index.md:208
msgid "[Code style](package-structure-code/code-style-linting-format.md)"
msgstr "[コードスタイル](package-structure-code/code-style-linting-format.md)"
-#: ../../index.md:238
+#: ../../index.md:211
msgid "✨ Want to contribute? ✨"
msgstr "✨貢献したいですか? ✨"
-#: ../../index.md:243
+#: ../../index.md:216
msgid ""
"We welcome contributions to this guide. Learn more about how you can "
"contribute."
msgstr "このガイドへのご貢献をお待ちしております。貢献方法についてはこちらをご覧ください。"
-#: ../../index.md:248
-msgid ""
-"xkcd comic showing a stick figure on the ground and one in the air. The "
-"one on the ground is saying. `You're flying! how?` The person in the air"
-" replies `Python!` Below is a 3 rectangle comic with the following text "
-"in each box. Box 1 - I learned it last night. Everything is so simple. "
-"Hello world is just print hello world. Box 2 - the person on the ground "
-"says - come join us programming is fun again. It's a whole new world. But"
-" how are you flying? box 3 - the person flying says - i just typed import"
-" antigravity. I also sampled everything in the medicine cabinet. But i "
-"think this is the python. The person on the ground is saying - that's it?"
+#: ../../index.md:221
+msgid "A group of people building a pyramid with blocks"
msgstr ""
-"xkcdの漫画で、地面に置かれた棒人間と空中にある棒人間が描かれている。地上にいる人が言っている。 `あなたは飛んでいる!どうやって?` "
-"空中にいる人は `Python!` と答える。以下は3つの長方形のマンガで、各ボックスに次のテキストが入っている。ボックス1 - "
-"昨夜学んだ。すべてがとてもシンプルだ。Hello worldはprint hello worldだけ。ボックス2 - "
-"地上にいる人が言う。まったく新しい世界だ。でもどうやって飛んでるの?ボックス3 - 飛んでいる人はこう言う。- "
-"`反重力をインポートしました。薬箱の中のものも全部試しました。でもこれがpythonだと思う。地上の人はこう言っている。- これで終わり?"
-#: ../../index.md:254
+#: ../../index.md:227
msgid "A community-created guidebook"
msgstr "コミュニティが作るガイドブック"
-#: ../../index.md:256
+#: ../../index.md:229
msgid ""
"Every page in this guidebook goes through an extensive community review "
"process. To ensure our guidebook is both beginner-friendly and accurate, "
@@ -482,41 +489,41 @@ msgstr ""
"このガイドブックのすべてのページは、コミュニティの広範なレビュープロセスを経ています。 "
"このガイドブックが初心者にやさしく、正確であることを保証するために、私たちは幅広いスキルと専門知識を持つ多様なpythonistaや科学者からのレビューを奨励しています。"
-#: ../../index.md:259
+#: ../../index.md:232
msgid "View guidebook contributors"
msgstr "ガイドブックの貢献者を見る"
-#: ../../index.md:267
+#: ../../index.md:240
msgid "Who this guidebook is for"
msgstr "このガイドブックの対象者"
-#: ../../index.md:269
+#: ../../index.md:242
msgid ""
"This guidebook is for anyone interested in learning more about Python "
"packaging. It is beginner-friendly and will provide:"
msgstr "このガイドブックはPythonのパッケージングについてもっと学びたいと思っている人のためのものです。 初心者に優しく、以下を提供します:"
-#: ../../index.md:271
+#: ../../index.md:244
msgid "Beginning-to-end guidance on creating a Python package."
msgstr "Pythonパッケージの作成に関する初歩から終わりまでのガイダンス。"
-#: ../../index.md:272
+#: ../../index.md:245
msgid ""
"Resources to help you navigate the Python packaging ecosystem of tools "
"and approaches to packaging."
msgstr "Python のパッケージングエコシステムをナビゲートするのに役立つリソースです。"
-#: ../../index.md:273
+#: ../../index.md:246
msgid ""
"A curated list of resources to help you get your package into documented,"
" usable and maintainable shape."
msgstr "あなたのパッケージが文書化され、使用可能で保守可能な形になるのを助けるリソースの厳選されたリストです。"
-#: ../../index.md:275
+#: ../../index.md:248
msgid "Where this guide is headed"
msgstr "このガイドの方向性"
-#: ../../index.md:277
+#: ../../index.md:250
msgid ""
"If you have ideas of things you'd like to see here clarified in this "
"guide, [we invite you to open an issue on "
@@ -526,16 +533,17 @@ msgstr ""
"[GitHubにissueを開いてください。](https://github.com/pyOpenSci/python-package-"
"guide/issues) 。"
-#: ../../index.md:280
+#: ../../index.md:253
+#, fuzzy
msgid ""
"If you have questions about our peer review process or packaging in "
-"general, you are welcome to use our [pyOpenSci Discourse "
-"forum](https://pyopensci.discourse.group/)."
+"general, you are welcome to use our [GitHub "
+"Discussions](https://github.com/orgs/pyOpenSci/discussions)."
msgstr ""
"レビュープロセスやパッケージング全般について質問がある場合は、 [pyOpenSci Discourse "
"forum](https://pyopensci.discourse.group/) をご利用ください。"
-#: ../../index.md:282
+#: ../../index.md:255
msgid ""
"This living Python packaging guide is updated as tools and best practices"
" evolve in the Python packaging ecosystem. We will be adding new content "
@@ -555,3 +563,35 @@ msgstr ""
#~ "*私たちはこのセクションに積極的に取り組んでいます。 "
#~ "[開発のフォローはこちら](https://github.com/pyOpenSci/python-package-"
#~ "guide)*"
+
+#~ msgid ""
+#~ "xkcd comic showing a stick figure "
+#~ "on the ground and one in the "
+#~ "air. The one on the ground is "
+#~ "saying. `You're flying! how?` The "
+#~ "person in the air replies `Python!` "
+#~ "Below is a 3 rectangle comic with"
+#~ " the following text in each box. "
+#~ "Box 1 - I learned it last "
+#~ "night. Everything is so simple. Hello"
+#~ " world is just print hello world. "
+#~ "Box 2 - the person on the "
+#~ "ground says - come join us "
+#~ "programming is fun again. It's a "
+#~ "whole new world. But how are you"
+#~ " flying? box 3 - the person "
+#~ "flying says - i just typed import"
+#~ " antigravity. I also sampled everything "
+#~ "in the medicine cabinet. But i "
+#~ "think this is the python. The "
+#~ "person on the ground is saying -"
+#~ " that's it?"
+#~ msgstr ""
+#~ "xkcdの漫画で、地面に置かれた棒人間と空中にある棒人間が描かれている。地上にいる人が言っている。 "
+#~ "`あなたは飛んでいる!どうやって?` 空中にいる人は `Python!` "
+#~ "と答える。以下は3つの長方形のマンガで、各ボックスに次のテキストが入っている。ボックス1 - "
+#~ "昨夜学んだ。すべてがとてもシンプルだ。Hello worldはprint hello "
+#~ "worldだけ。ボックス2 - 地上にいる人が言う。まったく新しい世界だ。でもどうやって飛んでるの?ボックス3"
+#~ " - 飛んでいる人はこう言う。- "
+#~ "`反重力をインポートしました。薬箱の中のものも全部試しました。でもこれがpythonだと思う。地上の人はこう言っている。- "
+#~ "これで終わり?"
diff --git a/locales/ja/LC_MESSAGES/package-structure-code.po b/locales/ja/LC_MESSAGES/package-structure-code.po
index 071d9423d..79f923f20 100644
--- a/locales/ja/LC_MESSAGES/package-structure-code.po
+++ b/locales/ja/LC_MESSAGES/package-structure-code.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-01-04 09:59+0900\n"
+"POT-Creation-Date: 2026-05-22 12:19-0700\n"
"PO-Revision-Date: 2025-04-14 18:12+0000\n"
"Last-Translator: Tetsuo Koyama , 2025\n"
"Language: ja\n"
@@ -20,7 +20,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.17.0\n"
+"Generated-By: Babel 2.18.0\n"
#: ../../package-structure-code/code-style-linting-format.md:1
msgid "Python Package Code Style, Format and Linters"
@@ -975,11 +975,11 @@ msgstr "再帰的依存関係"
#: ../../package-structure-code/declare-dependencies.md:32
msgid ""
-"Specifying dependencies in the [project.dependency] array of your "
+"Specifying dependencies in the `project.dependencies` array of your "
"`pyproject.toml` file ensures that libraries needed to run your package "
"are correctly installed into a user's environment. For instance, if your "
"package requires Pandas to run properly, and you add Pandas to the "
-"`project.dependency` array, Pandas will be installed into the users' "
+"`project.dependencies` array, Pandas will be installed into the users' "
"environment when they install your package using uv, pip, or conda."
msgstr ""
@@ -989,7 +989,7 @@ msgid ""
"package. You can set up instructions for running specific workflows, such"
" as tests, linting, and even typing, that automatically install groups of"
" development dependencies. These dependencies can be stored in arrays "
-"(lists of dependencies) within a `[development-group]` table."
+"(lists of dependencies) within a `[dependency-groups]` table."
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:55
@@ -1007,7 +1007,7 @@ msgstr ""
msgid ""
"**Required dependencies:** These are dependencies that need to be "
"installed for your package to work correctly in a user's environment. You"
-" add these dependencies to the `[project.dependencies]` table in your "
+" add these dependencies to the `project.dependencies` table in your "
"pyproject.toml file."
msgstr ""
@@ -1015,7 +1015,7 @@ msgstr ""
msgid ""
"**Feature Dependencies:** These are dependencies that are required if a "
"user wants to access additional functionality (that is not core) to your "
-"package. Store these in the `[project.optional.dependencies]` table or "
+"package. Store these in the `[project.optional-dependencies]` table of "
"your pyproject.toml file."
msgstr ""
@@ -1024,7 +1024,7 @@ msgid ""
"**Development Dependencies:** These dependencies are required if someone "
"wants to develop or work on your package. These include instance linters,"
" testing tools like pytest and mypy are examples of development "
-"dependencies. Store these in the `[project.dependency.groups]` table or "
+"dependencies. Store these in the `[dependency-groups]` table of "
"your pyproject.toml file."
msgstr ""
@@ -1080,7 +1080,7 @@ msgid "**Add a required dependency:**"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:110
-msgid "Will add numpy as a dependency to your `project.dependency` array:"
+msgid "Will add numpy as a dependency to your `project.dependencies` array:"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:121
@@ -1117,7 +1117,7 @@ msgid ""
"users as needed. Optional dependencies add specific features to your "
"package that not all users need. For example, if your package has an "
"optional interactive plotting feature that uses Bokeh, you would list "
-"Bokeh as an `[optional.dependency]`. Users who want interactive plotting "
+"Bokeh under `[project.optional-dependencies]`. Users who want interactive plotting "
"will install it. Users who don't need plotting don't have to install it."
msgstr ""
@@ -1135,7 +1135,7 @@ msgstr ""
#: ../../package-structure-code/declare-dependencies.md
#, fuzzy
-msgid "How to Add optional.dependencies using UV"
+msgid "How to add optional dependencies using UV"
msgstr "オプションの依存関係"
#: ../../package-structure-code/declare-dependencies.md:164
@@ -1191,7 +1191,7 @@ msgstr "オプションの依存グループを作成する"
#: ../../package-structure-code/declare-dependencies.md:199
msgid ""
-"`[development-groups]` is a newer specification introduced by PEP 735. "
+"`[dependency-groups]` is a newer specification introduced by PEP 735. "
"They are intended to organize development dependencies and are "
"intentionally separate from `[project.optional-dependencies]`, which can"
" be installed into a user's environment."
@@ -1206,7 +1206,7 @@ msgstr "依存関係はどのように宣言するのか?"
#, fuzzy
msgid ""
"You declare development dependencies in your **pyproject.toml** file "
-"within a `[development-groups]` table."
+"within a `[dependency-groups]` table."
msgstr "**pyproject.toml** ファイルでオプションの依存関係を宣言します:"
#: ../../package-structure-code/declare-dependencies.md:209
@@ -1216,11 +1216,11 @@ msgid ""
msgstr ""
#: ../../package-structure-code/declare-dependencies.md
-msgid "How to Add [development.group] using UV"
+msgid "How to Add [dependency-groups] using UV"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:225
-msgid "**Add a development group dependency:**"
+msgid "**Add a development dependency group:**"
msgstr ""
#: ../../package-structure-code/declare-dependencies.md:232
@@ -1371,7 +1371,7 @@ msgstr ""
#: ../../package-structure-code/declare-dependencies.md:299
#, fuzzy
-msgid "**Install development groups:**"
+msgid "**Install dependency groups:**"
msgstr "依存グループをインストールする"
#: ../../package-structure-code/declare-dependencies.md
@@ -1669,51 +1669,51 @@ msgid ""
"different specifiers"
msgstr "依存関係を指定する理由 依存関係を指定する方法 異なる指定子を使用する場合"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "Intro"
msgstr "イントロ"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "Python package structure"
msgstr "Pythonパッケージ構造"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "pyproject.toml Package Metadata"
msgstr "pyproject.toml パッケージのメタデータ"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "Declare dependencies"
msgstr "依存関係の宣言"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "Package Build Tools"
msgstr "パッケージビルドツール"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "Build Your Package"
msgstr "パッケージをビルドする"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "Complex Builds"
msgstr "複雑なビルド"
-#: ../../package-structure-code/intro.md:183
+#: ../../package-structure-code/intro.md:163
msgid "Create & Build Your Package"
msgstr "パッケージを作成 & ビルドする"
-#: ../../package-structure-code/intro.md:197
+#: ../../package-structure-code/intro.md:177
msgid "Publish with Conda / PyPI"
msgstr "Conda / PyPIで公開する"
-#: ../../package-structure-code/intro.md:197
+#: ../../package-structure-code/intro.md:177
msgid "Package versions"
msgstr "パッケージバージョン"
-#: ../../package-structure-code/intro.md:197
+#: ../../package-structure-code/intro.md:177
msgid "Code style"
msgstr "コードスタイル"
-#: ../../package-structure-code/intro.md:197
+#: ../../package-structure-code/intro.md:177
msgid "Publish your package"
msgstr "パッケージを公開する"
@@ -1729,62 +1729,113 @@ msgid ""
" and conda-forge."
msgstr ""
-#: ../../package-structure-code/intro.md:44
+#: ../../package-structure-code/intro.md:9
+#, fuzzy
+msgid "New to Python packaging?"
+msgstr "Pythonパッケージングツール"
+
+#: ../../package-structure-code/intro.md:13
+msgid "**Start with our step-by-step tutorials:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:15
+msgid "Follow along as we create a package from scratch"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:16
+msgid "Learn by doing with guided examples"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:17
+#, fuzzy
+msgid "Perfect for your first package"
+msgstr "Pythonパッケージのバージョンを管理するツール"
+
+#: ../../package-structure-code/intro.md:19
+msgid "Start the tutorial series"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:27
+msgid "Already have code to package?"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:30
+msgid "**Jump into the reference guides:**"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:32
+#, fuzzy
+msgid "Learn about package structure and metadata"
+msgstr "Pythonパッケージ構造"
+
+#: ../../package-structure-code/intro.md:33
+msgid "Compare build tools and choose what's right for you"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:34
+msgid "Understand the publishing process"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:36
+msgid "Start with the cards below ↓"
+msgstr ""
+
+#: ../../package-structure-code/intro.md:40
msgid "How this content is developed"
msgstr "このコンテンツの開発方法"
-#: ../../package-structure-code/intro.md:47
+#: ../../package-structure-code/intro.md:43
msgid ""
"All of the content in this guide has been vetted by community members, "
"including maintainers and developers of the core packaging tools."
msgstr "このガイドの内容はすべて、コアパッケージングツールのメンテナや開発者を含むコミュニティメンバーによって吟味されています。"
-#: ../../package-structure-code/intro.md:50
+#: ../../package-structure-code/intro.md:46
#, fuzzy
msgid "What you'll learn"
msgstr "ここで学べること"
-#: ../../package-structure-code/intro.md:52
+#: ../../package-structure-code/intro.md:48
msgid "In this section, you'll learn how to:"
msgstr ""
-#: ../../package-structure-code/intro.md:54
+#: ../../package-structure-code/intro.md:50
msgid ""
"**Structure your package** - Choose between src and flat layouts, "
"organize tests and documentation"
msgstr ""
-#: ../../package-structure-code/intro.md:55
+#: ../../package-structure-code/intro.md:51
msgid ""
"**Configure metadata** - Set up `pyproject.toml` with project "
"information, dependencies, and versioning"
msgstr ""
-#: ../../package-structure-code/intro.md:56
+#: ../../package-structure-code/intro.md:52
msgid ""
"**Choose build tools** - Compare Hatch, PDM, Poetry, and setuptools to "
"find the right fit"
msgstr ""
-#: ../../package-structure-code/intro.md:57
+#: ../../package-structure-code/intro.md:53
msgid ""
"**Build distributions** - Create sdist and wheel files ready for "
"publication"
msgstr ""
-#: ../../package-structure-code/intro.md:58
+#: ../../package-structure-code/intro.md:54
msgid ""
"**Publish your package** - Make your package available on PyPI and "
"optionally conda-forge"
msgstr ""
-#: ../../package-structure-code/intro.md:59
+#: ../../package-structure-code/intro.md:55
msgid ""
"**Maintain code quality** - Set up linters and formatters to keep your "
"code consistent"
msgstr ""
-#: ../../package-structure-code/intro.md:61
+#: ../../package-structure-code/intro.md:57
#, fuzzy
msgid ""
"Our recommendations align with current [Python packaging "
@@ -1796,17 +1847,17 @@ msgstr ""
"[Pythonコミュニティ](https://packaging.python.org/en/latest/) と "
"[科学コミュニティ](https://scientific-python.org/specs/) に合わせることも試みています。"
-#: ../../package-structure-code/intro.md:63
+#: ../../package-structure-code/intro.md:59
#, fuzzy
msgid "Package setup"
msgstr "パッケージバージョン"
-#: ../../package-structure-code/intro.md:72
+#: ../../package-structure-code/intro.md:66
#, fuzzy
msgid "✨ Package file structure ✨"
msgstr "✨ 1. パッケージのファイル構成 ✨"
-#: ../../package-structure-code/intro.md:74
+#: ../../package-structure-code/intro.md:68
msgid ""
"Learn how to organize your package files using [src or flat layouts"
"](package-source-layout). This page helps you decide on a package "
@@ -1815,12 +1866,12 @@ msgid ""
"layout)."
msgstr ""
-#: ../../package-structure-code/intro.md:79
+#: ../../package-structure-code/intro.md:71
#, fuzzy
msgid "✨ Add metadata ✨"
msgstr "✨ 4. メタデータを追加する ✨"
-#: ../../package-structure-code/intro.md:81
+#: ../../package-structure-code/intro.md:73
#, fuzzy
msgid ""
"Learn how to add [project metadata](pyproject-toml-python-package-"
@@ -1831,12 +1882,12 @@ msgstr ""
"Python パッケージにプロジェクトのメタデータを追加して、PyPI "
"でのフィルタリングと、パッケージインストーラがパッケージをビルドしてインストールするために必要なメタデータの両方をサポートする方法を学びましょう。"
-#: ../../package-structure-code/intro.md:88
+#: ../../package-structure-code/intro.md:78
#, fuzzy
msgid "✨ Declare dependencies ✨"
msgstr "依存関係の宣言"
-#: ../../package-structure-code/intro.md:90
+#: ../../package-structure-code/intro.md:80
msgid ""
"Learn how to specify [required dependencies](required-dependencies), "
"[optional feature dependencies](optional-dependencies), and [development "
@@ -1844,12 +1895,12 @@ msgid ""
"toml-overview)."
msgstr ""
-#: ../../package-structure-code/intro.md:95
+#: ../../package-structure-code/intro.md:83
#, fuzzy
msgid "✨ Setup package versioning ✨"
msgstr "✨ 5. パッケージのバージョニングを設定する ✨"
-#: ../../package-structure-code/intro.md:97
+#: ../../package-structure-code/intro.md:85
msgid ""
"Learn how to manage package versions using [semantic versioning (SemVer"
")](package-versioning) or [calendar versioning (CalVer)](package-"
@@ -1858,17 +1909,17 @@ msgid ""
"tools like hatch_vcs or setuptools-scm."
msgstr ""
-#: ../../package-structure-code/intro.md:101
+#: ../../package-structure-code/intro.md:89
#, fuzzy
msgid "Development practices"
msgstr "開発状況"
-#: ../../package-structure-code/intro.md:110
+#: ../../package-structure-code/intro.md:96
#, fuzzy
msgid "✨ Code style & linters ✨"
msgstr "✨6. コードスタイルとリンター✨"
-#: ../../package-structure-code/intro.md:112
+#: ../../package-structure-code/intro.md:98
msgid ""
"Learn how to set up [code formatters and linters](code-style-tools) "
"([Black](about-black), [Ruff](about-ruff), [flake8](about-flake8)) to "
@@ -1876,16 +1927,16 @@ msgid ""
"maintains consistent code style throughout your project."
msgstr ""
-#: ../../package-structure-code/intro.md:116
+#: ../../package-structure-code/intro.md:102
msgid "Build & publish"
msgstr ""
-#: ../../package-structure-code/intro.md:125
+#: ../../package-structure-code/intro.md:109
#, fuzzy
msgid "✨ Choose your build tool ✨"
msgstr "ビルドワークフローツールの選択"
-#: ../../package-structure-code/intro.md:127
+#: ../../package-structure-code/intro.md:111
msgid ""
"Learn how to choose the right packaging tool for your project. Compare "
"[Hatch](about-hatch), [PDM](about-pdm), [Poetry](about-poetry), and "
@@ -1893,24 +1944,24 @@ msgid ""
"See the [summary comparison](summary-build-tools) to help decide."
msgstr ""
-#: ../../package-structure-code/intro.md:132
+#: ../../package-structure-code/intro.md:114
#, fuzzy
msgid "✨ Build your package ✨"
msgstr "パッケージをビルドする"
-#: ../../package-structure-code/intro.md:134
+#: ../../package-structure-code/intro.md:116
msgid ""
"Learn how to build your Python package into [distribution files](build-"
"package) ([sdist](python-source-distribution) and [wheel](python-wheel)) "
"that can be published on [PyPI](publish-pypi-conda)."
msgstr ""
-#: ../../package-structure-code/intro.md:139
+#: ../../package-structure-code/intro.md:119
#, fuzzy
msgid "✨ Publish to PyPI and Conda ✨"
msgstr "✨ 4. PyPIとCondaに公開する ✨"
-#: ../../package-structure-code/intro.md:141
+#: ../../package-structure-code/intro.md:121
msgid ""
"Learn how to publish your package to [PyPI](publish-pypi-conda) and "
"optionally to [conda-forge](how-to-submit-to-conda-forge). This page "
@@ -1919,48 +1970,48 @@ msgid ""
"forge) after publishing to PyPI."
msgstr ""
-#: ../../package-structure-code/intro.md:145
+#: ../../package-structure-code/intro.md:125
msgid "Choosing the right tools"
msgstr ""
-#: ../../package-structure-code/intro.md:147
+#: ../../package-structure-code/intro.md:127
msgid ""
"Not sure which build tool to use? This decision tree can help you choose "
"based on your package's needs:"
msgstr ""
-#: ../../package-structure-code/intro.md:151
+#: ../../package-structure-code/intro.md:131
msgid ""
"Figure showing a decision tree with the various packaging tool front-end "
"and back-end options."
msgstr "様々なパッケージングツールのフロントエンドとバックエンドのオプションの決定ツリーを示す図。"
-#: ../../package-structure-code/intro.md:153
+#: ../../package-structure-code/intro.md:133
msgid ""
"Use this decision tree to help select a packaging tool. See the "
"[packaging tools page](python-package-build-tools) for detailed "
"comparisons and recommendations."
msgstr ""
-#: ../../package-structure-code/intro.md:156
+#: ../../package-structure-code/intro.md:136
msgid "Our recommendations"
msgstr ""
-#: ../../package-structure-code/intro.md:158
+#: ../../package-structure-code/intro.md:138
msgid "We suggest tools and approaches based on three principles:"
msgstr ""
-#: ../../package-structure-code/intro.md:160
+#: ../../package-structure-code/intro.md:140
msgid ""
"**Beginner-friendly** - Tools that are easy to learn and use for those "
"new to packaging"
msgstr ""
-#: ../../package-structure-code/intro.md:161
+#: ../../package-structure-code/intro.md:141
msgid "**Well-maintained** - Tools with active development and good documentation"
msgstr ""
-#: ../../package-structure-code/intro.md:162
+#: ../../package-structure-code/intro.md:142
#, fuzzy
msgid ""
"**Standards-aligned** - Tools that follow current [Python packaging "
@@ -1971,18 +2022,18 @@ msgstr ""
"[Pythonコミュニティ](https://packaging.python.org/en/latest/) と "
"[科学コミュニティ](https://scientific-python.org/specs/) に合わせることも試みています。"
-#: ../../package-structure-code/intro.md:164
+#: ../../package-structure-code/intro.md:144
#, fuzzy
msgid "Pure Python vs. complex builds"
msgstr "複雑なビルド"
-#: ../../package-structure-code/intro.md:166
+#: ../../package-structure-code/intro.md:146
msgid ""
"**Pure Python packages** can use any modern tool (Hatch, PDM, Poetry, "
"Flit) - choose based on the features you want"
msgstr ""
-#: ../../package-structure-code/intro.md:167
+#: ../../package-structure-code/intro.md:147
msgid ""
"**Packages with C/C++ extensions** may need additional build steps. See "
"our [complex builds page](complex-python-package-builds) for guidance. "
@@ -1991,17 +2042,17 @@ msgid ""
".scientific-python.org/development/guides/packaging-compiled/)."
msgstr ""
-#: ../../package-structure-code/intro.md:169
+#: ../../package-structure-code/intro.md:149
msgid ""
"Most scientific Python packages start simple and can evolve to handle "
"more complex requirements as needed."
msgstr ""
-#: ../../package-structure-code/intro.md:171
+#: ../../package-structure-code/intro.md:151
msgid "Submitting your package for peer review?"
msgstr ""
-#: ../../package-structure-code/intro.md:173
+#: ../../package-structure-code/intro.md:153
#, fuzzy
msgid ""
"If you're planning to submit your package to pyOpenSci for [peer "
@@ -2016,18 +2067,18 @@ msgstr ""
"chief-guide.html#editor-checklist-template) "
"を見てください。これらのチェックは、私たちにパッケージをレビューのために提出しようと計画している作者と、Pythonパッケージを作成し始めたばかりの人の両方にとって、調べるのに便利です。"
-#: ../../package-structure-code/intro.md:175
+#: ../../package-structure-code/intro.md:155
msgid "These are recommendations, not requirements"
msgstr ""
-#: ../../package-structure-code/intro.md:178
+#: ../../package-structure-code/intro.md:158
msgid ""
"The suggestions in this guide are designed to help you create a well-"
"structured package. They are **not** specific requirements for pyOpenSci "
"peer review."
msgstr ""
-#: ../../package-structure-code/intro.md:180
+#: ../../package-structure-code/intro.md:160
#, fuzzy
msgid ""
"If you're submitting to pyOpenSci, see our [package "
@@ -5238,41 +5289,115 @@ msgid "README.md"
msgstr "README.md"
#: ../../package-structure-code/python-package-structure.md:80
-#, python-brace-format
-msgid ""
-"Click here to read about our packaging documentation requirements. ::: "
-":::{admonition} Example scientific packages that use src/package layout "
-"* Sourmash * bokeh * openscm * awkward * poliastro ::: (src-layout-"
-"test)= ## The src/ layout and testing The benefit of using the "
-"src/package layout is that it ensures tests are run against the installed"
-" version of your package rather than the files in your package working "
-"directory. If you run your tests on your files rather than the installed "
-"version of your package, you may be missing issues that users encounter "
-"when your package is installed. If tests/ are outside the src/package "
-"directory, they aren't included in the package's wheel. This makes your "
-"package size slightly smaller, which places a smaller storage burden on "
-"PyPI, and makes them faster to fetch. - Read more about reasons to use "
-"the src/package layout :::{admonition} How Python discovers and "
-"prioritizes importing modules By default, Python adds a module in your "
-"current working directory to the front of the Python module search path."
-" This means that if you run your tests in your package's working "
-"directory, using a flat layout, /package/module.py, Python will discover "
-"package/module.py file before it discovers the installed package. "
-"However, if your package lives in a src/ directory structure src/package,"
-" then it won't be added to the Python path by default. This means that "
-"when you import your package, Python will be forced to search the active "
-"environment (which has your package installed). Note: Python versions "
-"3.11 and above have a path setting that can be adjusted to ensure the "
-"priority is to use installed packages first (e.g., PYTHONSAFEPATH). ::: "
-"### Don't include tests in your package wheel Writing tests for your "
-"package is important; however, we do not recommend including tests as "
-"part of your package wheel by default. However, not including tests in "
-"your package distribution will make it harder for people other than "
-"yourself to test whether your package runs properly on their system. If "
-"you have a small test suite (Python files + data), and think your users "
-"may want to run tests locally on their systems, you can include tests by "
-"moving the tests/ directory into the src/package directory (see example "
-"below). ```bash src/ package/ tests/ docs/"
+msgid "Click here to read about our packaging documentation requirements."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:87
+#, fuzzy
+msgid "Example scientific packages that use **src/package** layout"
+msgstr "フラットレイアウトを使用する科学的Pythonのコアパッケージ"
+
+#: ../../package-structure-code/python-package-structure.md:89
+#, fuzzy
+msgid "[Sourmash](https://github.com/sourmash-bio/sourmash)"
+msgstr "[numpy](https://github.com/numpy/numpy)"
+
+#: ../../package-structure-code/python-package-structure.md:90
+#, fuzzy
+msgid "[bokeh](https://github.com/bokeh/bokeh)"
+msgstr "[Jupyter notebook](https://github.com/jupyter/notebook)"
+
+#: ../../package-structure-code/python-package-structure.md:91
+#, fuzzy
+msgid "[openscm](https://github.com/openscm/openscm-runner)"
+msgstr "[scipy](https://github.com/scipy/scipy)"
+
+#: ../../package-structure-code/python-package-structure.md:92
+#, fuzzy
+msgid "[awkward](https://github.com/scikit-hep/awkward)"
+msgstr "[scikit-learn](https://github.com/scikit-learn/scikit-learn)"
+
+#: ../../package-structure-code/python-package-structure.md:93
+#, fuzzy
+msgid "[poliastro](https://github.com/poliastro/poliastro/)"
+msgstr "[pandas](https://github.com/pandas-dev/pandas)"
+
+#: ../../package-structure-code/python-package-structure.md:98
+msgid "The src layout and testing"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:100
+msgid ""
+"The benefit of using the **src/package** layout is that it ensures tests "
+"are run against the installed version of your package rather than the "
+"files in your package working directory. If you run your tests on your "
+"files rather than the installed version of your package, you may be "
+"missing issues that users encounter when your package is installed."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:106
+msgid ""
+"If `tests/` are outside the **src/package** directory, they aren't "
+"included in the package's [wheel](python-wheel). This makes your package "
+"size slightly smaller, which places a smaller storage burden on PyPI, and"
+" makes them faster to fetch."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:108
+msgid ""
+"[Read more about reasons to use the **src/package** "
+"layout](https://hynek.me/articles/testing-packaging/)"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:110
+msgid "How Python discovers and prioritizes importing modules"
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:112
+msgid ""
+"By default, Python adds a module in your current working directory to the"
+" front of the Python module search path."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:114
+msgid ""
+"This means that if you run your tests in your package's working "
+"directory, using a flat layout, `/package/module.py`, Python will "
+"discover `package/module.py` file before it discovers the installed "
+"package."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:116
+msgid ""
+"However, if your package lives in a src/ directory structure "
+"**src/package**, then it won't be added to the Python path by default. "
+"This means that when you import your package, Python will be forced to "
+"search the active environment (which has your package installed)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:118
+msgid ""
+"Note: Python versions 3.11 and above have a path setting that can be "
+"adjusted to ensure the priority is to use installed packages first (e.g.,"
+" `PYTHONSAFEPATH`)."
+msgstr ""
+
+#: ../../package-structure-code/python-package-structure.md:121
+#, fuzzy
+msgid "Don't include tests in your package wheel"
+msgstr "**テストスイートのデータセットをパッケージに含めないでください**"
+
+#: ../../package-structure-code/python-package-structure.md:123
+msgid ""
+"Writing [tests](tests-intro) for your package is important; however, we "
+"do not recommend including tests as part of your [package wheel](python-"
+"wheel) by default. However, not including tests in your package "
+"distribution will make it harder for people other than yourself to test "
+"whether your package runs properly on their system. If you have a small "
+"test suite (Python files + data), and think your users may want to run "
+"tests locally on their systems, you can include tests by moving the "
+"`tests/` directory into the **src/package** directory (see example "
+"below)."
msgstr ""
#: ../../package-structure-code/python-package-structure.md:132
@@ -6326,12 +6451,12 @@ msgstr ""
#~ "the `project` table of your "
#~ "`pyproject.toml` file. If they are "
#~ "optional, they will be listed in "
-#~ "the `[optional.dependencies]` table of your"
+#~ "the `[project.optional-dependencies]` table of your"
#~ " `pyproject.toml`."
#~ msgstr ""
#~ "依存関係はオプションか必須であると考えることができます。 必須であれば、 `pyproject` "
#~ "テーブルの `dependencies` キーにリストされます。 オプションの場合は、 "
-#~ "`pyproject.toml` の `[optional.dependencies]` "
+#~ "`pyproject.toml` の `[project.optional-dependencies]` "
#~ "テーブルにリストされます。"
#~ msgid "You will learn about both below."
@@ -7313,3 +7438,71 @@ msgstr ""
#~ "を持っていて、ユーザが自分のシステムでローカルにテストを実行したいと思う場合、`tests/` ディレクトリを "
#~ "**src/package** ディレクトリに移動することでテストを含めることができます "
#~ "(以下の例を参照してください)。"
+
+#~ msgid ""
+#~ "Click here to read about our "
+#~ "packaging documentation requirements. ::: "
+#~ ":::{admonition} Example scientific packages "
+#~ "that use src/package layout * Sourmash"
+#~ " * bokeh * openscm * awkward *"
+#~ " poliastro ::: (src-layout-test)= "
+#~ "## The src/ layout and testing "
+#~ "The benefit of using the src/package "
+#~ "layout is that it ensures tests "
+#~ "are run against the installed version"
+#~ " of your package rather than the "
+#~ "files in your package working directory."
+#~ " If you run your tests on your"
+#~ " files rather than the installed "
+#~ "version of your package, you may "
+#~ "be missing issues that users encounter"
+#~ " when your package is installed. If"
+#~ " tests/ are outside the src/package "
+#~ "directory, they aren't included in the"
+#~ " package's wheel. This makes your "
+#~ "package size slightly smaller, which "
+#~ "places a smaller storage burden on "
+#~ "PyPI, and makes them faster to "
+#~ "fetch. - Read more about reasons "
+#~ "to use the src/package layout "
+#~ ":::{admonition} How Python discovers and "
+#~ "prioritizes importing modules By default, "
+#~ "Python adds a module in your "
+#~ "current working directory to the front"
+#~ " of the Python module search path."
+#~ " This means that if you run "
+#~ "your tests in your package's working "
+#~ "directory, using a flat layout, "
+#~ "/package/module.py, Python will discover "
+#~ "package/module.py file before it discovers "
+#~ "the installed package. However, if your"
+#~ " package lives in a src/ directory"
+#~ " structure src/package, then it won't "
+#~ "be added to the Python path by "
+#~ "default. This means that when you "
+#~ "import your package, Python will be "
+#~ "forced to search the active environment"
+#~ " (which has your package installed). "
+#~ "Note: Python versions 3.11 and above "
+#~ "have a path setting that can be"
+#~ " adjusted to ensure the priority is"
+#~ " to use installed packages first "
+#~ "(e.g., PYTHONSAFEPATH). ::: ### Don't "
+#~ "include tests in your package wheel "
+#~ "Writing tests for your package is "
+#~ "important; however, we do not recommend"
+#~ " including tests as part of your "
+#~ "package wheel by default. However, not"
+#~ " including tests in your package "
+#~ "distribution will make it harder for "
+#~ "people other than yourself to test "
+#~ "whether your package runs properly on"
+#~ " their system. If you have a "
+#~ "small test suite (Python files + "
+#~ "data), and think your users may "
+#~ "want to run tests locally on their"
+#~ " systems, you can include tests by"
+#~ " moving the tests/ directory into the"
+#~ " src/package directory (see example below)."
+#~ " ```bash src/ package/ tests/ docs/"
+#~ msgstr ""
diff --git a/locales/ja/LC_MESSAGES/tests.po b/locales/ja/LC_MESSAGES/tests.po
index 400e22151..554c18308 100644
--- a/locales/ja/LC_MESSAGES/tests.po
+++ b/locales/ja/LC_MESSAGES/tests.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-01-04 09:59+0900\n"
+"POT-Creation-Date: 2026-05-22 12:19-0700\n"
"PO-Revision-Date: 2025-04-14 18:12+0000\n"
"Last-Translator: Tetsuo Koyama , 2025\n"
"Language: ja\n"
@@ -20,7 +20,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.17.0\n"
+"Generated-By: Babel 2.18.0\n"
#: ../../tests/code-cov.md:1
msgid "Code coverage for your Python package test suite"
@@ -48,64 +48,70 @@ msgid ""
msgstr "良い習慣は、テストスイートの間に、コードのすべての行が少なくとも一度は実行されるようにすることです。これはあなたを助けます:"
#: ../../tests/code-cov.md:13
-msgid "Identify untested parts of your codebase."
+#, fuzzy
+msgid ""
+"**Identify untested parts:** Parts of your codebase that are not covered "
+"by tests."
msgstr "コードベースのテストされていない部分を特定します。"
-#: ../../tests/code-cov.md:14
-msgid "Catch bugs that might otherwise go unnoticed."
+#: ../../tests/code-cov.md:15
+#, fuzzy
+msgid "**Catch bugs:** Bugs that might otherwise go unnoticed."
msgstr "他の方法では気づかれないかもしれないバグをキャッチします。"
-#: ../../tests/code-cov.md:15
-msgid "Build confidence in your software's stability."
+#: ../../tests/code-cov.md:16
+#, fuzzy
+msgid "**Build confidence:** Confidence in your software's stability."
msgstr "ソフトウェアの安定性に自信を持てます。"
-#: ../../tests/code-cov.md:17
+#: ../../tests/code-cov.md:18
msgid "Limitations of code coverage"
msgstr "コードカバレッジの限界"
-#: ../../tests/code-cov.md:19
+#: ../../tests/code-cov.md:20
msgid "While high code coverage is valuable, it has its limits:"
msgstr "高いコードカバレッジは価値がありますが、それには限界があります:"
-#: ../../tests/code-cov.md:21
+#: ../../tests/code-cov.md:22
msgid ""
"**Difficult-to-test code:** Some parts of your code might be challenging "
"to test, either due to complexity or limited resources."
msgstr "**テストしにくいコード:** コードの中には、複雑さや限られたリソースのために、テストが難しい部分があるかもしれません。"
-#: ../../tests/code-cov.md:23
+#: ../../tests/code-cov.md:24
+#, fuzzy
msgid ""
-"**Missed edge cases:** Running all lines of code doesn’t guarantee that "
+"**Missed edge cases:** Running all lines of code doesn't guarantee that "
"edge cases are handled correctly."
msgstr "**見逃されたエッジケース:** すべてのコードを実行しても、エッジケースが正しく処理される保証はありません。"
-#: ../../tests/code-cov.md:26
+#: ../../tests/code-cov.md:27
msgid ""
"Ultimately, you should focus on how your package will be used and ensure "
"your tests cover those scenarios adequately."
msgstr "最終的には、パッケージがどのように使用されるかに焦点を当て、テストがそのシナリオを十分にカバーするようにしなければなりません。"
-#: ../../tests/code-cov.md:29
+#: ../../tests/code-cov.md:30
msgid "Tools for analyzing Python package code coverage"
msgstr "Pythonパッケージのコードカバレッジを分析するツール"
-#: ../../tests/code-cov.md:31
+#: ../../tests/code-cov.md:32
#, fuzzy
msgid ""
"Some common services for analyzing code coverage are "
"[codecov.io](https://about.codecov.io/) and "
"[coveralls.io](https://coveralls.io/). These projects are free for open "
-"source tools and will provide dashboards that tell you how much of your "
-"codebase is covered during your tests. We recommend setting up an account"
-" (on either CodeCov or Coveralls) and using it to keep track of your code"
-" coverage."
+"source tools and provide dashboards that show how much of your codebase "
+"is covered during your tests. We recommend setting up an account (on "
+"either CodeCov or Coveralls) and using it to keep track of your code "
+"coverage."
msgstr ""
"コードカバレッジを分析するための一般的なサービスには、 [codecov.io](https://codecov.io/) と "
"[coveralls.io](https://coveralls.io/) があります。 "
"これらのプロジェクトはオープンソースのツールで無料であり、テスト中にコードベースがどの程度カバーされているかを示すダッシュボードを提供してくれます。"
" (CodeCovまたはCoverallsで) アカウントを設定し、コード・カバレッジを追跡するために使用することをお勧めします。"
-#: ../../tests/code-cov.md:33
+#: ../../tests/code-cov.md:39
#, python-format
msgid ""
"Screenshot of the code cov service - showing test coverage for the "
@@ -118,33 +124,35 @@ msgstr ""
"この画像は、パッケージモジュールのリストと、関連する行数およびテスト対象行の割合を示しています。 "
"画像の上部には、評価対象のブランチとリポジトリへのパスが表示されています。"
-#: ../../tests/code-cov.md:38
+#: ../../tests/code-cov.md:44
+#, fuzzy
msgid ""
"The CodeCov platform is a useful tool if you wish to track code coverage "
-"visually. Using it, you can not only get the same summary information "
-"that you can get with the **pytest-cov** extension. You can also see what"
-" lines are covered by your tests and which are not. Code coverage is "
-"useful for evaluating unit tests and/or how much of your package code is "
-"\"covered\". It, however, will not evaluate things like integration tests"
-" and end-to-end workflows."
+"visually. Using it, you can get the same summary information that you can"
+" get with the **pytest-cov** extension. You can also see what lines are "
+"covered by your tests and which are not. Code coverage is useful for "
+"evaluating [unit tests](test-types.md#unit-tests) and/or how much of your"
+" package code is \"covered\". It, however, will not evaluate things like "
+"[integration tests](test-types.md#integration-tests) and [end-to-end "
+"workflows](test-types.md)."
msgstr ""
"CodeCovプラットフォームは、コードカバレッジを視覚的に追跡したい場合に便利なツールです。これを使えば、 **pytest-cov** "
"拡張機能で得られるのと同じサマリー情報を得られるだけではありません。また、テストの対象になっているラインとそうでないラインを確認することもできます。コードカバレッジは、単体テストの評価や、パッケージのコードがどれだけ"
" \"カバー\" されているかを評価するのに役立ちます。しかし、統合テストやエンドツーエンドのワークフローなどは評価されません。"
-#: ../../tests/code-cov.md:43
+#: ../../tests/code-cov.md:56
msgid "Typing & MyPy coverage"
msgstr "型 & MyPyのカバレッジ"
-#: ../../tests/code-cov.md:44
+#: ../../tests/code-cov.md:57
msgid "You can also create and upload typing reports to CodeCov."
msgstr "また、型レポートを作成し、CodeCovにアップロードすることもできます。"
-#: ../../tests/code-cov.md:47
+#: ../../tests/code-cov.md:60
msgid "Exporting Local Coverage Reports"
msgstr "ローカルカバレッジレポートのエクスポート"
-#: ../../tests/code-cov.md:49
+#: ../../tests/code-cov.md:62
msgid ""
"In addition to using services like CodeCov or Coveralls, you can generate"
" local coverage reports directly using the **coverage.py** tool. This can"
@@ -155,60 +163,82 @@ msgstr ""
"ツールを使って直接ローカルカバレッジレポートを作成することもできます。 "
"これは、オフラインでの使用や文書化のためにMarkdownやHTML形式でレポートを作成したい場合に特に便利です。"
-#: ../../tests/code-cov.md:51
+#: ../../tests/code-cov.md:67
msgid "To generate a coverage report in **Markdown** format, run:"
msgstr "カバレッジレポートを **Markdown** 形式で作成するには、以下を実行します:"
-#: ../../tests/code-cov.md:56
+#: ../../tests/code-cov.md:73
+#, fuzzy
msgid ""
"This command will produce a Markdown-formatted coverage summary that you "
-"can easily include in project documentation or share with your team."
+"can include in project documentation or share with your team."
msgstr "このコマンドはMarkdown形式のカバレッジサマリーを作成し、プロジェクトのドキュメントに簡単に記載したり、チームと共有したりすることができます。"
-#: ../../tests/code-cov.md:58
+#: ../../tests/code-cov.md:76
msgid ""
"To generate an HTML report that provides a detailed, interactive view of "
"which lines are covered, use:"
msgstr "どの行がカバーされているか、詳細でインタラクティブなビューを提供するHTMLレポートを生成するには、以下を使用します:"
-#: ../../tests/code-cov.md:64
+#: ../../tests/code-cov.md:83
+#, fuzzy
msgid ""
-"The generated HTML report will be saved in a directory named htmlcov by "
-"default. Open the index.html file in your browser to explore your "
+"The generated HTML report will be saved in a directory named `htmlcov` by"
+" default. Open the `index.html` file in your browser to explore your "
"coverage results."
msgstr "生成されたHTMLレポートは、デフォルトでhtmlcovというディレクトリに保存されます。index.htmlファイルをブラウザで開き、カバレッジ結果をご覧ください。"
-#: ../../tests/code-cov.md:66
+#: ../../tests/code-cov.md:87
msgid ""
"These local reports are an excellent way to quickly review coverage "
"without setting up an external service."
msgstr "このようなローカルレポートは、外部サービスを立ち上げることなくカバレッジを素早く確認する優れた方法です。"
-#: ../../tests/index.md:73
+#: ../../tests/code-cov.md:90 ../../tests/run-tests-nox.md:168
+#: ../../tests/run-tests.md:332 ../../tests/test-types.md:346
+#: ../../tests/write-tests.md:136
+#, fuzzy
+msgid "Next steps"
+msgstr "単体テスト"
+
+#: ../../tests/code-cov.md:92
+msgid ""
+"Writing meaningful tests is the foundation of useful coverage. See [Write"
+" tests](write-tests.md) and [Test types](test-types.md) to learn more "
+"about developing better test suites. Learn how to run your tests both "
+"[locally](run-tests.md) and in [continuous integration](tests-ci.md)."
+msgstr ""
+
+#: ../../tests/index.md:70
msgid "Intro"
msgstr "イントロ"
-#: ../../tests/index.md:73
+#: ../../tests/index.md:70
msgid "Write tests"
msgstr "テストを書く"
-#: ../../tests/index.md:73
+#: ../../tests/index.md:70
msgid "Test types"
msgstr "テストの種類"
-#: ../../tests/index.md:73
+#: ../../tests/index.md:70
msgid "Run tests locally"
msgstr "ローカルでテストを実行する"
-#: ../../tests/index.md:73
+#: ../../tests/index.md:70 ../../tests/run-tests-nox.md:7
+#, fuzzy
+msgid "Run tests with Nox"
+msgstr "オンラインテストを実行する"
+
+#: ../../tests/index.md:70
msgid "Run tests online (using CI)"
msgstr "オンラインでテストを実行する(CIを使用する)"
-#: ../../tests/index.md:73
+#: ../../tests/index.md:70
msgid "Code coverage"
msgstr "コードカバレッジ"
-#: ../../tests/index.md:73
+#: ../../tests/index.md:70
msgid "Create & Run Tests"
msgstr "テストの作成と実行"
@@ -217,149 +247,188 @@ msgid "Tests and data for your Python package"
msgstr "Pythonパッケージのテストとデータ"
#: ../../tests/index.md:4
+#, fuzzy
msgid ""
-"Tests are an important part of your Python package because they provide a"
-" set of checks that ensure that your package is functioning how you "
-"expect it to."
+"Adding tests to your package provides a set of checks that ensure that "
+"its functioning how you expect it to."
msgstr ""
"テストは Python "
"パッケージの重要な一部です。なぜなら、テストはパッケージが期待通りに動作しているかどうかを確認するための一連のチェック機能を提供するからです。"
-#: ../../tests/index.md:8
+#: ../../tests/index.md:7
+#, fuzzy
msgid ""
-"In this section, you will learn more about the importance of writing "
-"tests for your Python package and how you can set up infrastructure to "
-"run your tests both locally and on GitHub."
+"In this section, you will learn about the importance of writing tests for"
+" your Python package, different [types of tests that you should consider"
+"](test-types) and how you can set up infrastructure to run your tests "
+"both [locally](run-tests) and [on GitHub](tests-ci)."
msgstr ""
"このセクションでは、Python パッケージのテストを書くことの重要性と、ローカルと GitHub "
"の両方でテストを実行するためのインフラストラクチャの設定方法について学びます。"
-#: ../../tests/index.md:20
+#: ../../tests/index.md:16
msgid "✨ Why write tests ✨"
msgstr "✨テストを書く理由✨"
-#: ../../tests/index.md:25
+#: ../../tests/index.md:21
+#, fuzzy
msgid ""
-"Learn more about the art of writing tests for your Python package. Learn "
-"about why you should write tests and how they can help you and potential "
-"contributors to your project."
+"Learn about the importance of writing tests for your Python package and "
+"how they help you and potential contributors."
msgstr ""
"Python パッケージのテストを書く技術についてもっと学びましょう。 "
"なぜテストを書く必要があるのか、そしてテストがどのようにあなたやあなたのプロジェクトへの将来の貢献者の助けになるのかを学びましょう。"
-#: ../../tests/index.md:32
+#: ../../tests/index.md:25
msgid "✨ Types of tests ✨"
msgstr "✨テストの種類✨"
-#: ../../tests/index.md:37
+#: ../../tests/index.md:30
msgid ""
-"There are three general types of tests that you can write for your Python"
-" package: unit tests, integration tests and end-to-end (or functional) "
-"tests. Learn about all three."
+"Get to know the three test types: unit, integration, and end-to-end "
+"tests. Learn when and how to use each."
msgstr ""
-"Python パッケージで書くことのできるテストには、ユニットテスト、統合テスト、エンドツーエンドテスト (あるいは機能テスト) の 3 "
-"種類があります。 この 3 つについて学びましょう。"
-#: ../../tests/index.md:43
+#: ../../tests/index.md:34
msgid "✨ Run tests locally ✨"
msgstr "✨ローカルでテストを実行する✨"
+#: ../../tests/index.md:39
+msgid ""
+"Learn about testing tools like pytest, nox, and tox to run tests across "
+"different Python versions on your computer. And explore examples of using"
+" Hatch with UV as a task runner to run tests across Python versions."
+msgstr ""
+
+#: ../../tests/index.md:43
+#, fuzzy
+msgid "✨ Run tests locally (using nox) ✨"
+msgstr "✨オンラインでテストを実行する(CIを使用する)✨"
+
#: ../../tests/index.md:48
msgid ""
-"If you expect your users to use your package across different versions of"
-" Python, then using an automation tool such as nox to run your tests is "
-"useful. Learn about the various tools that you can use to run your tests "
-"across python versions here."
+"Nox is a python powered task runner that can be used to run tests. Learn "
+"how to use nox to run tests."
msgstr ""
-"もしユーザがあなたのパッケージを異なるバージョンの Python で使うことを想定しているなら、テストを実行するために nox "
-"のような自動化ツールを使うと便利です。 Python "
-"のバージョンにまたがってテストを実行するために使える様々なツールについては、こちらを参照してください。"
-#: ../../tests/index.md:54
+#: ../../tests/index.md:51
msgid "✨ Run tests online (using CI) ✨"
msgstr "✨オンラインでテストを実行する(CIを使用する)✨"
-#: ../../tests/index.md:59
+#: ../../tests/index.md:56
msgid ""
-"Continuous integration platforms such as GitHub Actions can be useful for"
-" running your tests across both different Python versions and different "
-"operating systems. Learn about setting up tests to run in Continuous "
-"Integration here."
+"Set up continuous integration with GitHub Actions to run tests across "
+"Python versions and operating systems."
msgstr ""
-"GitHub Actionsのような継続的インテグレーションプラットフォームは、Python "
-"のバージョンやオペレーティングシステムの違いを問わずテストを実行するのに便利です。 "
-"継続的インテグレーションで実行するテストの設定については、こちらを参照してください。"
-#: ../../tests/index.md:70
-msgid "Graphic showing the elements of the packaging process."
-msgstr "パッケージング工程の要素を示すグラフィック。"
+#: ../../tests/index.md:60
+#, fuzzy
+msgid "✨ Code coverage ✨"
+msgstr "コードカバレッジ"
+
+#: ../../tests/index.md:65
+msgid ""
+"Measure how much of your package code runs during tests. Learn to "
+"generate local reports and visualize coverage online."
+msgstr ""
-#: ../../tests/run-tests.md:6
-msgid "Run Python package tests"
-msgstr "Pythonパッケージテストの実行"
+#: ../../tests/run-tests.md:7
+#, fuzzy
+msgid "Run tests for your Python package"
+msgstr "Pythonパッケージのテストを書く"
-#: ../../tests/run-tests.md:8
+#: ../../tests/run-tests.md:9
msgid ""
-"Running your tests is important to ensure that your package is working as"
-" expected. It's good practice to consider that tests will run on your "
-"computer and your users' computers that may be running a different Python"
-" version and operating systems. Think about the following when running "
-"your tests:"
+"Running your tests across different Python versions and operating systems"
+" is critical to ensuring your package works for your users. Your users "
+"may be running different versions of Python and operating systems than "
+"you are."
msgstr ""
-"テストを実行することは、パッケージが期待通りに動作していることを確認するために重要です。 テストは、あなたのコンピュータと、Python "
-"のバージョンやオペレーティングシステムが異なるユーザのコンピュータで実行されることを考慮するのがよい習慣です。 "
-"テストを実行する際には、以下のことを考慮してください:"
-#: ../../tests/run-tests.md:11
+#: ../../tests/run-tests.md:13
msgid ""
-"Run your test suite in a matrix of environments that represent the Python"
-" versions and operating systems your users are likely to have."
-msgstr "テストスイートは、Python のバージョンとユーザーが使用する可能性のあるオペレーティングシステムを表す環境のマトリックスで実行します。"
+"This page teaches you how to run tests locally in isolated environments "
+"and across multiple Python versions. You'll learn about two main "
+"automation tools: [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/en/stable/index.html). In the next "
+"lesson, you will learn about running your tests online in [continuous "
+"integration (CI)](tests-ci)."
+msgstr ""
-#: ../../tests/run-tests.md:12
+#: ../../tests/run-tests.md:20
+#, fuzzy
+msgid "Why run tests across multiple environments?"
+msgstr "隔離された環境でのテストの実行"
+
+#: ../../tests/run-tests.md:22
msgid ""
-"Running your tests in an isolated environment provides confidence in the "
-"tests and their reproducibility. This ensures that tests do not pass "
-"randomly due to your computer's specific setup. For instance, you might "
-"have unexpectedly installed dependencies on your local system that are "
-"not declared in your package's dependency list. This oversight could lead"
-" to issues when others try to install or run your package on their "
-"computers."
+"When you develop a package on your computer, it works in one specific "
+"environment: your Python version, your operating system, and your "
+"installed dependencies. Your users, however, will run your code in many "
+"different environments. By running your tests across multiple Python "
+"versions and operating systems, you catch compatibility issues before "
+"users do."
msgstr ""
-"隔離された環境でテストを実行することで、テストとその再現性に自信を持つことができます。 "
-"これにより、あなたのコンピュータの設定によってテストがランダムにパスすることがなくなります。 "
-"たとえば、あなたのパッケージの依存関係リストで宣言されていない依存関係を、予期せずローカルシステムにインストールしてしまったかもしれません。 "
-"このような見落としは、他の人があなたのパッケージを自分のコン ピュータにインストールしたり実行しようとしたときに、問題につながる可能性 "
-"があります。"
-#: ../../tests/run-tests.md:14
+#: ../../tests/run-tests.md:28
+msgid ""
+"Additionally, running tests in isolated environments ensures that your "
+"tests pass because of your code, not because of unexpected dependencies "
+"installed on your computer. This gives you confidence that your package "
+"will work when others install it."
+msgstr ""
+
+#: ../../tests/run-tests.md:33
msgid ""
"On this page, you will learn about the tools that you can use to both run"
" tests in isolated environments and across Python versions."
msgstr "このページでは、隔離された環境でテストを実行したり、Python のバージョンを越えてテストを実行したりするために使えるツールについて学びます。"
-#: ../../tests/run-tests.md:19
+#: ../../tests/run-tests.md:37
+msgid "**Related pages:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:39
+msgid "[Write tests](write-tests.md) for best practices on writing test suites"
+msgstr ""
+
+#: ../../tests/run-tests.md:41
+#, fuzzy
+msgid ""
+"[Test types](test-types.md) to understand unit, integration, and end-to-"
+"end tests"
+msgstr "ユニットテスト、統合テスト、エンドツーエンドテストの比較"
+
+#: ../../tests/run-tests.md:43
+msgid "[Run tests online with CI](tests-ci.md) for GitHub Actions setup"
+msgstr ""
+
+#: ../../tests/run-tests.md:44
+msgid "[Code coverage](code-cov.md) to measure how much code your tests cover"
+msgstr ""
+
+#: ../../tests/run-tests.md:48
#, fuzzy
msgid "Tools to run your tests"
msgstr "テストを実行するためのツール"
-#: ../../tests/run-tests.md:21
+#: ../../tests/run-tests.md:50
+#, fuzzy
msgid ""
-"There are three categories of tools that will make is easier to setup and"
+"There are three categories of tools that will make it easier to setup and"
" run your tests in various environments:"
msgstr "さまざまな環境でのテストのセットアップと実行を容易にするツールには、3つのカテゴリーがあります:"
-#: ../../tests/run-tests.md:24
+#: ../../tests/run-tests.md:53
+#, fuzzy
msgid ""
-"A **test framework**, is a package that provides a particular syntax and "
-"set of tools for _both writing and running your tests_. Some test "
-"frameworks also have plugins that add additional features such as "
-"evaluating how much of your code the tests cover. Below you will learn "
-"about the **pytest** framework which is one of the most commonly used "
-"Python testing frameworks in the scientific ecosystem. Testing frameworks"
-" are essential but they only serve to run your tests. These frameworks "
-"don't provide a way to easily run tests across Python versions without "
-"the aid of additional automation tools."
+"**Testing framework (pytest):** Provides the syntax and tools for writing"
+" and running your tests. Learn more from the [pytest "
+"documentation](https://docs.pytest.org/). Below you will learn about "
+"pytest, the most commonly used testing framework in the scientific Python"
+" ecosystem. Testing frameworks are essential for running tests, but they "
+"don't provide an easy way to run tests across Python versions or in "
+"isolated environments—that's where automation tools come in."
msgstr ""
"**テストフレームワーク** とは、テストを書いたり実行したりするための特定の構文やツールのセットを提供するパッケージのことです。 "
"いくつかのテストフレームワークにはプラグインがあり、テストがカバーするコードの範囲を評価するなどの機能を追加することができます。 "
@@ -367,112 +436,99 @@ msgstr ""
"フレームワークについて学びます。 テストフレームワークは必要不可欠ですが、テストを実行するためだけのものです。 "
"これらのフレームワークは、追加の自動化ツールの助けを借りずに Python のバージョンをまたいだテストを簡単に実行する方法は提供しません。"
-#: ../../tests/run-tests.md:25
-msgid ""
-"**Automation tools** allow you to automate running workflows such as "
-"tests in specific ways using user-defined commands. For instance it's "
-"useful to be able to run tests across different Python versions with a "
-"single command. Tools such as "
-"[**nox**](https://nox.thea.codes/en/stable/index.html) and "
-"[**tox**](https://tox.wiki/en/latest/index.html) also allow you to run "
-"tests across Python versions. However, it will be difficult to test your "
-"build on different operating systems using only nox and tox - this is "
-"where continuous integration (CI) comes into play."
-msgstr ""
-"**自動化ツール** を使うと、ユーザー定義のコマンドを使って、テストのようなワークフローを特定の方法で実行することを自動化できます。 "
-"例えば、1つのコマンドで異なるPythonのバージョンにまたがってテストを実行できると便利です。 "
-"[**nox**](https://nox.thea.codes/en/stable/index.html) や "
-"[**tox**](https://tox.wiki/en/latest/index.html) "
-"のようなツールも、Pythonのバージョンをまたいでテストを実行できます。 "
-"しかし、noxとtoxだけを使って異なるオペレーティングシステムでビルドをテストするのは難しいでしょう - "
-"ここで継続的インテグレーション(CI)の出番です。"
-
-#: ../../tests/run-tests.md:26
-msgid ""
-"**Continuous Integration (CI):** is the last tool that you'll need to run"
-" your tests. CI will not only allow you to replicate any automated builds"
-" you create using nox or tox to run your package in different Python "
-"environments. It will also allow you to run your tests on different "
-"operating systems (Windows, Mac and Linux). [We discuss using CI to run "
-"tests here](tests-ci)."
-msgstr ""
-"**継続的インテグレーション (CI):** は、テストを実行するために必要な最後のツールです。 CI は、nox や tox "
-"を使って作成した自動ビルドを複製して、異なる Python 環境でパッケージを実行できるようにするだけではありません。 "
-"また、異なるオペレーティングシステム(Windows、Mac、Linux)でテストを実行することもできます。 "
-"[テストを実行するためにCIを使うことについては、ここで説明します](tests-ci) 。"
+#: ../../tests/run-tests.md:61
+msgid ""
+"**Automation tools (Nox, Tox, Hatch):** Allow you to run tests in "
+"isolated environments and across multiple Python versions with a single "
+"command. We focus on [**Hatch**](https://hatch.pypa.io/) and "
+"[**Nox**](https://nox.thea.codes/) below. These tools create virtual "
+"environments automatically and ensure your tests run consistently. "
+"However, they typically only test on your local operating system."
+msgstr ""
-#: ../../tests/run-tests.md:28
-msgid "Table: Testing & Automation Tool"
-msgstr "テーブル: テスト&自動化ツール"
+#: ../../tests/run-tests.md:69
+msgid ""
+"**Continuous Integration (CI):** Runs your tests online across different "
+"operating systems (Windows, Mac, and Linux) and Python versions. CI "
+"integrates with platforms like GitHub Actions to automatically test every"
+" pull request and code change."
+msgstr ""
-#: ../../tests/run-tests.md:35
-msgid "Features"
-msgstr "機能"
+#: ../../tests/run-tests.md:74
+msgid "[Learn about CI here](ci-cd)."
+msgstr ""
-#: ../../tests/run-tests.md:36
-msgid "Testing Framework (pytest)"
+#: ../../tests/run-tests.md:76
+msgid "Quick comparison: what each tool does"
+msgstr ""
+
+#: ../../tests/run-tests.md:78
+#, fuzzy
+msgid "**Testing Framework (pytest):**"
msgstr "テストフレームワーク (pytest)"
-#: ../../tests/run-tests.md:37
-msgid "Test Runner (Tox)"
-msgstr "テストランナー (Tox)"
+#: ../../tests/run-tests.md:80
+msgid "Runs your tests locally in your current Python environment"
+msgstr ""
+
+#: ../../tests/run-tests.md:81
+msgid "Provides the core syntax for writing tests (assertions, fixtures, etc.)"
+msgstr ""
+
+#: ../../tests/run-tests.md:83
+msgid "Can be extended with plugins (like pytest-cov for coverage)"
+msgstr ""
-#: ../../tests/run-tests.md:38
-msgid "Automation Tools (Nox)"
+#: ../../tests/run-tests.md:85
+#, fuzzy
+msgid "**Automation Tools (Nox, Tox, Hatch):**"
msgstr "自動化ツール(Nox)"
-#: ../../tests/run-tests.md:39
-msgid "Continuous Integration (GitHub Actions)"
-msgstr "継続的インテグレーション(GitHub Actions)"
+#: ../../tests/run-tests.md:87
+#, fuzzy
+msgid "Run tests locally across multiple Python versions"
+msgstr "Pythonのバージョンにまたがってテストを実行する"
-#: ../../tests/run-tests.md:40
-msgid "Run Tests Locally"
-msgstr "ローカルでテストを実行する"
+#: ../../tests/run-tests.md:88
+msgid "Create and manage isolated virtual environments automatically"
+msgstr ""
-#: ../../tests/run-tests.md:41 ../../tests/run-tests.md:42
-#: ../../tests/run-tests.md:43 ../../tests/run-tests.md:49
-#: ../../tests/run-tests.md:52 ../../tests/run-tests.md:53
-#: ../../tests/run-tests.md:54 ../../tests/run-tests.md:57
-#: ../../tests/run-tests.md:58 ../../tests/run-tests.md:59
-#: ../../tests/run-tests.md:64 ../../tests/run-tests.md:68
-#: ../../tests/run-tests.md:69
-msgid ""
-msgstr ""
-
-#: ../../tests/run-tests.md:44 ../../tests/run-tests.md:46
-#: ../../tests/run-tests.md:47 ../../tests/run-tests.md:48
-#: ../../tests/run-tests.md:51 ../../tests/run-tests.md:56
-#: ../../tests/run-tests.md:61 ../../tests/run-tests.md:62
-#: ../../tests/run-tests.md:63 ../../tests/run-tests.md:66
-#: ../../tests/run-tests.md:67
-msgid ""
-msgstr ""
-
-#: ../../tests/run-tests.md:45
-msgid "Run Tests Online"
-msgstr "オンラインテストを実行する"
+#: ../../tests/run-tests.md:89
+msgid "Can automate other tasks like building documentation"
+msgstr ""
-#: ../../tests/run-tests.md:50
-msgid "Run Tests Across Python Versions"
-msgstr "Pythonのバージョンにまたがってテストを実行する"
+#: ../../tests/run-tests.md:90
+msgid "Make it easy to reproduce test environments"
+msgstr ""
-#: ../../tests/run-tests.md:55
-msgid "Run Tests In Isolated Environments"
-msgstr "隔離された環境でのテストの実行"
+#: ../../tests/run-tests.md:92
+#, fuzzy
+msgid "**Continuous Integration (GitHub Actions):**"
+msgstr "継続的インテグレーション(GitHub Actions)"
-#: ../../tests/run-tests.md:60
-msgid "Run Tests Across Operating Systems (Windows, MacOS, Linux)"
+#: ../../tests/run-tests.md:94
+msgid "Runs tests online automatically for every pull request"
+msgstr ""
+
+#: ../../tests/run-tests.md:95
+#, fuzzy
+msgid "Tests across different operating systems (Windows, Mac, Linux)"
msgstr "オペレーティングシステム(Windows、MacOS、Linux)にまたがるテストの実行"
-#: ../../tests/run-tests.md:65
-msgid "Use for other automation tasks (e.g. building docs)"
-msgstr "その他の自動化タスクに使用する(ドキュメントの作成など)"
+#: ../../tests/run-tests.md:96
+#, fuzzy
+msgid "Tests across multiple Python versions in parallel"
+msgstr "Pythonのバージョンにまたがってテストを実行する"
+
+#: ../../tests/run-tests.md:97
+msgid "Can automate deployments, releases, and other workflows"
+msgstr ""
-#: ../../tests/run-tests.md:73
+#: ../../tests/run-tests.md:99
msgid "What testing framework / package should I use to run tests?"
msgstr "テストを実行するには、どのテストフレームワーク/パッケージを使用すればよいですか?"
-#: ../../tests/run-tests.md:75
+#: ../../tests/run-tests.md:101
msgid ""
"We recommend using `Pytest` to build and run your package tests. Pytest "
"is the most common testing tool used in the Python ecosystem."
@@ -480,7 +536,7 @@ msgstr ""
"パッケージテストのビルドと実行には `Pytest` を使うことを推奨します。 Pytest は Python "
"のエコシステムで最もよく使われているテストツールです。"
-#: ../../tests/run-tests.md:77
+#: ../../tests/run-tests.md:103
msgid ""
"[The Pytest package](https://docs.pytest.org/en/latest/) also has a "
"number of extensions that can be used to add functionality such as:"
@@ -488,7 +544,7 @@ msgstr ""
"[Pytestパッケージ](https://docs.pytest.org/en/latest/) "
"には、以下のような機能を追加するために使用できる多くの拡張機能もあります:"
-#: ../../tests/run-tests.md:80
+#: ../../tests/run-tests.md:106
#, fuzzy
msgid ""
"[pytest-cov](https://pytest-cov.readthedocs.io/en/latest/) allows you to "
@@ -500,16 +556,15 @@ msgstr ""
"を使うと、テスト中にパッケージのコードカバレッジを分析し、 [codecov](https://codecov.io/) "
"にアップロードできるレポートを生成することができます。"
-#: ../../tests/run-tests.md:82 ../../tests/run-tests.md:174
-#: ../../tests/test-types.md:14 ../../tests/tests-ci.md:7
+#: ../../tests/run-tests.md:108 ../../tests/tests-ci.md:7
msgid "Todo"
msgstr "Todo"
-#: ../../tests/run-tests.md:83
+#: ../../tests/run-tests.md:109
msgid "Learn more about code coverage here. (add link)"
msgstr "コードカバレッジについてはこちらをご覧ください。 (リンクを追加)"
-#: ../../tests/run-tests.md:87
+#: ../../tests/run-tests.md:113
msgid ""
"Your editor or IDE may add additional convenience for running tests, "
"setting breakpoints, and toggling the `–no-cov` flag. Check your editor's"
@@ -518,19 +573,19 @@ msgstr ""
"お使いのエディタや IDE には、テストを実行したり、ブレークポイントを設定したり、 `-no-cov` "
"フラグを切り替えたりするための便利な機能が追加されているかもしれません。 詳しくはエディタのドキュメントを参照してください。"
-#: ../../tests/run-tests.md:90
+#: ../../tests/run-tests.md:116
msgid "Run tests using pytest"
msgstr "pytest を使ってテストを実行する"
-#: ../../tests/run-tests.md:92
+#: ../../tests/run-tests.md:118
msgid "If you are using **pytest**, you can run your tests locally by calling:"
msgstr "**pytest** を使用している場合、テストをローカルで実行することができます:"
-#: ../../tests/run-tests.md:95
+#: ../../tests/run-tests.md:121
msgid "`pytest`"
msgstr "`pytest`"
-#: ../../tests/run-tests.md:97
+#: ../../tests/run-tests.md:123
msgid ""
"Or if you want to run a specific test file - let's call this file "
"\"`test_module.py`\" - you can run:"
@@ -538,19 +593,20 @@ msgstr ""
"また、特定のテストファイル - このファイルを \"`test_module.py`\" と呼ぶことにします - "
"を実行したい場合は、次のようにします:"
-#: ../../tests/run-tests.md:99
+#: ../../tests/run-tests.md:125
msgid "`pytest test_module.py`"
msgstr "`pytest test_module.py`"
-#: ../../tests/run-tests.md:101
+#: ../../tests/run-tests.md:127
+#, fuzzy
msgid ""
-"Learn more from the [get started docs](https://docs.pytest.org/en/7.1.x"
-"/getting-started.html)."
+"Learn more about pytest [here](https://docs.pytest.org/en/stable/getting-"
+"started.html)."
msgstr ""
"詳しくは [ドキュメントスタートガイド](https://docs.pytest.org/en/7.1.x/getting-"
"started.html) をご覧ください。"
-#: ../../tests/run-tests.md:103
+#: ../../tests/run-tests.md:129
msgid ""
"Running pytest on your computer is going to run your tests in whatever "
"Python environment you currently have activated. This means that tests "
@@ -560,29 +616,30 @@ msgstr ""
"あなたのコンピュータで pytest を実行すると、現在有効になっている Python 環境でテストが実行されます。 "
"つまり、テストは単一のバージョンのPythonで、ローカルで実行しているオペレーティングシステム上でのみ実行されます。"
-#: ../../tests/run-tests.md:108
+#: ../../tests/run-tests.md:134
msgid ""
"An automation tool can simplify the process of running tests in various "
"Python environments."
msgstr "自動化ツールは、様々な Python 環境でテストを実行するプロセスを単純化することができます。"
-#: ../../tests/run-tests.md:111
+#: ../../tests/run-tests.md:137
msgid "Tests across operating systems"
msgstr "オペレーティングシステムをまたいだテスト"
-#: ../../tests/run-tests.md:112
+#: ../../tests/run-tests.md:138
+#, fuzzy
msgid ""
-"If you want to run your tests across different operating systems you can "
-"[continuous integration. Learn more here](tests-ci)."
+"If you want to run your tests on different operating systems you can use "
+"continuous integration. [Learn more here](tests-ci)."
msgstr ""
"異なるオペレーティングシステム間でテストを実行したい場合は、 [継続的インテグレーション。 詳細はこちら](tests-ci) "
"を使用することができます。"
-#: ../../tests/run-tests.md:115
+#: ../../tests/run-tests.md:141
msgid "Tools to automate running your tests"
msgstr "テストの実行を自動化するツール"
-#: ../../tests/run-tests.md:117
+#: ../../tests/run-tests.md:143
msgid ""
"To run tests on various Python versions or in various specific "
"environments with a single command, you can use an automation tool such "
@@ -594,24 +651,34 @@ msgstr ""
"のような自動化ツールを使うことができます。 `nox` も `tox` も、隔離された仮想環境を作成することができます。 これにより、複数の環境や"
" Python のバージョンをまたいだテストを簡単に実行することができます。"
-#: ../../tests/run-tests.md:120
+#: ../../tests/run-tests.md:146
msgid ""
-"We will focus on [Nox](https://nox.thea.codes/) in this guide. `nox` is a"
-" Python-based automation tool that builds upon the features of both "
-"`make` and `tox`. `nox` is designed to simplify and streamline testing "
-"and development workflows. Everything that you do with `nox` can be "
-"implemented using a Python-based interface."
+"We will focus on Hatch on this page as Hatch is the default tool that we "
+"use in our [tutorials](create-pure-python-package) and for our [Python "
+"package template](https://github.com/pyOpenSci/pyos-package-template)."
+msgstr ""
+
+#: ../../tests/run-tests.md:149
+#, fuzzy
+msgid ""
+"If you are not a hatch fan, then [Nox](https://nox.thea.codes/) is an "
+"alternative tool that we cover in the next lesson. `nox` is a Python-"
+"based automation tool that builds upon the features of both `make` and "
+"`tox`. `nox` is designed to simplify and streamline testing and "
+"development workflows. Everything that you do with `nox` can be "
+"implemented using a Python-based interface. You will learn more about "
+"using nox [here](run-tests-nox)."
msgstr ""
"このガイドでは、 [Nox](https://nox.thea.codes/) に焦点を当てます。 `nox` は Python "
"ベースの自動化ツールで、 `make` と `tox` の機能をベースにしています。 `nox` "
"はテストと開発のワークフローを簡素化し、効率化するように設計されています。 `nox` "
"で行うことはすべて、Pythonベースのインターフェースを使って実装することができます。"
-#: ../../tests/run-tests.md:122
+#: ../../tests/run-tests.md:151
msgid "Other automation tools you'll see in the wild"
msgstr "その他の自動化ツール"
-#: ../../tests/run-tests.md:125
+#: ../../tests/run-tests.md:154
msgid ""
"**[Tox](https://tox.wiki/en/latest/index.html#useful-links)** is an "
"automation tool that supports common steps such as building "
@@ -620,104 +687,341 @@ msgstr ""
"**[Tox](https://tox.wiki/en/latest/index.html#useful-links)** "
"は自動化ツールで、ドキュメントのビルドや、Pythonの様々なバージョン間でのテストの実行など、一般的なステップをサポートしています。"
-#: ../../tests/run-tests.md:127
-msgid ""
-"**[Hatch](https://github.com/pypa/hatch)** is a modern end-to-end "
-"packaging tool that works with the popular build backend called "
-"hatchling. `hatch` offers a `tox`-like setup where you can run tests "
-"locally using different Python versions. If you are using `hatch` to "
-"support your packaging workflow, you may want to also use its testing "
-"capabilities rather than using `nox`."
-msgstr ""
-"**[Hatch](https://github.com/pypa/hatch)** "
-"は、hatchlingと呼ばれる人気のあるビルドバックエンドで動作する最新のエンドツーエンドパッケージングツールです。 `hatch` は "
-"`tox` のようなセットアップを提供し、異なる Python バージョンを使ってローカルでテストを実行することができます。 "
-"パッケージングのワークフローをサポートするために `hatch` を使っているのであれば、 `nox` を使うよりも `hatch` "
-"のテスト機能を使った方が良いかもしれない。"
-
-#: ../../tests/run-tests.md:129
+#: ../../tests/run-tests.md:159
+#, fuzzy
msgid ""
-"[**make:**](https://www.gnu.org/software/make/manual/make.html) Some "
-"developers use Make, which is a build automation tool, for running tests "
-"due to its versatility; it's not tied to a specific language and can be "
-"used to run various build processes. However, Make's unique syntax and "
-"approach can make it more challenging to learn, particularly if you're "
-"not already familiar with it. Make also won't manage environments for you"
-" like **nox** will do."
+"**[Make](https://www.gnu.org/software/make/manual/make.html)** is a build"
+" automation tool that some developers use for running tests due to its "
+"versatility. However, Make's unique syntax can be challenging to learn, "
+"and it won't manage environments for you like Hatch and Nox do."
msgstr ""
"[**make:**](https://www.gnu.org/software/make/manual/make.html) "
"ビルド自動化ツールであるMakeは汎用性が高いため、テストの実行に使う開発者もいます; "
"特定の言語に縛られることなく、さまざまなビルドプロセスを実行するために使うことができます。しかし、Makeのユニークな構文とアプローチは、特にあなたがまだMakeに慣れていない場合、習得を難しくする可能性があります。Makeはまた、"
" **nox** がやってくれるような環境管理もしてくれません。"
-#: ../../tests/run-tests.md:136
-msgid "Run tests across Python versions with nox"
-msgstr "noxでPythonのバージョンにまたがってテストを実行する"
+#: ../../tests/run-tests.md:166
+#, fuzzy
+msgid "Run tests with Hatch"
+msgstr "pytest を使ってテストを実行する"
-#: ../../tests/run-tests.md:138
-msgid "**Nox** is a great automation tool to learn because it:"
+#: ../../tests/run-tests.md:168
+msgid ""
+"**Hatch** is a modern Python packaging and environment manager that "
+"integrates test running capabilities directly into your `pyproject.toml`."
+" Unlike Nox (which uses a separate `noxfile.py`), Hatch keeps all your "
+"project configuration in one place, making it ideal if you're already "
+"using Hatch for packaging workflows."
+msgstr ""
+
+#: ../../tests/run-tests.md:174
+msgid "Why Hatch for testing?"
+msgstr ""
+
+#: ../../tests/run-tests.md:176
+msgid "Configuration lives in `pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:178
+msgid "Integrates seamlessly with Hatch's packaging and build workflows"
+msgstr ""
+
+#: ../../tests/run-tests.md:179
+msgid "No separate Python file needed (unlike Nox)"
+msgstr ""
+
+#: ../../tests/run-tests.md:180
+msgid "Easy to share standardized test environments across your team"
+msgstr ""
+
+#: ../../tests/run-tests.md:182
+#, fuzzy
+msgid "Setting up Hatch environments"
+msgstr "テスト環境"
+
+#: ../../tests/run-tests.md:184
+msgid ""
+"Hatch environments are defined in your `pyproject.toml`. Rather than "
+"duplicating dependencies, use `dependency-groups` to reference your test "
+"dependencies:"
+msgstr ""
+
+#: ../../tests/run-tests.md:205
+msgid ""
+"This approach keeps your test dependencies in one place and avoids "
+"duplication. For a complete example, see our [packaging template "
+"tutorial](https://www.pyopensci.org/tutorials/create-python-package.html)"
+" which shows a full `pyproject.toml` configuration."
+msgstr ""
+
+#: ../../tests/run-tests.md:210
+msgid "Running tests with Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:212
+msgid ""
+"Once you've defined your test environment, you can run tests with simple "
+"commands:"
+msgstr ""
+
+#: ../../tests/run-tests.md:215
+#, fuzzy
+msgid "**List available environments:**"
+msgstr "テスト環境"
+
+#: ../../tests/run-tests.md:221
+msgid "**Run pytest in the test environment:**"
+msgstr ""
+
+#: ../../tests/run-tests.md:228
+#, fuzzy
+msgid "Testing across Python versions"
+msgstr "Pythonのバージョンにまたがってテストを実行する"
+
+#: ../../tests/run-tests.md:230
+msgid ""
+"To test across multiple Python versions, define a matrix in your "
+"`pyproject.toml`:"
+msgstr ""
+
+#: ../../tests/run-tests.md:249
+msgid "Then run all versions with a single command:"
+msgstr ""
+
+#: ../../tests/run-tests.md:255
+msgid ""
+"Hatch will automatically run your tests on Python 3.10, 3.11, and 3.12. "
+"If you only want to test a specific Python version:"
+msgstr ""
+
+#: ../../tests/run-tests.md:262
+msgid "Using Hatch in GitHub Actions"
+msgstr ""
+
+#: ../../tests/run-tests.md:264
+msgid "Hatch integrates well with CI/CD. Here's a minimal GitHub Actions setup:"
+msgstr ""
+
+#: ../../tests/run-tests.md:288
+msgid ""
+"Since all of your test dependencies are declared in the `dependency-"
+"group` table of your `pyproject.toml`, your CI environment is "
+"reproducible and consistent with the environments that you are using for "
+"local testing."
+msgstr ""
+
+#: ../../tests/run-tests.md:292
+msgid "Nox vs Hatch: choosing the right tool"
+msgstr ""
+
+#: ../../tests/run-tests.md:294
+msgid ""
+"Both Hatch and Nox are excellent automation tools / task runners for "
+"running tests across Python versions. Here's how they compare to help you"
+" decide which fits your workflow:"
+msgstr ""
+
+#: ../../tests/run-tests.md:298
+msgid "Hatch"
+msgstr ""
+
+#: ../../tests/run-tests.md:300
+msgid ""
+"**Configuration:** Hatch uses a `declarative` configuration approach. You"
+" tell it what goes into an environment and that empowers Hatch to create "
+"the environment for you. All configuration settings live in your "
+"`pyproject.toml` alongside your project metadata"
+msgstr ""
+
+#: ../../tests/run-tests.md:302
+msgid ""
+"**Integration:** Hatch is package management tool that also has an "
+"integrated automation / task runner. Using Hatch means you are using the "
+"same tool for all of your packaging and automation needs."
+msgstr ""
+
+#: ../../tests/run-tests.md:303
+msgid ""
+"**Learning curve:** Easier if you prefer declarative configuration over a"
+" code based workflow"
+msgstr ""
+
+#: ../../tests/run-tests.md:304
+msgid ""
+"**packaging scope** Hatch is better for simpler workflows that focus on "
+"testing and packaging. If you have more complex builds or are creating a "
+"non pure python package you might prefer Nox. The scientific Python "
+"development guide has more details on this."
+msgstr ""
+
+#: ../../tests/run-tests.md:305
+msgid ""
+"**Best for:** Teams using Hatch for packaging, or those who want "
+"standardized configuration in one place"
+msgstr ""
+
+#: ../../tests/run-tests.md:308
+msgid "Nox"
+msgstr ""
+
+#: ../../tests/run-tests.md:310
+msgid "**Configuration:** Python-driven via `noxfile.py` for maximum flexibility"
+msgstr ""
+
+#: ../../tests/run-tests.md:311
+msgid "**Customization:** Great for complex workflows that need custom logic"
+msgstr ""
+
+#: ../../tests/run-tests.md:312
+msgid ""
+"**Learning curve:** Easier if you already know Python and want flexible "
+"session control"
+msgstr ""
+
+#: ../../tests/run-tests.md:314
+msgid ""
+"**Best for:** Complex automation needs, building docs alongside tests, or"
+" workflows that don't fit the standard model"
+msgstr ""
+
+#: ../../tests/run-tests.md:317
+msgid "What we recommend"
+msgstr ""
+
+#: ../../tests/run-tests.md:319
+msgid ""
+"**If you're using Hatch for packaging:** Use Hatch for testing too. You "
+"get everything in one place and one consistent tool."
+msgstr ""
+
+#: ../../tests/run-tests.md:322
+msgid ""
+"**If you need maximum flexibility:** Choose Nox. Its Python-driven "
+"approach lets you implement almost any workflow."
+msgstr ""
+
+#: ../../tests/run-tests.md:325
+msgid ""
+"**If you're just starting out:** Start with Hatch. It's simpler to set up"
+" and understand, and you can always switch to Nox later if you need to."
+msgstr ""
+
+#: ../../tests/run-tests.md:328
+msgid ""
+"**Both tools are good choices.** For a more comprehensive guide to using"
+" Nox, see [Run tests with Nox](run-tests-nox.md) and the [Scientific "
+"Python testing guide](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests.md:334
+msgid ""
+"Now that you understand how to run tests locally across Python versions, "
+"you can learn about [running tests automatically in GitHub Actions with "
+"continuous integration](tests-ci). You can also review [test types](test-"
+"types) and [write tests](write-tests) for your package."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:9
+msgid ""
+"**Nox** is a Python-based automation tool for running tests across "
+"multiple Python versions and managing isolated test environments. If you "
+"prefer Python-driven configuration over TOML, or need complex automation "
+"workflows, Nox is an excellent choice."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:14
+msgid ""
+"For more information about Nox, see the [official Nox "
+"documentation](https://nox.thea.codes/) or the [Scientific Python guide "
+"to testing](https://scientific-python.org/tools/testing)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:18
+msgid "Why Nox?"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:20
+#, fuzzy
+msgid "**Nox** is a great automation tool because it:"
msgstr "**Nox** は素晴らしい自動化ツールです:"
-#: ../../tests/run-tests.md:140
-msgid "Is Python-based making it accessible if you already know Python and"
+#: ../../tests/run-tests-nox.md:22
+#, fuzzy
+msgid "Is Python-based, making it accessible if you already know Python"
msgstr "Pythonベースですので、Pythonをすでに知っていれば利用しやすいです。"
-#: ../../tests/run-tests.md:141
-msgid "Will create isolated environments to run workflows."
+#: ../../tests/run-tests-nox.md:23
+#, fuzzy
+msgid "Will create isolated environments to run workflows"
msgstr "ワークフローを実行するための隔離された環境を構築します。"
-#: ../../tests/run-tests.md:143
+#: ../../tests/run-tests-nox.md:24
+msgid "Supports complex, custom automation beyond standard testing"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:25
+msgid "Is flexible and powerful for intricate build and test scenarios"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:27
+#, fuzzy
msgid ""
"`nox` simplifies creating and managing testing environments. With `nox`, "
-"you can set up virtual environments, and run tests across Python versions"
-" using the environment manager of your choice with a single command."
+"you can set up virtual environments and run tests across Python versions "
+"using the environment manager of your choice with a single command."
msgstr ""
"`nox` はテスト環境の作成と管理を簡単にします。 `nox` を使うと、仮想環境をセットアップし、好きな環境マネージャを使って Python "
"のバージョンをまたいだテストをコマンド一つで実行することができます。"
-#: ../../tests/run-tests.md:148
-msgid "Nox Installations"
+#: ../../tests/run-tests-nox.md:31
+msgid "Set up Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:33
+#, fuzzy
+msgid ""
+"To get started with Nox, you create a `noxfile.py` file at the root of "
+"your project directory. You then define commands using Python functions."
+msgstr ""
+"noxを使い始めるには、プロジェクトディレクトリのルートに `noxfile.py` ファイルを作成します。 "
+"そして、Pythonの関数を使ってコマンドを定義します。 以下にその例をいくつか挙ます。"
+
+#: ../../tests/run-tests-nox.md:37
+#, fuzzy
+msgid "Nox installations"
msgstr "Noxのインストール"
-#: ../../tests/run-tests.md:150
+#: ../../tests/run-tests-nox.md:39
+#, fuzzy
msgid ""
-"When you install and use nox to run tests across different Python "
-"versions, nox will create and manage individual `venv` environments for "
-"each Python version that you specify in the nox function."
+"When you install and use Nox to run tests across different Python "
+"versions, Nox will create and manage individual `venv` environments for "
+"each Python version that you specify in the Nox function. Nox will manage"
+" each environment on its own."
msgstr ""
"異なる Python バージョン間でテストを実行するために nox をインストールして使用する場合、nox は nox 関数で指定した "
"Python バージョンごとに個別の `venv` 環境を作成して管理します。"
-#: ../../tests/run-tests.md:152
-msgid "Nox will manage each environment on its own."
-msgstr "Noxはそれぞれの環境を独自に管理します。"
-
-#: ../../tests/run-tests.md:154
+#: ../../tests/run-tests-nox.md:45
+#, fuzzy
msgid ""
"Nox can also be used for other development tasks such as building "
"documentation, creating your package distribution, and testing "
-"installations across both PyPI related environments (e.g. venv, "
-"virtualenv) and `conda` (e.g. `conda-forge`)."
+"installations across both PyPI-related environments (e.g., venv, "
+"virtualenv) and `conda` (e.g., `conda-forge`)."
msgstr ""
"nox は、ドキュメントのビルド、パッケージ配布の作成、PyPI 関連の環境 (venv や virtualenv など) と `conda` "
"(conda-forge` など) の両方にわたるインストールのテストなど、その他の開発作業にも使用できます。"
-#: ../../tests/run-tests.md:158
-msgid ""
-"To get started with nox, you create a `noxfile.py` file at the root of "
-"your project directory. You then define commands using Python functions. "
-"Some examples of that are below."
-msgstr ""
-"noxを使い始めるには、プロジェクトディレクトリのルートに `noxfile.py` ファイルを作成します。 "
-"そして、Pythonの関数を使ってコマンドを定義します。 以下にその例をいくつか挙ます。"
-
-#: ../../tests/run-tests.md:162
-msgid "Test Environments"
+#: ../../tests/run-tests-nox.md:50
+#, fuzzy
+msgid "Test environments"
msgstr "テスト環境"
-#: ../../tests/run-tests.md:164
+#: ../../tests/run-tests-nox.md:52
+#, fuzzy
msgid ""
-"By default, `nox` uses the Python built in `venv` environment manager. A "
+"By default, `nox` uses Python's built-in `venv` environment manager. A "
"virtual environment (`venv`) is a self-contained Python environment that "
"allows you to isolate and manage dependencies for different Python "
"projects. It helps ensure that project-specific libraries and packages do"
@@ -728,92 +1032,83 @@ msgstr ""
" Python 環境で、異なる Python プロジェクトの依存関係を分離して管理することができます。 "
"プロジェクト固有のライブラリやパッケージが互いに干渉しないようにし、クリーンで整理された開発環境を促進します。"
-#: ../../tests/run-tests.md:166
-msgid ""
-"An example of using nox to run tests in `venv` environments for Python "
-"versions 3.9, 3.10, 3.11 and 3.12 is below."
-msgstr "noxを使ってPythonバージョン3.9、3.10、3.11、3.12の `venv` 環境でテストを実行する例を以下に示します。"
-
-#: ../../tests/run-tests.md:169
-msgid ""
-"Note that for the code below to work, you need to have all 4 versions of "
-"Python installed on your computer for `nox` to find."
-msgstr ""
-"以下のコードが動作するためには、 `nox` "
-"が見つけることができる4つのバージョンのPythonがコンピュータにインストールされている必要があることに注意してください。"
-
-#: ../../tests/run-tests.md:172
+#: ../../tests/run-tests-nox.md:58
msgid "Nox with venv environments"
msgstr "venv環境のnox"
-#: ../../tests/run-tests.md:175
-msgid ""
-"TODO: add some tests above and show what the output would look like in "
-"the examples below..."
-msgstr "TODO: 上記のテストをいくつか追加し、以下の例で出力がどのようになるかを示す..."
-
-#: ../../tests/run-tests.md:178
+#: ../../tests/run-tests-nox.md:60
+#, fuzzy
msgid ""
-"Below is an example of setting up nox to run tests using `venv` which is "
-"the built in environment manager that comes with base Python."
+"Below is an example of setting up Nox to run tests using `venv`, which is"
+" the built-in environment manager that comes with base Python."
msgstr "以下は、Pythonに組み込まれている環境マネージャーである `venv` を使ってテストを実行するようにnoxをセットアップする例です。"
-#: ../../tests/run-tests.md:180
+#: ../../tests/run-tests-nox.md:63
+#, fuzzy
msgid ""
-"Note that the example below assumes that you have [setup your "
-"`pyproject.toml` to declare test dependencies in a way that pip can "
-"understand](../package-structure-code/declare-dependencies.md). An "
-"example of that setup is below."
+"Note that the example below assumes that you have setup your "
+"`pyproject.toml` to declare test dependencies using `project.optional-"
+"dependencies`:"
msgstr ""
"以下の例では、 [pipが理解できる方法でテストの依存関係を宣言するように`pyproject.toml`をセットアップする"
"](../package-structure-code/declare-dependencies.md) "
"ことを前提としていることに注意してください。 そのセットアップの例を以下に示します。"
-#: ../../tests/run-tests.md:201
+#: ../../tests/run-tests-nox.md:83
+#, fuzzy
msgid ""
-"If you have the above setup, then you can use "
-"`session.install(\".[tests]\")` to install your test dependencies. Notice"
-" that below one single nox session allows you to run your tests on 4 "
-"different Python environments (Python 3.9, 3.10, 3.11, and 3.12)."
+"With this setup, you can use `session.install(\".[tests]\")` to install "
+"your test dependencies. Notice that below one single Nox session allows "
+"you to run your tests on 4 different Python environments (Python 3.9, "
+"3.10, 3.11, and 3.12)."
msgstr ""
"上記の設定ができていれば、 `session.install(\".[tests]\")` "
"を使ってテストの依存関係をインストールすることができます。 以下のように、1つのnoxセッションで4つの異なるPython環境(Python "
"3.9、3.10、3.11、3.12)でテストを実行できることに注意してください。"
-#: ../../tests/run-tests.md:222
+#: ../../tests/run-tests-nox.md:89
+msgid ""
+"For this to run you will need to have python3.9, python3.10, python3.11, "
+"and python3.12 installed on your computer. Otherwise nox will skip "
+"running tests for whatever versions are missing."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:107
+#, fuzzy
msgid ""
-"Above you create a nox session in the form of a function with a "
+"Above you create a Nox session in the form of a function with a "
"`@nox.session` decorator. Notice that within the decorator you declare "
-"the versions of python that you wish to run."
+"the versions of Python that you wish to run."
msgstr ""
"上の例では、 `@nox.session` デコレーターを使って関数の形で nox セッションを作成しています。 デコレータの中で、実行したい "
"python のバージョンを宣言していることに注意してください。"
-#: ../../tests/run-tests.md:226
+#: ../../tests/run-tests-nox.md:111
+#, fuzzy
msgid ""
-"To run the above you'd execute the following command, specifying which "
+"To run the above, you'd execute the following command, specifying which "
"session with `--session` (sometimes shortened to `-s`). Your function "
-"above is called test, therefore the session name is test."
+"above is called `test`, therefore the session name is `test`:"
msgstr ""
"上記を実行するには、 `--session` ( `-s` "
"と短縮されることもある)でセッションを指定し、以下のコマンドを実行します。上記の関数はtestという名前なので、セッション名はtestです。"
-#: ../../tests/run-tests.md:234
+#: ../../tests/run-tests-nox.md:119
msgid "Nox with conda / mamba"
msgstr "conda / mamba による nox"
-#: ../../tests/run-tests.md:236
+#: ../../tests/run-tests-nox.md:121
+#, fuzzy
msgid ""
-"Below is an example for setting up nox to use mamba (or conda) for your "
-"environment manager. Note that unlike venv, conda can automatically "
-"install the various versions of Python that you need. You won't need to "
-"install all four Python versions if you use conda/mamba, like you do with"
-" `venv`."
+"Below is an example for setting up Nox to use mamba (or conda) for your "
+"environment manager. Unlike venv, conda can automatically install the "
+"various versions of Python that you need. You won't need to install all "
+"four Python versions if you use conda/mamba, like you do with `venv`."
msgstr ""
"以下は、noxが環境マネージャーにmamba(またはconda)を使うように設定する例です。venvと違って、condaは必要なPythonの様々なバージョンを自動的にインストールできることに注意してください。conda/mambaを使う場合は、"
" `venv` のように4つのPythonバージョンをインストールする必要はありません。"
-#: ../../tests/run-tests.md:242
+#: ../../tests/run-tests-nox.md:127
msgid ""
"For `conda` to work with `nox`, you will need to ensure that either "
"`conda` or `mamba` is installed on your computer."
@@ -821,16 +1116,50 @@ msgstr ""
"`nox` で `conda` を動作させるには、コンピュータに `conda` か `mamba` "
"のどちらかがインストールされていることを確認する必要があります。"
-#: ../../tests/run-tests.md:264
+#: ../../tests/run-tests-nox.md:150
msgid "To run the above session you'd use:"
msgstr "上記のセッションを実行するには、次のようにします:"
+#: ../../tests/run-tests-nox.md:156
+msgid "Hatch vs Nox"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:158
+msgid ""
+"If you're trying to decide between Hatch and Nox, see the [comparison and"
+" recommendations on the main testing page](run-tests.md)."
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:161
+msgid "In summary"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:163
+msgid ""
+"**Choose Hatch** if you're already using Hatch for packaging and want "
+"everything in one place"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:165
+msgid ""
+"**Choose Nox** if you need maximum flexibility, prefer Python-driven "
+"configuration, or need complex automation workflows"
+msgstr ""
+
+#: ../../tests/run-tests-nox.md:170
+msgid ""
+"Now that you understand how to run tests locally with Nox, you can learn "
+"about [running tests automatically with continuous integration](tests-ci)"
+" or [running tests with Hatch](run-tests.md)."
+msgstr ""
+
#: ../../tests/test-types.md:1
msgid "Test Types for Python packages"
msgstr "Pythonパッケージのテストタイプ"
#: ../../tests/test-types.md:3
-msgid "Three types of tests: Unit, Integration & Functional Tests"
+#, fuzzy
+msgid "Three types of tests: unit, integration, and functional tests"
msgstr "3種類のテスト: 単体テスト、統合テスト、機能テスト"
#: ../../tests/test-types.md:5
@@ -839,37 +1168,27 @@ msgid ""
"creating your test suite:"
msgstr "テストスイートを作成する際に考慮したいテストには、さまざまなタイプがあります:"
-#: ../../tests/test-types.md:8
+#: ../../tests/test-types.md:8 ../../tests/test-types.md:15
msgid "Unit tests"
msgstr "単体テスト"
-#: ../../tests/test-types.md:9
-msgid "Integration"
-msgstr "統合"
+#: ../../tests/test-types.md:9 ../../tests/test-types.md:93
+msgid "Integration tests"
+msgstr "統合テスト"
#: ../../tests/test-types.md:10
-msgid "End-to-end (also known as Functional) tests"
+#, fuzzy
+msgid "End-to-end (also known as functional) tests"
msgstr "エンドツーエンド(機能テストとも呼ばれる)テスト"
#: ../../tests/test-types.md:12
+#, fuzzy
msgid ""
"Each type of test has a different purpose. Here, you will learn about all"
-" three types of tests."
+" three types of tests by working through simple examples."
msgstr "それぞれのテストには異なる目的があります。 ここでは、3種類のテストすべてについて学びます。"
-#: ../../tests/test-types.md:15
-msgid ""
-"I think this page would be stronger if we did have some examples from our"
-" package here: https://github.com/pyOpenSci/pyosPackage"
-msgstr ""
-"私たちのパッケージからの例があれば、このページはもっと強くなると思います: "
-"https://github.com/pyOpenSci/pyosPackage "
-
-#: ../../tests/test-types.md:20
-msgid "Unit Tests"
-msgstr "単体テスト"
-
-#: ../../tests/test-types.md:22
+#: ../../tests/test-types.md:17
msgid ""
"A unit test involves testing individual components or units of code in "
"isolation to ensure that they work correctly. The goal of unit testing is"
@@ -877,49 +1196,61 @@ msgid ""
"method level, performs its intended task correctly."
msgstr "単体テストは、個々のコンポーネントやコードの単位を分離してテストし、それらが正しく動作することを確認するものです。単体テストの目的は、ソフトウェアの各部分、通常は関数やメソッドのレベルが、意図したタスクを正しく実行することを検証することです。"
-#: ../../tests/test-types.md:24
+#: ../../tests/test-types.md:22
+#, fuzzy
msgid ""
"Unit tests can be compared to examining each piece of your puzzle to "
-"ensure parts of it are not broken. If all of the pieces of your puzzle "
-"don’t fit together, you will never complete it. Similarly, when working "
-"with code, tests ensure that each function, attribute, class, method "
-"works properly when isolated."
+"ensure parts or subsections of it are not broken. If all of the pieces of"
+" that section of your puzzle don't fit together, you will never complete "
+"it. Similarly, when working with code, tests ensure that each function, "
+"attribute, class, and method works properly when isolated."
msgstr "単体テストは、パズルの各パーツが壊れていないかどうかを調べることに例えることができます。パズルのピースがすべて合わなければ、完成することはありません。同様に、コードを扱う場合、テストは各関数、プロパティ、クラス、メソッドが分離されたときに正しく機能することを保証します。"
-#: ../../tests/test-types.md:26
+#: ../../tests/test-types.md:28
+#, fuzzy
msgid ""
-"**Unit test example:** Pretend that you have a function that converts a "
-"temperature value from Celsius to Fahrenheit. A test for that function "
-"might ensure that when provided with a value in Celsius, the function "
-"returns the correct value in degrees Fahrenheit. That function is a unit "
-"test. It checks a single unit (function) in your code."
+"**Unit test example:** Suppose you have a function that adds two numbers "
+"together. A unit test for that function ensures that when provided with "
+"two numbers, it returns the correct sum. This is a unit test because it "
+"checks a single unit (function) in isolation."
msgstr ""
"**ユニットテスト例:** "
"温度値を摂氏から華氏に変換する関数があるとします。その関数のテストは、摂氏の値が提供されたとき、その関数が正しい華氏の値を返すことを保証するかもしれません。この関数はユニットテストです。これは、コード内の1つのユニット(関数)をチェックします。"
-#: ../../tests/test-types.md:44
+#: ../../tests/test-types.md:54
msgid ""
"Example unit test for the above function. You'd run this test using the "
"`pytest` command in your **tests/** directory."
msgstr "上記の関数のユニットテスト例。このテストは、 **tests/** ディレクトリの `pytest` コマンドを使って実行します。"
-#: ../../tests/test-types.md:65 ../../tests/test-types.md:115
+#: ../../tests/test-types.md:76
+msgid ""
+"Notice that the tests above don't just test one case where numbers are "
+"added together. Instead, they test multiple scenarios: adding positive "
+"numbers, adding a negative number, and adding zero. This helps ensure "
+"that the `add_numbers` function behaves correctly in different situations"
+" and is the beginning of thinking about programming defensively."
+msgstr ""
+
+#: ../../tests/test-types.md:83
+msgid ""
+"You can run this test from your terminal using `pytest "
+"tests/test_math_utils.py`."
+msgstr ""
+
+#: ../../tests/test-types.md:86 ../../tests/test-types.md:215
msgid ""
"image of puzzle pieces that all fit together nicely. The puzzle pieces "
"are colorful - purple, green and teal."
msgstr "パズルのピースがうまく組み合わさったような画像です。パズルのピースは紫色、緑色、鴨の羽色とカラフルです。"
-#: ../../tests/test-types.md:69
+#: ../../tests/test-types.md:90
msgid ""
"Your unit tests should ensure each part of your code works as expected on"
" its own."
msgstr "ユニットテストでは、コードの各部分がそれ自体で期待通りに動作することを確認する必要があります。"
-#: ../../tests/test-types.md:72
-msgid "Integration tests"
-msgstr "統合テスト"
-
-#: ../../tests/test-types.md:74
+#: ../../tests/test-types.md:95
msgid ""
"Integration tests involve testing how parts of your package work together"
" or integrate. Integration tests can be compared to connecting a bunch of"
@@ -927,23 +1258,34 @@ msgid ""
"on how different pieces of your code fit and work together."
msgstr "統合テストでは、パッケージの各パーツがどのように連動するか、あるいは統合されるかをテストします。統合テストは、パズルのピースをつなげて全体像を作るようなものです。統合テストは、コードのさまざまな部分がどのように適合し、連携して動作するかに焦点を当てます。"
-#: ../../tests/test-types.md:76
+#: ../../tests/test-types.md:100
msgid ""
-"For example, if you had a series of steps that collected temperature data"
-" in a spreadsheet, converted it from degrees celsius to Fahrenheit and "
-"then provided an average temperature for a particular time period. An "
-"integration test would ensure that all parts of that workflow behaved as "
-"expected."
-msgstr "例えば、スプレッドシートに温度データを収集し、摂氏から華氏に変換し、特定の期間の平均温度を提供する一連のステップがあったとします。統合テストは、そのワークフローのすべての部分が期待通りに動作することを保証します。"
+"For example, suppose you have functions that convert temperatures and "
+"calculate statistics. An integration test would ensure that these "
+"functions work together correctly in a workflow where you convert "
+"temperatures and then analyze them."
+msgstr ""
+
+#: ../../tests/test-types.md:178
+msgid ""
+"Here's an integration test that checks how the conversion and statistics "
+"functions work together:"
+msgstr ""
-#: ../../tests/test-types.md:107
+#: ../../tests/test-types.md:204
+msgid ""
+"This integration test verifies that the conversion and averaging "
+"functions work together as expected in a real workflow."
+msgstr ""
+
+#: ../../tests/test-types.md:207
msgid ""
"image of two puzzle pieces with some missing parts. The puzzle pieces are"
" purple teal yellow and blue. The shapes of each piece don’t fit "
"together."
msgstr "パズルのピースが2つあり、一部欠けている画像です。パズルのピースは紫・鴨の羽色・黄色・青色。 それぞれのピースの形が合いません。"
-#: ../../tests/test-types.md:112
+#: ../../tests/test-types.md:212
msgid ""
"If puzzle pieces have missing ends, they can’t work together with other "
"elements in the puzzle. The same is true with individual functions, "
@@ -951,92 +1293,220 @@ msgid ""
"individually and together to perform certain sets of tasks."
msgstr "パズルのピースの両端が欠けていると、パズルの他の要素と連動することができません。ソフトウェアの個々の関数、メソッド、クラスについても同様です。コードは、ある一連のタスクを実行するために、個々に、そして一緒に働く必要があります。"
-#: ../../tests/test-types.md:120
+#: ../../tests/test-types.md:220
msgid ""
"Your integration tests should ensure that parts of your code that are "
"expected to work together, do so as expected."
msgstr "統合テストは、コードの一部が連携して動作することが期待されており、期待通りに動作することを保証するものでなければなりません。"
-#: ../../tests/test-types.md:124
+#: ../../tests/test-types.md:224
msgid "End-to-end (functional) tests"
msgstr "エンドツーエンド(機能)テスト"
-#: ../../tests/test-types.md:126
+#: ../../tests/test-types.md:226
+#, fuzzy
msgid ""
"End-to-end tests (also referred to as functional tests) in Python are "
"like comprehensive checklists for your software. They simulate real user "
-"end-to-end workflows to make sure the code base supports real life "
-"applications and use-cases from start to finish. These tests help catch "
-"issues that might not show up in smaller tests and ensure your entire "
-"application or program behaves correctly. Think of them as a way to give "
-"your software a final check before it's put into action, making sure it's"
-" ready to deliver a smooth experience to its users."
+"workflows to make sure the code base supports real-life applications and "
+"use-cases from start to finish. These tests help catch issues that might "
+"not show up in smaller tests and ensure your entire application behaves "
+"correctly. Think of them as a way to give your software a final check "
+"before it's put into action, making sure it's ready to deliver a smooth "
+"user experience."
msgstr ""
"Python "
"におけるエンドツーエンドのテスト(機能テストとも呼ばれる)は、ソフトウェアの包括的なチェックリストのようなものです。実際のユーザーのエンドツーエンドのワークフローをシミュレートし、コードベースが実際のアプリケーションやユースケースを最初から最後までサポートすることを確認します。これらのテストは、小規模なテストでは表示されないかもしれない問題をキャッチし、アプリケーションやプログラム全体が正しく動作することを確認するのに役立ちます。ソフトウェアを実用化する前に最終チェックを行い、ユーザーにスムーズなエクスペリエンスを提供する準備ができていることを確認する方法だと考えてください。"
-#: ../../tests/test-types.md:128
+#: ../../tests/test-types.md:235
msgid "Image of a completed puzzle showing a daisy"
msgstr "デイジーを描いたパズルの完成イメージ"
-#: ../../tests/test-types.md:133
+#: ../../tests/test-types.md:240
+#, fuzzy
msgid ""
-"End-to-end or functional tests represent an entire workflow that you "
-"expect your package to support."
+"End-to-end or functional tests represent an entire workflow that your "
+"package supports."
msgstr "エンドツーエンドテストまたは機能テストは、パッケージがサポートすることを期待するワークフロー全体を表します。"
-#: ../../tests/test-types.md:137
+#: ../../tests/test-types.md:244
+msgid ""
+"**End-to-end test example:** Let's say your package opens and "
+"processes/converts temperature data from Celsius to Fahrenheit and then "
+"calculates the average temperature. An end-to-end test would simulate "
+"this entire workflow, ensuring that the package correctly handles the "
+"input temperature data and returns a summary average value. An end-to-end"
+" test would provide sample data, run the entire workflow, and verify that"
+" the final output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:274
+msgid ""
+"This end-to-end test exercises the entire user workflow: providing sample"
+" data, converting and averaging it, and verifying the output is correct."
+msgstr ""
+
+#: ../../tests/test-types.md:278
+#, fuzzy
msgid ""
-"End-to-end test also test how a program runs from start to finish. A "
-"tutorial that you add to your documentation that runs in CI in an "
-"isolated environment is another example of an end-to-end test."
+"End-to-end tests also verify how a program runs from start to finish. A "
+"tutorial that you add to your documentation and run in CI is another "
+"example of an end-to-end test. For example, a Jupyter (`.ipynb`) notebook"
+" or `.md` file with embedded code that demonstrates a complete user "
+"workflow."
msgstr "エンドツーエンドのテストも、プログラムが最初から最後までどのように実行されるかをテストします。ドキュメントに追加するチュートリアルは、分離された環境のCIで実行され、エンドツーエンドのテストのもう一つの例です。"
-#: ../../tests/test-types.md:140
+#: ../../tests/test-types.md:285
+#, fuzzy
msgid ""
"For scientific packages, creating short tutorials that highlight core "
"workflows that your package supports, that are run when your "
-"documentation is built could also serve as end-to-end tests."
+"documentation is built, could also serve as end-to-end tests."
msgstr "科学的なパッケージの場合、パッケージがサポートする中核的なワークフローを強調する短いチュートリアルを作成し、ドキュメントのビルド時に実行することで、エンドツーエンドのテストを兼ねることができます。"
-#: ../../tests/test-types.md:143
-msgid "Comparing unit, integration and end-to-end tests"
+#: ../../tests/test-types.md:290
+msgid "When to use which test type"
+msgstr ""
+
+#: ../../tests/test-types.md:292
+msgid ""
+"If you’re new to testing, start with unit tests. They are the simplest to"
+" write, fastest to run, and easiest to debug. As your package grows, you "
+"can then add integration and end-to-end tests where they add the most "
+"value."
+msgstr ""
+
+#: ../../tests/test-types.md:294
+msgid "Start by writing unit tests"
+msgstr ""
+
+#: ../../tests/test-types.md:296
+msgid "Are you testing a single function, method, or class in isolation?"
+msgstr ""
+
+#: ../../tests/test-types.md:298
+msgid "→ Yes: Write a [unit test](test-types.md#unit-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:300
+msgid "Example: Check that add_numbers(2, 3) returns 5"
+msgstr ""
+
+#: ../../tests/test-types.md:301
+msgid "Unit tests don’t rely on other parts of your code"
+msgstr ""
+
+#: ../../tests/test-types.md:302
+msgid "These tests form the foundation of your test suite"
+msgstr ""
+
+#: ../../tests/test-types.md:303
+msgid "If something breaks, unit tests make it easy to find where"
+msgstr ""
+
+#: ../../tests/test-types.md:305
+#, fuzzy
+msgid "Add integration tests next"
+msgstr "統合テスト"
+
+#: ../../tests/test-types.md:307
+msgid "Are you testing how multiple components work together?"
+msgstr ""
+
+#: ../../tests/test-types.md:309
+msgid "→ **Yes:** Write [integration tests](test-types.md#integration-tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:311
+msgid "Example: Converting temperatures and then computing their average"
+msgstr ""
+
+#: ../../tests/test-types.md:312
+msgid "Integration tests assume individual pieces already work"
+msgstr ""
+
+#: ../../tests/test-types.md:313
+msgid "These tests verify that components interact correctly"
+msgstr ""
+
+#: ../../tests/test-types.md:315
+msgid "Use end-to-end tests for core workflows"
+msgstr ""
+
+#: ../../tests/test-types.md:317
+msgid "Are you testing a complete, realistic user workflow from start to finish?"
+msgstr ""
+
+#: ../../tests/test-types.md:319
+msgid ""
+"→ **Yes:** Use an [end-to-end test](test-types.md#end-to-end-functional-"
+"tests)."
+msgstr ""
+
+#: ../../tests/test-types.md:321
+msgid "Example: Run a full data-processing workflow a user would follow"
+msgstr ""
+
+#: ../../tests/test-types.md:322
+msgid "These tests often mirror examples in your documentation"
+msgstr ""
+
+#: ../../tests/test-types.md:323
+msgid "Use them sparingly for the most important workflows."
+msgstr ""
+
+#: ../../tests/test-types.md:324
+msgid "Tutorials run during documentation builds can serve as end-to-end tests."
+msgstr ""
+
+#: ../../tests/test-types.md:326
+#, fuzzy
+msgid "Comparing unit, integration, and end-to-end tests"
msgstr "ユニットテスト、統合テスト、エンドツーエンドテストの比較"
-#: ../../tests/test-types.md:145
+#: ../../tests/test-types.md:328
+#, fuzzy
msgid ""
"Unit tests, integration tests, and end-to-end tests have complementary "
-"advantages and disadvantages. The fine-grained nature of unit tests make "
-"them well-suited for isolating where errors are occurring. However, unit "
-"tests are not useful for verifying that different sections of code work "
+"advantages and disadvantages. The fine-grained nature of unit tests makes"
+" them well-suited for isolating where errors are occurring. However, unit"
+" tests are not useful for verifying that different sections of code work "
"together."
msgstr ""
"単体テスト、統合テスト、エンドツーエンドテストには、それぞれ相補的な長所と短所があります。 "
"単体テストは、そのきめ細かな性質から、どこでエラーが発生しているかを切り分けるのに適しています。 "
"しかし、ユニットテストは、コードの異なるセクションが連携して動作することを検証するのには役に立ちません。"
-#: ../../tests/test-types.md:147
+#: ../../tests/test-types.md:334
msgid ""
-"Integration and end-to-end tests verify that the different portions of "
-"the program work together, but are less well-suited for isolating where "
-"errors are occurring. For example, when you refactor your code, it is "
-"possible that that your end-to-end tests will break. But if the refactor "
-"didn't introduce new behavior to your existing code, then you can rely on"
-" your unit tests to continue to pass, testing the original functionality "
-"of your code."
-msgstr "統合テストとエンドツーエンドテストは、プログラムのさまざまな部分が連携して動作することを検証しますが、どこでエラーが発生しているかを切り分けるにはあまり適していません。例えば、コードをリファクタリングすると、エンドツーエンドのテストが壊れる可能性があります。しかし、リファクタリングによって既存のコードに新しい動作が導入されなかったのであれば、コードの元の機能をテストするユニットテストがパスし続けることに頼ることができます。"
+"Integration and end-to-end tests verify that different portions of the "
+"program work together, but are less valuable for immediately isolating "
+"exactly where errors are occurring."
+msgstr ""
-#: ../../tests/test-types.md:152
+#: ../../tests/test-types.md:338
+msgid "Tests don't have to be perfect"
+msgstr ""
+
+#: ../../tests/test-types.md:339
+#, fuzzy
msgid ""
"It is important to note that you don't need to spend energy worrying "
-"about the specifics surrounding the different types of tests. When you "
-"begin to work on your test suite, consider what your package does and how"
-" you may need to test parts of your package. Bring familiar with the "
-"different types of tests can provides a framework to help you think about"
-" writing tests and how different types of tests can complement each "
+"about the specifics of test types. When you begin to work on your test "
+"suite, consider what your package does and how you may need to test parts"
+" of it. Being familiar with different test types provides a framework to "
+"help you think about writing tests and how they can complement each "
"other."
msgstr "重要なのは、さまざまな種類のテストにまつわる詳細について心配することにエネルギーを費やす必要はないということです。テストスイートの作成に取りかかるときには、パッケージが何をするのか、そしてパッケージの一部をどのようにテストする必要があるのかを考えてください。さまざまな種類のテストに慣れ親しむことは、テストの書き方や、さまざまな種類のテストが互いにどのように補完し合えるかを考える際のフレームワークとなります。"
+#: ../../tests/test-types.md:348
+msgid ""
+"Now that you understand test types, learn how to [write effective tests"
+"](write-tests) for your package. Then explore how to [run tests locally"
+"](run-tests) and in [continuous integration](tests-ci). You can also "
+"learn about tracking test coverage using tools like [CodeCov](code-cov)."
+msgstr ""
+
#: ../../tests/tests-ci.md:1
msgid "Run tests with Continuous Integration"
msgstr "継続的インテグレーションによるテストの実行"
@@ -1113,56 +1583,60 @@ msgid "Write tests for your Python package"
msgstr "Pythonパッケージのテストを書く"
#: ../../tests/write-tests.md:3
+#, fuzzy
msgid ""
-"Writing code that tests your package code, also known as test suites, is "
-"important for you as a maintainer, your users, and package contributors. "
-"Test suites consist of sets of functions, methods, and classes that are "
-"written with the intention of making sure a specific part of your code "
-"works as you expected it to."
+"**Writing code** that tests your package code, also known as test suites,"
+" is important for you as a maintainer, your users, and package "
+"contributors. Test suites consist of sets of functions, methods, and "
+"classes that are written with the intention of making sure a specific "
+"part of your code works as you expected it to."
msgstr ""
"パッケージのコードをテストするコードを書くことは、テスト・スイートとしても知られています。 "
"テスト・スイートは、関数、メソッド、クラスのセットで構成され、コードの特定の部分が期待通りに動作することを確認することを意図して書かれます。"
-#: ../../tests/write-tests.md:7
+#: ../../tests/write-tests.md:9
msgid "Why write tests for your package?"
msgstr "なぜパッケージのテストを書くのか?"
-#: ../../tests/write-tests.md:9
+#: ../../tests/write-tests.md:11
+#, fuzzy
msgid ""
-"Tests act as a safety net for code changes. They help you spot and "
-"rectify bugs before they affect users. Tests also instill confidence that"
-" code alterations from contributors won't breaking existing "
-"functionality."
+"Tests act as a safety net for code changes. They help you identify and "
+"fix bugs before they affect users. Tests also instill confidence that "
+"code changes from contributors won't break existing functionality."
msgstr ""
"テストはコード変更のセーフティネットとして機能します。 バグがユーザーに影響を与える前に発見し、修正するのに役立ちます。 "
"テストはまた、貢献者によるコード改変が既存の機能を壊さないという確信を与えます。"
-#: ../../tests/write-tests.md:13
+#: ../../tests/write-tests.md:15
msgid "Writing tests for your Python package is important because:"
msgstr "Pythonパッケージのテストを書くことは重要です:"
-#: ../../tests/write-tests.md:15
+#: ../../tests/write-tests.md:17
+#, fuzzy
msgid ""
-"**Catch Mistakes:** Tests are a safety net. When you make changes or add "
+"**Catch mistakes:** Tests are a safety net. When you make changes or add "
"new features to your package, tests can quickly tell you if you "
"accidentally broke something that was working fine before."
msgstr ""
"**キャッチミス:** "
"テストはセーフティネットです。パッケージに変更を加えたり、新機能を追加したりした場合、テストによって、以前は問題なく動作していたものを誤って壊してしまったかどうかをすぐに知ることができます。"
-#: ../../tests/write-tests.md:16
+#: ../../tests/write-tests.md:20
+#, fuzzy
msgid ""
-"**Save Time:** Imagine you have a magic button that can automatically "
+"**Save time:** Imagine you have a magic button that can automatically "
"check if your package is still working properly. Tests are like that "
-"magic button! They can run all those checks for you saving you time."
+"magic button! They can run all those checks for you, saving you time."
msgstr ""
"**時間を節約する:** "
"あなたのパッケージがまだ正常に動作しているかどうかを自動的にチェックできる魔法のボタンがあるとしましょう。テストは魔法のボタンのようなものです! "
"あなたの時間を節約するために、すべてのチェックを実行してくれます。"
-#: ../../tests/write-tests.md:17
+#: ../../tests/write-tests.md:23
+#, fuzzy
msgid ""
-"**Easier Collaboration:** If you're working with others, or have outside "
+"**Easier collaboration:** If you're working with others or have outside "
"contributors, tests help everyone stay on the same page. Your tests "
"explain how your package is supposed to work, making it easier for others"
" to understand and contribute to your project."
@@ -1170,36 +1644,39 @@ msgstr ""
"**より容易なコラボレーション:** "
"他の人と一緒に仕事をしていたり、外部の協力者がいる場合、テストは全員が同じページにとどまるのに役立ちます。テストは、パッケージがどのように動作するかを説明し、他の人が理解しやすくし、プロジェクトに貢献しやすくします。"
-#: ../../tests/write-tests.md:18
+#: ../../tests/write-tests.md:27
+#, fuzzy
msgid ""
-"**Fearless Refactoring:** Refactoring means making improvements to your "
+"**Fearless refactoring:** Refactoring means making improvements to your "
"code structure without changing its behavior. Tests empower you to make "
-"these changes as if you break something, test failures will let you know."
+"these changes; if you break something, test failures will let you know."
msgstr ""
"**大胆不敵なリファクタリング:** リファクタリングとは、コードの振る舞いを変えることなく、コード構造を改善することです。 "
"テストは、あなたが何かを壊した場合、テストの失敗があなたに知らせてくれるので、このような変更を行う力を与えてくれます。"
-#: ../../tests/write-tests.md:19
+#: ../../tests/write-tests.md:30
+#, fuzzy
msgid ""
"**Documentation:** Tests serve as technical examples of how to use your "
-"package. This can be helpful for a new technical contributor that wants "
-"to contribute code to your package. They can look at your tests to "
+"package. This can be helpful for new technical contributors who want to "
+"contribute code to your package. They can look at your tests to "
"understand how parts of your code functionality fits together."
msgstr ""
"**文書化:** テストは、あなたのパッケージの使い方の技術的な例となります。 "
"これは、あなたのパッケージにコードを提供しようとする新しい技術的貢献者にとって役に立ちます。 "
"彼らはあなたのテストを見て、コードの機能の一部がどのように組み合わされているかを理解することができます。"
-#: ../../tests/write-tests.md:20
+#: ../../tests/write-tests.md:34
+#, fuzzy
msgid ""
-"**Long-Term ease of maintenance:** As your package evolves, tests ensure "
+"**Long-term ease of maintenance:** As your package evolves, tests ensure "
"that your code continues to behave as expected, even as you make changes "
"over time. Thus you are helping your future self when writing tests."
msgstr ""
"**長期的なメンテナンスの容易さ:** "
"パッケージが進化するにつれて、テストは、時間の経過とともに変更を加えても、コードが期待通りに動作し続けることを保証します。こうして、テストを書くときに将来の自分を助けることになります。"
-#: ../../tests/write-tests.md:21
+#: ../../tests/write-tests.md:38
msgid ""
"**Easier pull request reviews:** By running your tests in a CI framework "
"such as GitHub Actions, each time you or a contributor makes a change to "
@@ -1211,11 +1688,11 @@ msgstr ""
"フレームワークでテストを実行することで、あなたや貢献者がコードベースに変更を加えるたびに、コードベースの問題や変更点をキャッチすることができます。"
" これにより、あなたのソフトウェアが期待通りに動作することが保証されます。"
-#: ../../tests/write-tests.md:23
+#: ../../tests/write-tests.md:44
msgid "Tests for user edge cases"
msgstr "ユーザーエッジケースのテスト"
-#: ../../tests/write-tests.md:25
+#: ../../tests/write-tests.md:46
msgid ""
"Edge cases refer to unexpected or \"outlier\" ways that some users may "
"use your package. Tests enable you to address various edge cases that "
@@ -1229,7 +1706,7 @@ msgstr ""
"`dataframe` を期待したのに、ユーザがnumpyの `array` を提供した場合、何が起こるでしょうか? "
"あなたのコードは、このような状況を丁寧に処理し、明確なフィードバックを提供していますか?それとも、原因不明の失敗でユーザーをイライラさせたままにしていますか?"
-#: ../../tests/write-tests.md:33
+#: ../../tests/write-tests.md:55
msgid ""
"For a good introduction to testing, see [this Software Carpentry "
"lesson](https://swcarpentry.github.io/python-novice-"
@@ -1238,44 +1715,44 @@ msgstr ""
"テストの入門書としては、 [このSoftware Carpentryのレッスン](https://swcarpentry.github.io"
"/python-novice-inflammation/10-defensive.html) を参照してください。"
-#: ../../tests/write-tests.md:41
-msgid ""
-"Imagine you're working on a puzzle where each puzzle piece represents a "
-"function, method, class or attribute in your Python package that you want"
-" other people to be able to use. Would you want to give someone a puzzle "
-"that has missing pieces or pieces that don't fit together? Providing "
-"people with the right puzzle pieces that work together can be compared to"
-" writing tests for your Python package."
-msgstr ""
-"パズルのピースが、あなたのPythonパッケージの関数、メソッド、クラス、属性を表しているとしましょう。 "
-"そしてあなたは他の人に使ってもらいたいと思っています。 ピースが欠けていたり、ピースが合わなかったりするパズルを誰かに渡したいと思いますか? "
-"パズルのピースを正しく組み合わせて提供することは、Python パッケージのテストを書くことに例えることができます。"
-
-#: ../../tests/write-tests.md:44
+#: ../../tests/write-tests.md:59
msgid "Test examples"
msgstr "テスト例"
-#: ../../tests/write-tests.md:47
-msgid ""
-"Let’s say you have a Python function that adds two numbers a and b "
-"together."
+#: ../../tests/write-tests.md:62
+#, fuzzy
+msgid "Let's say you have a Python function that adds two numbers together."
msgstr "例えば、2つの数値aとbを足し合わせるPython関数があるとしましょう。"
-#: ../../tests/write-tests.md:54
+#: ../../tests/write-tests.md:84
msgid ""
"A test to ensure that function runs as you might expect when provided "
"with different numbers might look like this:"
msgstr "異なる数値が与えられたときに、その関数が期待通りに実行されることを確認するテストは次のようになります:"
-#: ../../tests/write-tests.md:72
-msgid "🧩🐍"
-msgstr "🧩🐍"
-
-#: ../../tests/write-tests.md:74
-msgid "How do I know what type of tests to write?"
+#: ../../tests/write-tests.md:103
+#, fuzzy
+msgid "🧩🐍 How do you know what type of tests to write?"
msgstr "どのような種類のテストを書けばいいのか、どうすればわかりますか?"
-#: ../../tests/write-tests.md:77
+#: ../../tests/write-tests.md:105
+#, fuzzy
+msgid "As you begin to write tests for your package, you should consider:"
+msgstr "なぜパッケージのテストを書くのか?"
+
+#: ../../tests/write-tests.md:107
+msgid ""
+"there are [three types of tests Test Types for Python Packages](test-"
+"types.md) that can help guide your development."
+msgstr ""
+
+#: ../../tests/write-tests.md:108
+msgid ""
+"your tests should consider how a user might use (and misuse!) your "
+"package."
+msgstr ""
+
+#: ../../tests/write-tests.md:111
#, fuzzy
msgid ""
"This section has been adapted from [a presentation by Nick "
@@ -1284,13 +1761,12 @@ msgstr ""
"このセクションは、 [Nick Murphyのプレゼンテーション](https://zenodo.org/record/8185113) "
"から引用しました。"
-#: ../../tests/write-tests.md:80
-msgid ""
-"At this point, you may be wondering - what should you be testing in your "
-"package? Below are a few examples:"
+#: ../../tests/write-tests.md:115
+#, fuzzy
+msgid "But, what should you be testing in your package? Below are a few examples:"
msgstr "この時点で、あなたは疑問に思うかもしれません-あなたのパッケージで何をテストすべきか? 以下にいくつか例を挙げます:"
-#: ../../tests/write-tests.md:82
+#: ../../tests/write-tests.md:118
msgid ""
"**Test some typical cases:** Test that the package functions as you "
"expect it to when users use it. For instance, if your package is supposed"
@@ -1300,32 +1776,315 @@ msgstr ""
"**いくつかの典型的なケースをテスト:** "
"パッケージが、ユーザーが使用したときに期待通りに機能することをテストします。例えば、パッケージが2つの数値を足すことになっている場合、その2つの数値を足した結果が正しいかどうかをテストします。"
-#: ../../tests/write-tests.md:84
+#: ../../tests/write-tests.md:123
+#, fuzzy
msgid ""
"**Test special cases:** Sometimes there are special or outlier cases. For"
" instance, if a function performs a specific calculation that may become "
-"problematic closer to the value = 0, test it with the input of both 0 and"
+"problematic closer to the value of 0, test it with the input of both 0 "
+"and nearby values."
msgstr ""
"**特別なケースをテストする:** "
"時には特殊なケースや異常なケースもあります。例えば、ある関数が特定の計算を実行し、その計算が値=0に近いほど問題になる可能性がある場合、その関数の入力を0と"
-#: ../../tests/write-tests.md:86
-msgid ""
-"**Test at and near the expected boundaries:** If a function requires a "
-"value that is greater than or equal to 1, make sure that the function "
-"still works with both the values 1 and less than one and 1.001 as well "
-"(something close to the constraint value).."
-msgstr ""
-"**予想される境界線とその付近でテストする:** 関数が1以上の値を必要とする場合、この関数が、1と1未満と1.001の両方の値 "
-"(制約値に近い値) でも動作することを確認してください。"
-
-#: ../../tests/write-tests.md:88
+#: ../../tests/write-tests.md:128
+#, fuzzy
msgid ""
-"**Test that code fails correctly:** If a function requires a value "
-"greater than or equal to 1, then test at 0.999. Make sure that the "
-"function fails gracefully when given unexpected values and help and that "
-"the user can easily understand why if failed (provides a useful error "
-"message)."
+"**Test at and near expected boundaries:** If a function requires a value "
+"that is greater than or equal to 1, make sure that the function still "
+"works with the values 1 and 0.999, as well as 1.001 (values close to the "
+"constraint). Make sure that the function fails gracefully when given "
+"unexpected values and that the user can easily understand why it failed "
+"by providing a useful error message."
msgstr ""
"**コードが正しく失敗するかテストする** 関数が1以上の値を必要とする場合は、0.999でテストします。 "
"予期しない値やヘルプが与えられたときに、関数が差し障り無く失敗し、ユーザが失敗した理由を簡単に理解できるようにします(有用なエラーメッセージを提供します)。"
+
+#: ../../tests/write-tests.md:138
+msgid ""
+"Now that you understand what and why to test, explore the [three types of"
+" tests](test-types.md) (unit, integration, and end-to-end) to determine "
+"which style of tests best fits your package. Then, learn how to [run your"
+" tests locally](run-tests.md) and [in continuous integration](tests-"
+"ci.md). Finally, track your progress with [code coverage](code-cov.md) "
+"metrics."
+msgstr ""
+
+#~ msgid ""
+#~ "There are three general types of "
+#~ "tests that you can write for your"
+#~ " Python package: unit tests, integration"
+#~ " tests and end-to-end (or "
+#~ "functional) tests. Learn about all "
+#~ "three."
+#~ msgstr ""
+#~ "Python パッケージで書くことのできるテストには、ユニットテスト、統合テスト、エンドツーエンドテスト "
+#~ "(あるいは機能テスト) の 3 種類があります。 この 3 "
+#~ "つについて学びましょう。"
+
+#~ msgid ""
+#~ "If you expect your users to use"
+#~ " your package across different versions "
+#~ "of Python, then using an automation "
+#~ "tool such as nox to run your "
+#~ "tests is useful. Learn about the "
+#~ "various tools that you can use to"
+#~ " run your tests across python "
+#~ "versions here."
+#~ msgstr ""
+#~ "もしユーザがあなたのパッケージを異なるバージョンの Python "
+#~ "で使うことを想定しているなら、テストを実行するために nox のような自動化ツールを使うと便利です。 "
+#~ "Python のバージョンにまたがってテストを実行するために使える様々なツールについては、こちらを参照してください。"
+
+#~ msgid ""
+#~ "Continuous integration platforms such as "
+#~ "GitHub Actions can be useful for "
+#~ "running your tests across both different"
+#~ " Python versions and different operating"
+#~ " systems. Learn about setting up "
+#~ "tests to run in Continuous Integration"
+#~ " here."
+#~ msgstr ""
+#~ "GitHub Actionsのような継続的インテグレーションプラットフォームは、Python "
+#~ "のバージョンやオペレーティングシステムの違いを問わずテストを実行するのに便利です。 "
+#~ "継続的インテグレーションで実行するテストの設定については、こちらを参照してください。"
+
+#~ msgid "Graphic showing the elements of the packaging process."
+#~ msgstr "パッケージング工程の要素を示すグラフィック。"
+
+#~ msgid "Run Python package tests"
+#~ msgstr "Pythonパッケージテストの実行"
+
+#~ msgid ""
+#~ "Running your tests is important to "
+#~ "ensure that your package is working "
+#~ "as expected. It's good practice to "
+#~ "consider that tests will run on "
+#~ "your computer and your users' computers"
+#~ " that may be running a different "
+#~ "Python version and operating systems. "
+#~ "Think about the following when running"
+#~ " your tests:"
+#~ msgstr ""
+#~ "テストを実行することは、パッケージが期待通りに動作していることを確認するために重要です。 "
+#~ "テストは、あなたのコンピュータと、Python "
+#~ "のバージョンやオペレーティングシステムが異なるユーザのコンピュータで実行されることを考慮するのがよい習慣です。 "
+#~ "テストを実行する際には、以下のことを考慮してください:"
+
+#~ msgid ""
+#~ "Run your test suite in a matrix"
+#~ " of environments that represent the "
+#~ "Python versions and operating systems "
+#~ "your users are likely to have."
+#~ msgstr "テストスイートは、Python のバージョンとユーザーが使用する可能性のあるオペレーティングシステムを表す環境のマトリックスで実行します。"
+
+#~ msgid ""
+#~ "Running your tests in an isolated "
+#~ "environment provides confidence in the "
+#~ "tests and their reproducibility. This "
+#~ "ensures that tests do not pass "
+#~ "randomly due to your computer's specific"
+#~ " setup. For instance, you might have"
+#~ " unexpectedly installed dependencies on "
+#~ "your local system that are not "
+#~ "declared in your package's dependency "
+#~ "list. This oversight could lead to "
+#~ "issues when others try to install "
+#~ "or run your package on their "
+#~ "computers."
+#~ msgstr ""
+#~ "隔離された環境でテストを実行することで、テストとその再現性に自信を持つことができます。 "
+#~ "これにより、あなたのコンピュータの設定によってテストがランダムにパスすることがなくなります。 "
+#~ "たとえば、あなたのパッケージの依存関係リストで宣言されていない依存関係を、予期せずローカルシステムにインストールしてしまったかもしれません。"
+#~ " このような見落としは、他の人があなたのパッケージを自分のコン "
+#~ "ピュータにインストールしたり実行しようとしたときに、問題につながる可能性 があります。"
+
+#~ msgid ""
+#~ "**Automation tools** allow you to "
+#~ "automate running workflows such as tests"
+#~ " in specific ways using user-defined"
+#~ " commands. For instance it's useful "
+#~ "to be able to run tests across "
+#~ "different Python versions with a single"
+#~ " command. Tools such as "
+#~ "[**nox**](https://nox.thea.codes/en/stable/index.html) and "
+#~ "[**tox**](https://tox.wiki/en/latest/index.html) also "
+#~ "allow you to run tests across "
+#~ "Python versions. However, it will be "
+#~ "difficult to test your build on "
+#~ "different operating systems using only "
+#~ "nox and tox - this is where "
+#~ "continuous integration (CI) comes into "
+#~ "play."
+#~ msgstr ""
+#~ "**自動化ツール** "
+#~ "を使うと、ユーザー定義のコマンドを使って、テストのようなワークフローを特定の方法で実行することを自動化できます。 "
+#~ "例えば、1つのコマンドで異なるPythonのバージョンにまたがってテストを実行できると便利です。 "
+#~ "[**nox**](https://nox.thea.codes/en/stable/index.html) や "
+#~ "[**tox**](https://tox.wiki/en/latest/index.html) "
+#~ "のようなツールも、Pythonのバージョンをまたいでテストを実行できます。 "
+#~ "しかし、noxとtoxだけを使って異なるオペレーティングシステムでビルドをテストするのは難しいでしょう - "
+#~ "ここで継続的インテグレーション(CI)の出番です。"
+
+#~ msgid ""
+#~ "**Continuous Integration (CI):** is the "
+#~ "last tool that you'll need to run"
+#~ " your tests. CI will not only "
+#~ "allow you to replicate any automated "
+#~ "builds you create using nox or tox"
+#~ " to run your package in different "
+#~ "Python environments. It will also allow"
+#~ " you to run your tests on "
+#~ "different operating systems (Windows, Mac "
+#~ "and Linux). [We discuss using CI "
+#~ "to run tests here](tests-ci)."
+#~ msgstr ""
+#~ "**継続的インテグレーション (CI):** は、テストを実行するために必要な最後のツールです。 CI"
+#~ " は、nox や tox を使って作成した自動ビルドを複製して、異なる Python"
+#~ " 環境でパッケージを実行できるようにするだけではありません。 "
+#~ "また、異なるオペレーティングシステム(Windows、Mac、Linux)でテストを実行することもできます。 "
+#~ "[テストを実行するためにCIを使うことについては、ここで説明します](tests-ci) 。"
+
+#~ msgid "Table: Testing & Automation Tool"
+#~ msgstr "テーブル: テスト&自動化ツール"
+
+#~ msgid "Features"
+#~ msgstr "機能"
+
+#~ msgid "Test Runner (Tox)"
+#~ msgstr "テストランナー (Tox)"
+
+#~ msgid "Run Tests Locally"
+#~ msgstr "ローカルでテストを実行する"
+
+#~ msgid ""
+#~ msgstr ""
+
+#~ msgid ""
+#~ msgstr ""
+
+#~ msgid "Use for other automation tasks (e.g. building docs)"
+#~ msgstr "その他の自動化タスクに使用する(ドキュメントの作成など)"
+
+#~ msgid ""
+#~ "**[Hatch](https://github.com/pypa/hatch)** is a "
+#~ "modern end-to-end packaging tool "
+#~ "that works with the popular build "
+#~ "backend called hatchling. `hatch` offers "
+#~ "a `tox`-like setup where you can "
+#~ "run tests locally using different Python"
+#~ " versions. If you are using `hatch`"
+#~ " to support your packaging workflow, "
+#~ "you may want to also use its "
+#~ "testing capabilities rather than using "
+#~ "`nox`."
+#~ msgstr ""
+#~ "**[Hatch](https://github.com/pypa/hatch)** "
+#~ "は、hatchlingと呼ばれる人気のあるビルドバックエンドで動作する最新のエンドツーエンドパッケージングツールです。 "
+#~ "`hatch` は `tox` のようなセットアップを提供し、異なる Python "
+#~ "バージョンを使ってローカルでテストを実行することができます。 パッケージングのワークフローをサポートするために "
+#~ "`hatch` を使っているのであれば、 `nox` を使うよりも `hatch` "
+#~ "のテスト機能を使った方が良いかもしれない。"
+
+#~ msgid "Run tests across Python versions with nox"
+#~ msgstr "noxでPythonのバージョンにまたがってテストを実行する"
+
+#~ msgid "Nox will manage each environment on its own."
+#~ msgstr "Noxはそれぞれの環境を独自に管理します。"
+
+#~ msgid ""
+#~ "An example of using nox to run "
+#~ "tests in `venv` environments for Python"
+#~ " versions 3.9, 3.10, 3.11 and 3.12"
+#~ " is below."
+#~ msgstr "noxを使ってPythonバージョン3.9、3.10、3.11、3.12の `venv` 環境でテストを実行する例を以下に示します。"
+
+#~ msgid ""
+#~ "Note that for the code below to"
+#~ " work, you need to have all 4"
+#~ " versions of Python installed on your"
+#~ " computer for `nox` to find."
+#~ msgstr ""
+#~ "以下のコードが動作するためには、 `nox` "
+#~ "が見つけることができる4つのバージョンのPythonがコンピュータにインストールされている必要があることに注意してください。"
+
+#~ msgid ""
+#~ "TODO: add some tests above and "
+#~ "show what the output would look "
+#~ "like in the examples below..."
+#~ msgstr "TODO: 上記のテストをいくつか追加し、以下の例で出力がどのようになるかを示す..."
+
+#~ msgid "Integration"
+#~ msgstr "統合"
+
+#~ msgid ""
+#~ "I think this page would be "
+#~ "stronger if we did have some "
+#~ "examples from our package here: "
+#~ "https://github.com/pyOpenSci/pyosPackage"
+#~ msgstr ""
+#~ "私たちのパッケージからの例があれば、このページはもっと強くなると思います: "
+#~ "https://github.com/pyOpenSci/pyosPackage "
+
+#~ msgid ""
+#~ "For example, if you had a series"
+#~ " of steps that collected temperature "
+#~ "data in a spreadsheet, converted it "
+#~ "from degrees celsius to Fahrenheit and"
+#~ " then provided an average temperature "
+#~ "for a particular time period. An "
+#~ "integration test would ensure that all"
+#~ " parts of that workflow behaved as"
+#~ " expected."
+#~ msgstr "例えば、スプレッドシートに温度データを収集し、摂氏から華氏に変換し、特定の期間の平均温度を提供する一連のステップがあったとします。統合テストは、そのワークフローのすべての部分が期待通りに動作することを保証します。"
+
+#~ msgid ""
+#~ "Integration and end-to-end tests "
+#~ "verify that the different portions of"
+#~ " the program work together, but are"
+#~ " less well-suited for isolating where"
+#~ " errors are occurring. For example, "
+#~ "when you refactor your code, it is"
+#~ " possible that that your end-to-"
+#~ "end tests will break. But if the"
+#~ " refactor didn't introduce new behavior "
+#~ "to your existing code, then you "
+#~ "can rely on your unit tests to "
+#~ "continue to pass, testing the original"
+#~ " functionality of your code."
+#~ msgstr "統合テストとエンドツーエンドテストは、プログラムのさまざまな部分が連携して動作することを検証しますが、どこでエラーが発生しているかを切り分けるにはあまり適していません。例えば、コードをリファクタリングすると、エンドツーエンドのテストが壊れる可能性があります。しかし、リファクタリングによって既存のコードに新しい動作が導入されなかったのであれば、コードの元の機能をテストするユニットテストがパスし続けることに頼ることができます。"
+
+#~ msgid ""
+#~ "Imagine you're working on a puzzle "
+#~ "where each puzzle piece represents a "
+#~ "function, method, class or attribute in"
+#~ " your Python package that you want"
+#~ " other people to be able to "
+#~ "use. Would you want to give "
+#~ "someone a puzzle that has missing "
+#~ "pieces or pieces that don't fit "
+#~ "together? Providing people with the "
+#~ "right puzzle pieces that work together"
+#~ " can be compared to writing tests "
+#~ "for your Python package."
+#~ msgstr ""
+#~ "パズルのピースが、あなたのPythonパッケージの関数、メソッド、クラス、属性を表しているとしましょう。 "
+#~ "そしてあなたは他の人に使ってもらいたいと思っています。 "
+#~ "ピースが欠けていたり、ピースが合わなかったりするパズルを誰かに渡したいと思いますか? "
+#~ "パズルのピースを正しく組み合わせて提供することは、Python パッケージのテストを書くことに例えることができます。"
+
+#~ msgid "🧩🐍"
+#~ msgstr "🧩🐍"
+
+#~ msgid ""
+#~ "**Test at and near the expected "
+#~ "boundaries:** If a function requires a"
+#~ " value that is greater than or "
+#~ "equal to 1, make sure that the "
+#~ "function still works with both the "
+#~ "values 1 and less than one and "
+#~ "1.001 as well (something close to "
+#~ "the constraint value).."
+#~ msgstr ""
+#~ "**予想される境界線とその付近でテストする:** 関数が1以上の値を必要とする場合、この関数が、1と1未満と1.001の両方の値"
+#~ " (制約値に近い値) でも動作することを確認してください。"
diff --git a/locales/ja/LC_MESSAGES/tutorials.po b/locales/ja/LC_MESSAGES/tutorials.po
index 0116d482c..6df750540 100644
--- a/locales/ja/LC_MESSAGES/tutorials.po
+++ b/locales/ja/LC_MESSAGES/tutorials.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-01-04 09:59+0900\n"
+"POT-Creation-Date: 2026-05-22 12:19-0700\n"
"PO-Revision-Date: 2025-04-14 18:12+0000\n"
"Last-Translator: Tetsuo Koyama , 2025\n"
"Language: ja\n"
@@ -21,7 +21,7 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Generated-By: Babel 2.17.0\n"
+"Generated-By: Babel 2.18.0\n"
#: ../../tutorials/add-license-coc.md:6
msgid "Add a `LICENSE` & `CODE_OF_CONDUCT` to your Python package"
@@ -53,7 +53,7 @@ msgid "Learning objectives"
msgstr "学習目標"
#: ../../tutorials/add-license-coc.md:17 ../../tutorials/add-readme.md:17
-#: ../../tutorials/pyproject-toml.md:27
+#: ../../tutorials/pyproject-toml.md:30
msgid "In this lesson you will learn:"
msgstr "このレッスンで学ぶこと:"
@@ -103,20 +103,21 @@ msgstr "メタデータが設定されている `pyproject.toml` データでそ
#: ../../tutorials/add-license-coc.md:31
#, fuzzy
msgid ""
-"By adding this metadata to your `pyproject.toml` file, the choice of "
-"license will be included in your package's metadata which is used to "
-"populate your package's PyPI landing page. The `LICENSE` file is also "
-"used in your GitHub repository's landing page interface."
+"By adding this metadata to your [pyproject.toml](pyproject-toml) file, "
+"the choice of license will be included in your package's metadata which "
+"is used to populate your package's PyPI landing page. The `LICENSE` file "
+"is also used in your GitHub repository's landing page interface, and "
+"makes its way into your distributions."
msgstr ""
"`LICENSE` ファイルを `pyproject.toml` ファイルに追加することで、 `LICENSE` "
"がパッケージのメタデータに含まれるようになります。 `LICENSE` は GitHub "
"リポジトリのランディングページのインターフェイスでも使用されます。"
-#: ../../tutorials/add-license-coc.md:33
+#: ../../tutorials/add-license-coc.md:36
msgid "What license should you use?"
msgstr "どのライセンスを使うべきか?"
-#: ../../tutorials/add-license-coc.md:35
+#: ../../tutorials/add-license-coc.md:38
#, fuzzy
msgid ""
"We suggest that you use a permissive license that accommodates the other "
@@ -130,11 +131,11 @@ msgstr ""
"[choosealicense.com](https://choosealicense.com/) で一般的に推奨されているライセンスである "
"MIT を使ってください。"
-#: ../../tutorials/add-license-coc.md:38
+#: ../../tutorials/add-license-coc.md:41
msgid "Licenses for the scientific Python ecosystem"
msgstr "科学的Pythonエコシステムのためのライセンス"
-#: ../../tutorials/add-license-coc.md:39
+#: ../../tutorials/add-license-coc.md:42
msgid ""
"[We discuss licenses for the scientific Python ecosystem in more detail "
"here in our guidebook.](../documentation/repository-files/license-files)"
@@ -142,11 +143,11 @@ msgstr ""
"[科学的Pythonエコシステムのライセンスについては、ガイドブックで詳しく説明しています](../documentation"
"/repository-files/license-files)"
-#: ../../tutorials/add-license-coc.md:42
+#: ../../tutorials/add-license-coc.md:45
msgid "Where should the `LICENSE` file live"
msgstr "`LICENSE` ファイルはどこに置くべきか"
-#: ../../tutorials/add-license-coc.md:44
+#: ../../tutorials/add-license-coc.md:47
msgid ""
"Your `LICENSE` file should be placed at the root of your package's "
"repository. When you add the `LICENSE` at the root, GitHub will "
@@ -156,13 +157,13 @@ msgstr ""
"`LICENSE` ファイルは、パッケージのリポジトリのルートに置く必要があります。 ルートに `LICENSE` を追加すると、GitHub "
"が魔法のごとく自動的にそれを検出し、GitHub リポジトリ内の `LICENSE` ファイルへの直接リンクをユーザーに提供します。"
-#: ../../tutorials/add-license-coc.md:50
+#: ../../tutorials/add-license-coc.md:53
msgid ""
"Image showing the GitHub repository for SunPy an accepted pyOpenSci "
"package."
msgstr "pyOpenSci パッケージに採用された SunPy 用のGitHubリポジトリを示す画像。"
-#: ../../tutorials/add-license-coc.md:52
+#: ../../tutorials/add-license-coc.md:55
msgid ""
"Notice at the top of the README portion of the GitHub landing page, there"
" are three tabs directly linking to the `README` file which is visible, "
@@ -174,15 +175,15 @@ msgstr ""
"ファイル、そしてSunPyが使用するライセンスを指定するタブの3つに直接リンクしていることに注目してください。 "
"これらのファイルは標準的な命名規則を使ってプロジェクトディレクトリのルートに置かれているため、GitHubによって発見されます。"
-#: ../../tutorials/add-license-coc.md:59
+#: ../../tutorials/add-license-coc.md:62
msgid "How to add a `LICENSE` file to your package directory"
msgstr "パッケージディレクトリに `LICENSE` ファイルを追加する方法"
-#: ../../tutorials/add-license-coc.md:61
+#: ../../tutorials/add-license-coc.md:64
msgid "There are several ways to add a `LICENSE` file:"
msgstr "`LICENSE` ファイルを追加するにはいくつかの方法があります:"
-#: ../../tutorials/add-license-coc.md:63
+#: ../../tutorials/add-license-coc.md:66
msgid ""
"When you create a new repository on GitHub, it will ask you if you wish "
"to add a `LICENSE` file at that time. If you select yes, it will create "
@@ -191,7 +192,7 @@ msgstr ""
"GitHub で新しいリポジトリを作成すると、そのときに `LICENSE` ファイルを追加するかどうかを尋ねられます。 yes "
"を選ぶと、ファイルを作成してくれます。"
-#: ../../tutorials/add-license-coc.md:64
+#: ../../tutorials/add-license-coc.md:67
msgid ""
"You can add a `LICENSE` through the GitHub gui following the [ instructions "
@@ -203,23 +204,23 @@ msgstr ""
"your-project-for-healthy-contributions/adding-a-license-to-a-repository) "
"に従って追加することができます。"
-#: ../../tutorials/add-license-coc.md:65
+#: ../../tutorials/add-license-coc.md:68
msgid "You can add the file manually as we are doing in this lesson."
msgstr "このレッスンで行っているように、手動でファイルを追加することもできます。"
-#: ../../tutorials/add-license-coc.md:68
+#: ../../tutorials/add-license-coc.md:71
msgid "If you completed the past lessons including"
msgstr "以下を含む過去のレッスンを修了した場合"
-#: ../../tutorials/add-license-coc.md:70
+#: ../../tutorials/add-license-coc.md:73
msgid "[Making your code installable](create-python-package.md) and"
msgstr "[コードをインストール可能にする](create-python-package.md) と"
-#: ../../tutorials/add-license-coc.md:71
+#: ../../tutorials/add-license-coc.md:74
msgid "[publishing your package to PyPI](publish-pypi.md)"
msgstr "[PyPIへのパッケージの公開](publish-pypi.md)"
-#: ../../tutorials/add-license-coc.md:73
+#: ../../tutorials/add-license-coc.md:76
msgid ""
"then you already have a `LICENSE` file containing text for the MIT "
"license in your Python package. Thus you can skip to the next section of "
@@ -228,17 +229,17 @@ msgstr ""
"は、Python パッケージの中に MIT ライセンスのテキストを含む `LICENSE` ファイルが既にあるということです。 "
"従って、このチュートリアルの次のセクションの `CODE_OF_CONDUCT` の追加に進むことができます。"
-#: ../../tutorials/add-license-coc.md:75
+#: ../../tutorials/add-license-coc.md:78
msgid ""
"If you don't yet have a `LICENSE` file in your directory, then continue "
"reading."
msgstr "あなたのディレクトリにまだ `LICENSE` ファイルがない場合は、このまま読み進めてください。"
-#: ../../tutorials/add-license-coc.md:78
+#: ../../tutorials/add-license-coc.md:81
msgid "How to add a `LICENSE` to your package - the manual way"
msgstr "パッケージに `LICENSE` を追加する方法 - 手動の方法"
-#: ../../tutorials/add-license-coc.md:80
+#: ../../tutorials/add-license-coc.md:83
msgid ""
"If you don't already have a `LICENSE` file, and you are not yet using a "
"platform such as GitHub or GitLab, then you can create a `LICENSE` file "
@@ -247,39 +248,39 @@ msgstr ""
"まだ `LICENSE` ファイルがなく、GitHub や GitLab などのプラットフォームを使っていない場合は、次のようにして "
"`LICENSE` ファイルを作成します。"
-#: ../../tutorials/add-license-coc.md:82
+#: ../../tutorials/add-license-coc.md:85
msgid "Create a new file called `LICENSE`. If you are using shell you can type:"
msgstr "`LICENSE` という新しいファイルを作成します。 シェルを使っている場合は:"
-#: ../../tutorials/add-license-coc.md:89
+#: ../../tutorials/add-license-coc.md:92
msgid "Go to [choosealicense.com](https://choosealicense.com/)"
msgstr "[choosealicense.com](https://choosealicense.com/) へ。"
-#: ../../tutorials/add-license-coc.md:90
+#: ../../tutorials/add-license-coc.md:93
msgid "Select permissive license"
msgstr "寛容なライセンスを選択する"
-#: ../../tutorials/add-license-coc.md:91
+#: ../../tutorials/add-license-coc.md:94
msgid ""
"It will suggest that you use the [MIT "
"license](https://choosealicense.com/licenses/mit/)."
msgstr "[MITライセンス](https://choosealicense.com/licenses/mit/) を使用するよう提案されます。"
-#: ../../tutorials/add-license-coc.md:92
+#: ../../tutorials/add-license-coc.md:95
msgid ""
"Copy the license text that it provides into your `LICENSE` file that you "
"created above."
msgstr "そのライセンステキストを、上記で作成した `LICENSE` ファイルにコピーしてください。"
-#: ../../tutorials/add-license-coc.md:93
+#: ../../tutorials/add-license-coc.md:96
msgid "Save your file. You're all done!"
msgstr "ファイルを保存します。これで完了です!"
-#: ../../tutorials/add-license-coc.md:95
+#: ../../tutorials/add-license-coc.md:98
msgid "An overview of licenses in the scientific Python ecosystem"
msgstr "科学的Pythonエコシステムにおけるライセンスの概要"
-#: ../../tutorials/add-license-coc.md:98
+#: ../../tutorials/add-license-coc.md:101
msgid ""
"In the pyOpenSci [packaging guidebook](../documentation/repository-files"
"/license-files), we provide an overview of licenses in the scientific "
@@ -291,7 +292,7 @@ msgstr ""
"files) では、科学的Pythonエコシステムにおけるライセンスの概要を提供します。 "
"なぜライセンスファイルが重要なのか、どのライセンスファイルが科学ソフトウェアに最もよく使われるのか、正しいライセンスを選択する方法についてレビューします。"
-#: ../../tutorials/add-license-coc.md:100
+#: ../../tutorials/add-license-coc.md:103
msgid ""
"If you want a broad overview of why licenses are important for protecting"
" open source software, [check out this blog post that overviews the legal"
@@ -310,13 +311,13 @@ msgstr "GitHubのインターフェイス内に `LICENSE` ファイルを追加
msgid "Add license: new GitHub repository"
msgstr "ライセンスの追加: 新しいGitHubリポジトリ"
-#: ../../tutorials/add-license-coc.md:111
+#: ../../tutorials/add-license-coc.md:114
msgid ""
"When you create a new GitHub repository you can add a `LICENSE` file "
"through the GitHub interface."
msgstr "GitHub リポジトリを新規作成する際に、GitHub インターフェースから `LICENSE` ファイルを追加することができます。"
-#: ../../tutorials/add-license-coc.md:116
+#: ../../tutorials/add-license-coc.md:119
msgid ""
"Screenshot of the create new repository interface that GitHub provides. "
"The elements of this are the owner and repository name for the new repo. "
@@ -332,7 +333,7 @@ msgstr ""
"READMEチェックボックスがあり、空白のReadmeファイルを追加してくれます。 "
"一番下には、.gitignoreファイルを追加する行と、ライセンスを選択する行があります。"
-#: ../../tutorials/add-license-coc.md:118
+#: ../../tutorials/add-license-coc.md:121
msgid ""
"Image showing the GitHub interface that allows you to add a `LICENSE` and"
" `README` file when you create a new repository."
@@ -342,7 +343,7 @@ msgstr "新規リポジトリ作成時に `LICENSE` と `README` ファイルを
msgid "Add `LICENSE`: Existing GitHub repository"
msgstr "`LICENSE` を追加する: 既存のGitHubリポジトリ"
-#: ../../tutorials/add-license-coc.md:124
+#: ../../tutorials/add-license-coc.md:127
msgid ""
"If you already have a GitHub repository for your package, then you can "
"add a `LICENSE` using the GitHub interface by adding a new file to the "
@@ -351,7 +352,7 @@ msgstr ""
"パッケージ用のGitHubリポジトリが既にある場合は、GitHubのインターフェースで新しいファイルを追加することで `LICENSE` "
"ファイルを追加できます。"
-#: ../../tutorials/add-license-coc.md:126
+#: ../../tutorials/add-license-coc.md:129
msgid ""
"Follow the instructions to select and add a license to your repository on"
" the [GitHub LICENSE page](https://docs.github.com/en/communities"
@@ -362,7 +363,7 @@ msgstr ""
"your-project-for-healthy-contributions/adding-a-license-to-a-repository) "
"の指示に従って、リポジトリにライセンスを選択し追加してください。"
-#: ../../tutorials/add-license-coc.md:127
+#: ../../tutorials/add-license-coc.md:130
msgid ""
"Once you have added your `LICENSE` file, be sure to sync your git local "
"repository with the repository on GitHub.com. This means running `git "
@@ -371,7 +372,7 @@ msgstr ""
"`LICENSE`ファイルを追加したら、必ずローカルのgitリポジトリをGitHub.com上のリポジトリと同期してください。これは、`git "
"pull`を実行してローカルブランチを更新することを意味します。"
-#: ../../tutorials/add-license-coc.md:130
+#: ../../tutorials/add-license-coc.md:133
msgid ""
"Image showing what the LICENSE file looks like in the GItHub interface. "
"At the top you can see the actual license which in this image is BSD "
@@ -384,13 +385,13 @@ msgstr ""
"revised "
"licenseです。そして、そのライセンスが何であるかと、そのライセンスに関連するパーミッションの両方を説明するテキストがあります。画像の下部には、ライセンスの実際のテキストがLICENSEファイルに表示されています。"
-#: ../../tutorials/add-license-coc.md:132
+#: ../../tutorials/add-license-coc.md:135
msgid ""
"You can view a summary of the `LICENSE` chosen on your project's GitHub "
"landing page."
msgstr "あなたのプロジェクトのGitHubのランディングページで、選ばれた `LICENSE` の概要を見ることができます。"
-#: ../../tutorials/add-license-coc.md:139
+#: ../../tutorials/add-license-coc.md:142
msgid ""
"Now you know how to add a `LICENSE` to your project. Next, you'll learn "
"about the `CODE_OF_CONDUCT.md` file and how to add it to your package "
@@ -399,43 +400,44 @@ msgstr ""
"これで、プロジェクトに`LICENSE`を追加する方法がわかりました。 "
"次は、`CODE_OF_CONDUCT.md`ファイルと、それをパッケージディレクトリに追加する方法を説明します。"
-#: ../../tutorials/add-license-coc.md:144
+#: ../../tutorials/add-license-coc.md:147
msgid "What is a code of conduct file?"
msgstr "code of conduct ファイルとは何ですか?"
-#: ../../tutorials/add-license-coc.md:146
+#: ../../tutorials/add-license-coc.md:149
+#, fuzzy, python-brace-format
msgid ""
-"A `CODE_OF_CONDUCT` file is used to establish guidelines for how people "
-"in your community interact."
+"A `CODE_OF_CONDUCT` file is a {term}`Code of conduct` used to establish "
+"guidelines for how people in your community interact."
msgstr "`CODE_OF_CONDUCT` ファイルは、あなたのコミュニティの人々がどのように交流するかのガイドラインを確立するために使用されます。"
-#: ../../tutorials/add-license-coc.md:148
+#: ../../tutorials/add-license-coc.md:152
msgid ""
"This file is critical to supporting your community as it grows. The "
"`CODE_OF_CONDUCT`:"
msgstr "このファイルは、あなたのコミュニティが成長するのをサポートするために非常に重要です。 `CODE_OF_CONDUCT` は:"
-#: ../../tutorials/add-license-coc.md:151
+#: ../../tutorials/add-license-coc.md:155
msgid ""
"Establishes guidelines for how users and contributors interact with each "
"other and you in your software repository."
msgstr "ソフトウェアリポジトリにおいて、ユーザーやコントリビューターがどのように相互作用するかについてのガイドラインを確立します。"
-#: ../../tutorials/add-license-coc.md:152
+#: ../../tutorials/add-license-coc.md:156
msgid "Identifies negative behaviors that you don't want in your interactions."
msgstr "あなたが交流の中で望まない否定的な行動を特定します。"
-#: ../../tutorials/add-license-coc.md:154
+#: ../../tutorials/add-license-coc.md:158
msgid ""
"You can use your code of conduct as a tool that can be referenced when "
"moderating challenging conversations."
msgstr "行動規範は、困難な会話をモデレーティングする際に参照できるツールとして使うことができます。"
-#: ../../tutorials/add-license-coc.md:156
+#: ../../tutorials/add-license-coc.md:160
msgid "What to put in your `CODE_OF_CONDUCT` file"
msgstr "`CODE_OF_CONDUCT` ファイルに書くべきこと"
-#: ../../tutorials/add-license-coc.md:158
+#: ../../tutorials/add-license-coc.md:162
msgid ""
"If you are unsure of what language to add to your `CODE_OF_CONDUCT` file,"
" we suggest that you adopt the [contributor covenant "
@@ -446,7 +448,7 @@ msgstr ""
"language](https://www.contributor-"
"covenant.org/version/2/1/code_of_conduct/) を出発点として採用することをお勧します。"
-#: ../../tutorials/add-license-coc.md:161
+#: ../../tutorials/add-license-coc.md:165
msgid ""
""
@@ -454,27 +456,27 @@ msgstr ""
""
-#: ../../tutorials/add-license-coc.md:161
+#: ../../tutorials/add-license-coc.md:165
msgid "Contributor Covenant"
msgstr "Contributor Covenant"
-#: ../../tutorials/add-license-coc.md:163
+#: ../../tutorials/add-license-coc.md:167
msgid ""
"The `CODE_OF_CONDUCT.md` should be placed at the root of your project "
"directory, similar to the `LICENSE` file."
msgstr "`CODE_OF_CONDUCT.md` は、 `LICENSE` ファイルと同様に、プロジェクトディレクトリのルートに置く必要があります。"
-#: ../../tutorials/add-license-coc.md:165
+#: ../../tutorials/add-license-coc.md:169
msgid "How to add a `CODE_OF_CONDUCT` file to your package directory"
msgstr "パッケージディレクトリに `CODE_OF_CONDUCT` ファイルを追加する方法。"
-#: ../../tutorials/add-license-coc.md:167
+#: ../../tutorials/add-license-coc.md:171
msgid ""
"Add a `CODE_OF_CONDUCT.md` file to the root of your repository if it "
"doesn't already exist."
msgstr "`CODE_OF_CONDUCT.md` ファイルがまだ存在しない場合は、リポジトリのルートに追加してください。"
-#: ../../tutorials/add-license-coc.md:173
+#: ../../tutorials/add-license-coc.md:177
msgid ""
"Visit the [contributor covenant website](https://www.contributor-"
"covenant.org/) and add [the markdown version of their code of "
@@ -490,15 +492,15 @@ msgstr ""
"covenant.org/version/2/1/code_of_conduct/code_of_conduct.md) を追加します。 "
"プレースホルダーの情報は必ず記入してください。 本文をよく読み、内容を理解し、同意すること!"
-#: ../../tutorials/add-license-coc.md:175
+#: ../../tutorials/add-license-coc.md:179
msgid "That's it - you've now added a code of conduct to your package directory."
msgstr "これであなたのパッケージディレクトリに行動規範が追加されたことになります。"
-#: ../../tutorials/add-license-coc.md:177
+#: ../../tutorials/add-license-coc.md:181
msgid "Additional Code of Conduct resources"
msgstr "行動規範に関するその他のリソース"
-#: ../../tutorials/add-license-coc.md:180
+#: ../../tutorials/add-license-coc.md:184
msgid ""
"[ Guide: `CODE_OF_CONDUCT.md` "
"files](https://docs.github.com/en/communities/setting-up-your-project-"
@@ -508,7 +510,7 @@ msgstr ""
"ファイル](https://docs.github.com/en/communities/setting-up-your-project-for-"
"healthy-contributions/adding-a-code-of-conduct-to-your-project)"
-#: ../../tutorials/add-license-coc.md:181
+#: ../../tutorials/add-license-coc.md:185
msgid ""
"[pyOpenSci package guide `CODE_OF_CONDUCT.md` "
"overview](https://www.pyopensci.org/python-package-guide/documentation"
@@ -518,29 +520,29 @@ msgstr ""
"/python-package-guide/documentation/repository-files/code-of-conduct-"
"file.html)"
-#: ../../tutorials/add-license-coc.md:184 ../../tutorials/add-readme.md:238
-#: ../../tutorials/publish-conda-forge.md:468
-#: ../../tutorials/pyproject-toml.md:690
+#: ../../tutorials/add-license-coc.md:188 ../../tutorials/add-readme.md:240
+#: ../../tutorials/publish-conda-forge.md:475
+#: ../../tutorials/pyproject-toml.md:699
msgid " Wrap up"
msgstr " まとめ"
-#: ../../tutorials/add-license-coc.md:186
+#: ../../tutorials/add-license-coc.md:190
msgid "In this lesson and the [last lesson](add-readme), you have added a:"
msgstr "このレッスンと [最後のレッスンでは](add-readme), 以下を追加しました:"
-#: ../../tutorials/add-license-coc.md:188
+#: ../../tutorials/add-license-coc.md:192
msgid "`README` file;"
msgstr "`README` ファイル;"
-#: ../../tutorials/add-license-coc.md:189
+#: ../../tutorials/add-license-coc.md:193
msgid "`LICENSE` file and a"
msgstr "`LICENSE` ファイルと"
-#: ../../tutorials/add-license-coc.md:190
+#: ../../tutorials/add-license-coc.md:194
msgid "`CODE_OF_CONDUCT` file."
msgstr "`CODE_OF_CONDUCT` ファイル。"
-#: ../../tutorials/add-license-coc.md:192
+#: ../../tutorials/add-license-coc.md:196
msgid ""
"These are fundamental files needed for every scientific Python package "
"repository. These files help users understand how to use your package and"
@@ -549,12 +551,12 @@ msgstr ""
"これらはすべての科学的なPythonパッケージリポジトリに必要な基本的なファイルです。 "
"これらのファイルは、ユーザがあなたのパッケージの使い方を理解し、パッケージメンテナとやりとりするのに役立ちます。"
-#: ../../tutorials/add-license-coc.md:196
-#: ../../tutorials/create-python-package.md:445
+#: ../../tutorials/add-license-coc.md:200
+#: ../../tutorials/create-python-package.md:455
msgid "In the upcoming lessons, you will:"
msgstr "これからのレッスンでは、あなたは:"
-#: ../../tutorials/add-license-coc.md:198
+#: ../../tutorials/add-license-coc.md:202
msgid ""
"[Add more metadata to your `pyproject.toml` file](pyproject-toml) to "
"support building and publishing your package on PyPI."
@@ -562,30 +564,31 @@ msgstr ""
"PyPI でのパッケージのビルドと公開をサポートするために [`pyproject.toml` ファイルにメタデータを追加します"
"](pyproject-toml) 。"
-#: ../../tutorials/add-license-coc.md:199
+#: ../../tutorials/add-license-coc.md:203
msgid ""
"Publish a new version of your Python package to the test PyPI to preview "
"the updated metadata landing page."
msgstr "あなたのPythonパッケージの新しいバージョンをテストPyPIに公開して、更新されたメタデータランディングページをプレビューしてください。"
-#: ../../tutorials/add-license-coc.md:204
-#: ../../tutorials/create-python-package.md:540
-#: ../../tutorials/publish-conda-forge.md:480
-#: ../../tutorials/publish-pypi.md:417
-#: ../../tutorials/trusted-publishing.md:344
+#: ../../tutorials/add-license-coc.md:208
+#: ../../tutorials/create-python-package.md:550
+#: ../../tutorials/publish-conda-forge.md:487
+#: ../../tutorials/publish-pypi.md:419
+#: ../../tutorials/trusted-publishing.md:347
msgid "Footnotes"
msgstr "脚注"
-#: ../../tutorials/add-license-coc.md:206
+#: ../../tutorials/add-license-coc.md:210
msgid "https://opensource.org/license/mit/"
msgstr "https://opensource.org/license/mit/"
-#: ../../tutorials/add-license-coc.md:207
+#: ../../tutorials/add-license-coc.md:211
msgid "https://opensource.org/license/bsd-3-clause/"
msgstr "https://opensource.org/license/bsd-3-clause/"
#: ../../tutorials/add-readme.md:6
-msgid "Add a README file to your Python package"
+#, fuzzy, python-brace-format
+msgid "Add a {term}`README` file to your {term}`Python package`"
msgstr "PythonパッケージにREADMEファイルを追加する"
#: ../../tutorials/add-readme.md:8
@@ -621,16 +624,17 @@ msgid "What is a README file?"
msgstr "README ファイルとは何か?"
#: ../../tutorials/add-readme.md:25
+#, fuzzy, python-brace-format
msgid ""
-"The `README.md` file is a markdown file located at the root of your "
-"project directory that helps a user understand:"
+"The `README.md` file is the project's {term}`README` and is located at "
+"the root of your project directory. It helps a user understand:"
msgstr "`README.md` ファイルはプロジェクトディレクトリのルートにあるマークダウンファイルで、ユーザーの理解を助けるものです:"
-#: ../../tutorials/add-readme.md:28
+#: ../../tutorials/add-readme.md:29
msgid "You package's name"
msgstr "パッケージ名"
-#: ../../tutorials/add-readme.md:29
+#: ../../tutorials/add-readme.md:30
msgid ""
"What the package does. Your README file should clearly state the "
"problem(s) that your software is designed to solve and its target "
@@ -639,23 +643,23 @@ msgstr ""
"パッケージが何をするのか。 "
"READMEファイルには、あなたのソフトウェアが解決するために設計された(複数の)問題と、その対象読者を明確に記述してください。"
-#: ../../tutorials/add-readme.md:30
+#: ../../tutorials/add-readme.md:31
msgid "The current development \"state\" of the package (through badges)"
msgstr "パッケージの現在の開発 \"状態\" (バッジを通して)"
-#: ../../tutorials/add-readme.md:31
+#: ../../tutorials/add-readme.md:32
msgid "How to get started with using your package."
msgstr "パッケージの使い始め方"
-#: ../../tutorials/add-readme.md:32
+#: ../../tutorials/add-readme.md:33
msgid "How to contribute to your package"
msgstr "パッケージに貢献する方法"
-#: ../../tutorials/add-readme.md:33
+#: ../../tutorials/add-readme.md:34
msgid "How to cite your package"
msgstr "パッケージの引用方法"
-#: ../../tutorials/add-readme.md:35
+#: ../../tutorials/add-readme.md:36
msgid ""
"Your **README.md** file is important as it is often the first thing that "
"someone sees before they install your package. The README file is also "
@@ -664,7 +668,7 @@ msgstr ""
"**README.md** ファイルは、誰かがあなたのパッケージをインストールする前に、最初に目にすることが多いので重要です。 "
"READMEファイルはPyPIのランディングページに入力するためにも使われます。"
-#: ../../tutorials/add-readme.md:37
+#: ../../tutorials/add-readme.md:38
msgid ""
"Note that there is no specific content structure for README files. "
"However, this tutorial outlines the sections that we suggest that you "
@@ -673,63 +677,63 @@ msgstr ""
"READMEファイルには特定のコンテンツ構造はないことに注意してください。 "
"しかし、このチュートリアルでは、READMEファイルに含めることを推奨するセクションの概要を説明します。"
-#: ../../tutorials/add-readme.md:41
+#: ../../tutorials/add-readme.md:42
msgid "Create a README.md file for your package"
msgstr "パッケージの README.md ファイルを作成する"
-#: ../../tutorials/add-readme.md:43
+#: ../../tutorials/add-readme.md:44
msgid "It's time to add a `README.md` file to your project directory."
msgstr "`README.md` ファイルをプロジェクト・ディレクトリに追加しましょう。"
-#: ../../tutorials/add-readme.md:45
+#: ../../tutorials/add-readme.md:46
msgid "Step 0: Create a README file"
msgstr "ステップ0: READMEファイルの作成"
-#: ../../tutorials/add-readme.md:46
+#: ../../tutorials/add-readme.md:47
msgid ""
"To get started, if you don't already have a README.md file in your "
"project directory, create one."
msgstr "まず、プロジェクトディレクトリにまだREADME.mdファイルがない場合は、作成してください。"
-#: ../../tutorials/add-readme.md:49
+#: ../../tutorials/add-readme.md:50
msgid "If you created your project directory from"
msgstr "以下からプロジェクトディレクトリを作成した場合"
-#: ../../tutorials/add-readme.md:51
+#: ../../tutorials/add-readme.md:52
msgid "a GitHub repository online"
msgstr "オンラインのGitHubリポジトリ"
-#: ../../tutorials/add-readme.md:52
+#: ../../tutorials/add-readme.md:53
msgid "using `hatch init`"
msgstr "`hatch init` を使用する。"
-#: ../../tutorials/add-readme.md:54
+#: ../../tutorials/add-readme.md:55
msgid "Then you may already have a README.MD file in your project directory."
msgstr "その場合、プロジェクトディレクトリに README.MD ファイルが既にあるかもしれません。"
-#: ../../tutorials/add-readme.md:60
+#: ../../tutorials/add-readme.md:61
msgid "Step 1: Add the name of your package as the README title"
msgstr "ステップ1: READMEのタイトルにパッケージ名を追加する"
-#: ../../tutorials/add-readme.md:62
+#: ../../tutorials/add-readme.md:63
msgid "At the top of the `README.md` file, add the name of your package."
msgstr "`README.md` ファイルの先頭に、パッケージ名を追加します。"
-#: ../../tutorials/add-readme.md:64
+#: ../../tutorials/add-readme.md:65
msgid ""
"If you are using markdown it should be a header 1 (H1) tag which is "
"denoted with a single `#` sign."
msgstr "マークダウンを使用している場合は、 `#` 記号1つで示されるヘッダー1 (H1) タグでなければなりません。"
-#: ../../tutorials/add-readme.md:66
+#: ../../tutorials/add-readme.md:67
msgid "`# Package-title-here`"
msgstr "`# Package-title-here`"
-#: ../../tutorials/add-readme.md:68
+#: ../../tutorials/add-readme.md:69
msgid "Step 2: add badges to the top of your README file"
msgstr "ステップ2: READMEファイルの先頭にバッジを追加する"
-#: ../../tutorials/add-readme.md:70
+#: ../../tutorials/add-readme.md:71
msgid ""
"It's common for maintainers to add badges to the top of their README "
"files. Badges allow you and your package users to track things like:"
@@ -737,21 +741,21 @@ msgstr ""
"メンテナが README ファイルの先頭にバッジを追加するのはよくあることです。 "
"バッジをつけることで、あなたとあなたのパッケージのユーザは以下のようなことを追跡できるようになります:"
-#: ../../tutorials/add-readme.md:72
+#: ../../tutorials/add-readme.md:73
msgid "Broken documentation and test builds."
msgstr "ドキュメントとテストビルドが壊れています。"
-#: ../../tutorials/add-readme.md:73
+#: ../../tutorials/add-readme.md:74
msgid "Versions of your package that are on PyPI and conda."
msgstr "PyPIとcondaにあるあなたのパッケージのバージョン。"
-#: ../../tutorials/add-readme.md:74
+#: ../../tutorials/add-readme.md:75
msgid ""
"Whether your package has been reviewed and vetted by an organization such"
" as pyOpenSci and/or JOSS."
msgstr "あなたのパッケージがpyOpenSciやJOSSのような組織によってレビューされ、審査されたかどうか。"
-#: ../../tutorials/add-readme.md:76
+#: ../../tutorials/add-readme.md:77
msgid ""
"If you have already published your package to pypi.org you can use "
"[shields.io to create a package version badge](https://shields.io/badges"
@@ -762,77 +766,78 @@ msgstr ""
"[shields.ioでパッケージのバージョンバッジを作成](https://shields.io/badges/py-pi-version) "
"することができます。 このバッジは、あなたが新しいバージョンのパッケージをPyPIにリリースすると動的に更新されます。"
-#: ../../tutorials/add-readme.md:78
+#: ../../tutorials/add-readme.md:79
msgid ""
"If not, you can leave the top empty for now and add badges to your README"
" at a later point as they make sense."
msgstr "そうでない場合は、今のところ上部を空にしておいて、後でREADMEにバッジを追加することができます。"
-#: ../../tutorials/add-readme.md:80
+#: ../../tutorials/add-readme.md:81
msgid "Step 3: Add a description of what your package does"
msgstr "ステップ 3: パッケージの説明を追加する"
-#: ../../tutorials/add-readme.md:82
+#: ../../tutorials/add-readme.md:83
msgid ""
"Below the badges (if you have them), add a section of text that provides "
"an easy-to-understand overview of what your package does."
msgstr "バッジの下に(バッジがある場合)、あなたのパッケージが何をするのかをわかりやすく説明するテキストのセクションを追加します。"
-#: ../../tutorials/add-readme.md:86
+#: ../../tutorials/add-readme.md:87
msgid "Keep this section short."
msgstr "このセクションは短めにしてください。"
-#: ../../tutorials/add-readme.md:87
+#: ../../tutorials/add-readme.md:88
msgid "Try to avoid jargon."
msgstr "専門用語はなるべく避けてください。"
-#: ../../tutorials/add-readme.md:88
+#: ../../tutorials/add-readme.md:89
msgid ""
"Define technical terms that you use to make the description accessible to"
" more people."
msgstr "説明をより多くの人が理解できるように、使用する専門用語を定義します。"
-#: ../../tutorials/add-readme.md:90
+#: ../../tutorials/add-readme.md:91
msgid ""
"Remember that the more people understand what your package does, the more"
" people will use it."
msgstr "あなたのパッケージが何をするものなのか、より多くの人が理解すればするほど、より多くの人がそれを使うようになることを忘れないでください。"
-#: ../../tutorials/add-readme.md:92
+#: ../../tutorials/add-readme.md:93
msgid "Step 4: Add package installation instructions"
msgstr "ステップ4: パッケージのインストール方法を追加する"
-#: ../../tutorials/add-readme.md:94
+#: ../../tutorials/add-readme.md:95
msgid "Next, add instructions that tell users how to install your package."
msgstr "次に、ユーザーにパッケージのインストール方法を説明するインストラクションを追加します。"
-#: ../../tutorials/add-readme.md:96
+#: ../../tutorials/add-readme.md:97
+#, fuzzy, python-brace-format
msgid ""
-"For example, can they use pip to install your package? `python -m pip "
-"install packagename`"
+"For example, can they use {term}`pip` to install your package? `python -m"
+" pip install packagename`"
msgstr ""
"例えば、彼らはあなたのパッケージをインストールするためにpipを使うことができますか? `python -m pip install "
"packagename`"
-#: ../../tutorials/add-readme.md:99
+#: ../../tutorials/add-readme.md:100
msgid "or conda?"
msgstr "それともconda?"
-#: ../../tutorials/add-readme.md:101
+#: ../../tutorials/add-readme.md:102
msgid "`conda install -c conda-forge packagename`."
msgstr "conda install -c conda-forge packagename`."
-#: ../../tutorials/add-readme.md:103
+#: ../../tutorials/add-readme.md:104
msgid ""
"If you haven't yet published your package to pypi.org then you can skip "
"this section and come back and add these instructions later."
msgstr "まだパッケージをpypi.orgに公開していない場合は、このセクションを読み飛ばして、後でこれらの説明を追加してください。"
-#: ../../tutorials/add-readme.md:107
+#: ../../tutorials/add-readme.md:108
msgid "Step 5: Any additional setup"
msgstr "ステップ5:追加設定"
-#: ../../tutorials/add-readme.md:109
+#: ../../tutorials/add-readme.md:110
msgid ""
"In some cases, your package users may need to manually install other "
"tools in order to use your package. If that is the case, be sure to add a"
@@ -841,31 +846,31 @@ msgstr ""
"場合によっては、あなたのパッケージを使用するために、あなたのパッケージのユーザーが他のツールを手動でインストールする必要があるかもしれません。 "
"その場合は、READMEファイルに追加セットアップのセクションを追加してください。"
-#: ../../tutorials/add-readme.md:114
+#: ../../tutorials/add-readme.md:115
msgid ""
"Here, briefly document (or link to documentation for) any additional "
"setup that is required to use your package. This might include:"
msgstr "ここで、あなたのパッケージを使うために必要な追加設定を簡単に文書化 (または文書へのリンク) をしてください。これには以下が含まれます:"
-#: ../../tutorials/add-readme.md:118
+#: ../../tutorials/add-readme.md:119
msgid "authentication information, if it is applicable to your package."
msgstr "認証情報、あなたのパッケージに適用される場合。"
-#: ../../tutorials/add-readme.md:119
+#: ../../tutorials/add-readme.md:120
msgid "additional tool installations, such as GDAL."
msgstr "GDALのような追加ツールのインストール。"
-#: ../../tutorials/add-readme.md:122
+#: ../../tutorials/add-readme.md:123
msgid ""
"Many packages won't need an additional setup section in their README. In "
"that case you can always skip this section."
msgstr "多くのパッケージでは、READMEに追加のセットアップセクションは必要ありません。 その場合、このセクションはいつでも読み飛ばすことができます。"
-#: ../../tutorials/add-readme.md:127
+#: ../../tutorials/add-readme.md:128
msgid "Step 6: Add a get started section"
msgstr "ステップ6: スタートセクションの追加"
-#: ../../tutorials/add-readme.md:129
+#: ../../tutorials/add-readme.md:130
msgid ""
"Next add a get-started section. Within this section, add a small code "
"example that demonstrates importing and using some of the functionality "
@@ -874,33 +879,33 @@ msgstr ""
"次に、get-started セクションを追加します。 "
"このセクションに、パッケージの機能の一部をインポートして使用することを示す、小さなコード例を追加します。"
-#: ../../tutorials/add-readme.md:132
+#: ../../tutorials/add-readme.md:133
msgid "Provide a fully functional code snippet if possible"
msgstr "可能であれば、完全に機能するコードスニペットを提供してください。"
-#: ../../tutorials/add-readme.md:135
+#: ../../tutorials/add-readme.md:136
msgid ""
"It is important to try to make the code examples that you provide your "
"users as useful as possible."
msgstr "ユーザーに提供するコード例は、できるだけ役立つものにするよう努めることが重要です。"
-#: ../../tutorials/add-readme.md:137
+#: ../../tutorials/add-readme.md:138
msgid ""
"Be sure to provide a copy/paste code example that will work as-is when "
"pasted into a Jupyter Notebook or .py file if that is possible."
msgstr "可能であれば、Jupyter Notebookや.pyファイルに貼り付けてもそのまま動作するようなコピー&ペーストのコード例を必ず提示してください。"
-#: ../../tutorials/add-readme.md:139
+#: ../../tutorials/add-readme.md:140
msgid ""
"If there are tokens and other steps needed to run your package, be sure "
"to be clear about what those steps are."
msgstr "あなたのパッケージを実行するために必要なトークンや他のステップがある場合、それらのステップが何であるかを明確にするようにしてください。"
-#: ../../tutorials/add-readme.md:142
+#: ../../tutorials/add-readme.md:143
msgid "For the pyosPackage, a short get started demo might look like this:"
msgstr "pyosPackageの場合、簡単に始めるデモは次のようになります:"
-#: ../../tutorials/add-readme.md:150
+#: ../../tutorials/add-readme.md:151
msgid ""
"Or it could simply be a link to a getting started tutorial that you have "
"created. If you don't have this yet, you can leave it empty for the time "
@@ -909,17 +914,17 @@ msgstr ""
"あるいは、あなたが作成したチュートリアルへのリンクでもかまいません。 "
"まだチュートリアルをお持ちでない場合は、当分の間、空欄のままにしておいてください。"
-#: ../../tutorials/add-readme.md:153
+#: ../../tutorials/add-readme.md:154
msgid ""
"This would also be a great place to add links to tutorials that help "
"users understand how to use your package for common workflows."
msgstr "また、一般的なワークフローでのパッケージの使い方を理解するのに役立つチュートリアルへのリンクを追加するのにも最適な場所です。"
-#: ../../tutorials/add-readme.md:158
+#: ../../tutorials/add-readme.md:159
msgid "Step 7: Community section"
msgstr "ステップ7: コミュニティセクション"
-#: ../../tutorials/add-readme.md:160
+#: ../../tutorials/add-readme.md:161
msgid ""
"The community section of your README file is a place to include "
"information for users who may want to engage with your project. This "
@@ -928,49 +933,50 @@ msgstr ""
"READMEファイルのコミュニティセクションは、あなたのプロジェクトに参加したいユーザーのための情報を含める場所です。 この参加は、おそらく "
"GitHub や GitLab のようなプラットフォームで行われるでしょう。"
-#: ../../tutorials/add-readme.md:162
+#: ../../tutorials/add-readme.md:163
+#, fuzzy
msgid ""
"In the community section, you will add links to your contributing guide "
-"and `CODE_OF_CONDUCT.md`. You will create a [`CODE_OF_CONDUCT.md` file in"
-" the next lesson](add-license-coc)."
+"and `CODE_OF_CONDUCT.md`. You will create a code of conduct file in the "
+"[next lesson](add-license-coc)."
msgstr ""
"コミュニティセクションでは、あなたの貢献ガイドと `CODE_OF_CONDUCT.md` へのリンクを追加します。 [次のレッスンでは "
"`CODE_OF_CONDUCT.md` ファイル](add-license-coc) を作成することになります。"
-#: ../../tutorials/add-readme.md:165
+#: ../../tutorials/add-readme.md:167
msgid ""
"As your package grows you may also have a link to a development guide "
"that contributors and your maintainer team will follow. The development "
"guide outlines how to perform maintenance tasks such as:"
msgstr "パッケージが大きくなるにつれて、貢献者やメンテナチームが従う開発ガイドへのリンクを持つこともできます。この開発ガイドには、次のようなメンテナンス作業の方法が概説されています:"
-#: ../../tutorials/add-readme.md:168
+#: ../../tutorials/add-readme.md:170
msgid "running tests"
msgstr "テストの実行"
-#: ../../tutorials/add-readme.md:169
+#: ../../tutorials/add-readme.md:171
msgid "making package releases"
msgstr "パッケージのリリース"
-#: ../../tutorials/add-readme.md:170
+#: ../../tutorials/add-readme.md:172
msgid "building documentation"
msgstr "ドキュメントの作成"
-#: ../../tutorials/add-readme.md:171
+#: ../../tutorials/add-readme.md:173
msgid "and more."
msgstr "などなど。"
-#: ../../tutorials/add-readme.md:175
+#: ../../tutorials/add-readme.md:177
msgid "Step 8: Citation information"
msgstr "ステップ8: 引用情報"
-#: ../../tutorials/add-readme.md:177
+#: ../../tutorials/add-readme.md:179
msgid ""
"Finally it is important to let users know how to cite your package. You "
"can communicate citation information in a few different ways."
msgstr "最後に、ユーザーにあなたのパッケージの引用方法を知らせることが重要です。 引用情報を伝える方法はいくつかあります。"
-#: ../../tutorials/add-readme.md:180
+#: ../../tutorials/add-readme.md:182
msgid ""
"You can use a tool such as zenodo to create a DOI and associated citation"
" information for your package if it is hosted on a platform such as "
@@ -981,7 +987,7 @@ msgstr ""
" [この短いチュートリアルで、その設定をチェックしてみましょう。](https://coderefinery.github.io/github-"
"without-command-line/doi/)"
-#: ../../tutorials/add-readme.md:184
+#: ../../tutorials/add-readme.md:186
msgid ""
"Alternatively if you send your package through a peer review process such"
" as the [one lead by pyOpenSci](https://www.pyopensci.org/about-peer-"
@@ -997,15 +1003,15 @@ msgstr ""
"Softwareとの提携により](https://www.pyopensci.org/about-peer-review/index.html) "
"相互参照DOIを得ることができます。"
-#: ../../tutorials/add-readme.md:188
+#: ../../tutorials/add-readme.md:190
msgid "The finished README file"
msgstr "完成したREADMEファイル"
-#: ../../tutorials/add-readme.md:190
+#: ../../tutorials/add-readme.md:192
msgid "Your finished `README.md` file should look something like this:"
msgstr "完成した `README.md` ファイルは次のようになるはずです:"
-#: ../../tutorials/add-readme.md:240
+#: ../../tutorials/add-readme.md:242
msgid ""
"It's important to consider the information that a new user or contributor"
" might need when creating your `README.md` file. While there is no "
@@ -1018,7 +1024,7 @@ msgstr ""
"完璧なテンプレートは存在しないが、上記はこれから始めようとしているあなたへの推奨事項です。 "
"あなたがパッケージをさらに開発し、コミュニティがあなたのパッケージを使い始めるにつれて、このファイルに他の要素を追加する必要性が出てくるかもしれません。"
-#: ../../tutorials/add-readme.md:246
+#: ../../tutorials/add-readme.md:248
msgid ""
"In the [next lesson](add-license-coc.md), you will add a LICENSE file to "
"your Python package. A license file is critical as it tells users how "
@@ -1027,39 +1033,42 @@ msgstr ""
"[次のレッスン](add-license-coc.md) では、 LICENSEファイルをPythonパッケージに追加します。 "
"ライセンスファイルは、ユーザーがあなたのパッケージを合法的にどのように使うことができるのか(そして使うことができないのか)を示す重要なものです。また:"
-#: ../../tutorials/add-readme.md:250
+#: ../../tutorials/add-readme.md:252
msgid "Builds trust with your users"
msgstr "ユーザーとの信頼関係を築く"
-#: ../../tutorials/add-readme.md:251
+#: ../../tutorials/add-readme.md:253
msgid "Discourages misuse of your package and associated code"
msgstr "パッケージと関連コードの悪用を防ぐ"
-#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:61
+#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:63
msgid "Command Line Reference Guide"
msgstr "コマンドラインリファレンスガイド"
#: ../../tutorials/command-line-reference.md:9
+#, fuzzy
msgid ""
"**What these tables are:** These tables summarize the command line inputs"
-" (e.g., `pipx install hatch`, `hatch build`) necessary to complete all "
-"steps in the package creation process, from installing Hatch to "
-"publishing the package on PyPI and conda-forge."
+" (e.g., `pipx install hatch`, `hatch build` or `python -m build`) "
+"necessary to complete all steps in the package creation process, from "
+"installing [Hatch](get-to-know-hatch) to publishing the package on [PyPI"
+"](publish-pypi) and conda-forge."
msgstr ""
"**これらの表は何であるか:** これらの表は、Hatch のインストールから PyPI や conda-forge "
"でのパッケージの公開まで、パッケージ作成プロセスのすべてのステップを完了するために必要なコマンドライン入力 (e.g., `pipx "
"install hatch`, `hatch build`) をまとめたものです。"
-#: ../../tutorials/command-line-reference.md:11
+#: ../../tutorials/command-line-reference.md:14
+#, fuzzy, python-brace-format
msgid ""
-"**What these tables are not:** These tables do not cover the manual/non-"
-"automated steps (e.g., create PyPI account, create PyPI API token) you "
-"have to complete throughout the package creation process."
+"**What these tables are not:** These tables do not cover the manual or "
+"non-automated steps (e.g., create a PyPI account, create a {term}`API "
+"token`) you have to complete throughout the package creation process."
msgstr ""
"**これらの表は何でないか:** これらの表は、パッケージの作成プロセスを通して完了しなければならない手動/非自動ステップ "
"(PyPIアカウントの作成、PyPI APIトークンの作成など) をカバーしていません。"
-#: ../../tutorials/command-line-reference.md:13
+#: ../../tutorials/command-line-reference.md:18
msgid ""
"**Operating system note:** The current iteration of this guide has been "
"tested on the Windows OS only. Many commands are Windows-specific. OS-"
@@ -1072,19 +1081,19 @@ msgstr ""
"[COMMAND_DESCRIPTION] (Windows) のように括弧をつけて表示されます。 "
"macOSとLinuxに対応するコマンドは今後追加されます。"
-#: ../../tutorials/command-line-reference.md:16
+#: ../../tutorials/command-line-reference.md:21
msgid "Environment Setup"
msgstr "環境設定"
-#: ../../tutorials/command-line-reference.md:38
+#: ../../tutorials/command-line-reference.md:43
msgid "Package Development"
msgstr "パッケージ開発"
-#: ../../tutorials/command-line-reference.md:57
+#: ../../tutorials/command-line-reference.md:62
msgid "Package Publishing"
msgstr "パッケージパブリッシング"
-#: ../../tutorials/command-line-reference.md:76
+#: ../../tutorials/command-line-reference.md:81
msgid "Versions and Environments"
msgstr "バージョンと環境"
@@ -1099,61 +1108,63 @@ msgid "About this lesson"
msgstr "このレッスンについて"
#: ../../tutorials/create-python-package.md:13
+#, python-brace-format
msgid ""
"This lesson uses the pyOpenSci Python package copier template to create a"
-" Python package quickly. Your package will be installable both locally "
-"and remotely from a website such as GitHub (or GitLab) into a Python "
-"environment."
+" {term}`Python package` quickly. Your package will be installable both "
+"locally and remotely from a website such as GitHub (or GitLab) into a "
+"Python environment."
msgstr ""
-#: ../../tutorials/create-python-package.md:16
-#: ../../tutorials/setup-py-to-pyproject-toml.md:21
+#: ../../tutorials/create-python-package.md:18
+#: ../../tutorials/setup-py-to-pyproject-toml.md:23
#, fuzzy
msgid "In this lesson, you will learn:"
msgstr "このレッスンで学ぶこと:"
-#: ../../tutorials/create-python-package.md:18
+#: ../../tutorials/create-python-package.md:20
#, fuzzy
msgid ""
"How to make your code installable into any Python environment, both "
"locally and from GitHub"
msgstr "ローカルとGitHubの両方で、あなたのコードをあらゆるPython環境にインストール可能にする方法"
-#: ../../tutorials/create-python-package.md:19
+#: ../../tutorials/create-python-package.md:21
#, fuzzy
msgid ""
-"How to update a `pyproject.toml` file, which contains the metadata needed"
-" to build, install, and publish your package."
+"How to update a [pyproject.toml file](pyproject-toml), which contains the"
+" metadata needed to build, install, and publish your package."
msgstr "最後のレッスンでは、パッケージのビルドに必要なコア要素を含む、素のpyproject.tomlファイルを作成しました:"
-#: ../../tutorials/create-python-package.md:20
+#: ../../tutorials/create-python-package.md:23
+#, fuzzy, python-brace-format
msgid ""
-"How to declare a [build backend](build_backends) which will be used to "
-"[build](build-package) and install your package"
+"How to declare a {term}`Build backend` which will be used to [build"
+"](build-package) and install your package"
msgstr ""
"パッケージの [ビルド](build-package) とインストールに使用する [ビルドバックエンド](build_backends) "
"を宣言する方法"
-#: ../../tutorials/create-python-package.md:21
+#: ../../tutorials/create-python-package.md:25
msgid "How to install your package in editable mode for interactive development"
msgstr "インタラクティブな開発のために編集可能モードでパッケージをインストールする方法"
-#: ../../tutorials/create-python-package.md:24
+#: ../../tutorials/create-python-package.md:28
msgid "**What you need to complete this lesson**"
msgstr "**このレッスンを完了するために必要なもの**"
-#: ../../tutorials/create-python-package.md:26
+#: ../../tutorials/create-python-package.md:30
#, fuzzy
msgid ""
"To complete this lesson, you will need a local Python environment and "
"shell on your computer. You will need to have "
-"[Copier](https://copier.readthedocs.io/en/stable/) and [Hatch installed"
+"[Copier](https://copier.readthedocs.io/en/stable/) and [Hatch installed"
"](get-to-know-hatch) to complete the lesson successfully."
msgstr ""
"このレッスンを完了するには、あなたのコンピュータにローカルのPython環境とシェルが必要です。 [Hatchのインストール](get-to-"
"know-hatch) も必要です。"
-#: ../../tutorials/create-python-package.md:30
+#: ../../tutorials/create-python-package.md:35
#, fuzzy
msgid ""
"If you are using Windows or are not familiar with Shell, you may want to "
@@ -1166,7 +1177,7 @@ msgstr ""
"をチェックアウトすることをお勧めします。 "
"Windowsユーザーは、Shellやgitに関連するステップのためにツールを設定する必要があるでしょう。"
-#: ../../tutorials/create-python-package.md:36
+#: ../../tutorials/create-python-package.md:41
msgid ""
"This diagram has two smaller boxes with arrows pointing to the right to a"
" Python environment. The small boxes read your-package and pip install "
@@ -1179,7 +1190,7 @@ msgstr ""
"Matplotlib、NumPy、Pandas、Xarray、GeoPandasなどのコアパッケージとともに、your-"
"packageがリストアップされています。"
-#: ../../tutorials/create-python-package.md:38
+#: ../../tutorials/create-python-package.md:43
#, fuzzy
msgid ""
"In a [previous lesson, you learned what a Python package is](intro). "
@@ -1193,12 +1204,12 @@ msgstr ""
"あなたのコードをインストール可能にすることは、公開可能なPythonパッケージを作成するための最初のステップです。 "
"あなたのコードがインストール可能になると、それはPythonパッケージとなり、あなたのコンピュータ上の任意のPython環境に追加し、PandasやGeoPandasなどのパッケージをインポートするのと同じ方法でインポートすることができます。あなたのコードがGitHubやGitLabにあるなら、そこから直接インストールすることもできます。"
-#: ../../tutorials/create-python-package.md:44
+#: ../../tutorials/create-python-package.md:49
#, fuzzy
msgid "Create your Python package"
msgstr "Pythonパッケージを作成しましょう!"
-#: ../../tutorials/create-python-package.md:46
+#: ../../tutorials/create-python-package.md:51
msgid ""
"Below, you will create a pure Python package using the [pyOpenSci copier "
"template](https://github.com/pyOpenSci/pyos-package-template). Our "
@@ -1208,15 +1219,15 @@ msgid ""
"`pyproject.toml`)."
msgstr ""
-#: ../../tutorials/create-python-package.md:48
+#: ../../tutorials/create-python-package.md:53
msgid "Step 1: Set Up the Package Directory Structure"
msgstr "ステップ1: パッケージのディレクトリ構造を設定する"
-#: ../../tutorials/create-python-package.md:50
+#: ../../tutorials/create-python-package.md:55
msgid "Open your shell or preferred terminal."
msgstr "シェルまたはお好みのターミナルを開きます。"
-#: ../../tutorials/create-python-package.md:51
+#: ../../tutorials/create-python-package.md:56
#, fuzzy
msgid ""
"Use the shell `cd` command to navigate in your shell to the location "
@@ -1224,22 +1235,22 @@ msgid ""
"package directory structure for you"
msgstr "シェルで `cd` コマンドを使い、パッケージのディレクトリを置く場所に移動します。 Hatchがパッケージディレクトリを作成してくれます。"
-#: ../../tutorials/create-python-package.md:52
+#: ../../tutorials/create-python-package.md:57
msgid "Choose a name for your package. The name should:"
msgstr "パッケージの名前を決めてください。 名前は以下のようにします:"
-#: ../../tutorials/create-python-package.md:53
+#: ../../tutorials/create-python-package.md:58
msgid "Have no spaces (*Required*)"
msgstr "スペースがない (*必須*)"
-#: ../../tutorials/create-python-package.md:54
+#: ../../tutorials/create-python-package.md:59
#, fuzzy
msgid ""
"Use all lowercase characters (*Recommended*). For this tutorial, we will "
"use `pyospackage`."
msgstr "すべて小文字を使用 (*推奨*)。 このチュートリアルでは `pyospackage` を使用します。"
-#: ../../tutorials/create-python-package.md:55
+#: ../../tutorials/create-python-package.md:60
#, fuzzy
msgid ""
"Only use letters and the characters _ or - in the name. This means that "
@@ -1250,20 +1261,20 @@ msgstr ""
"のみを使用してください。これは、`pyos*package`という名前は使えないことを意味します。しかし、 `pyos_package` または "
"`pyos-package` という名前であれば、どちらでも構いません。"
-#: ../../tutorials/create-python-package.md:57
+#: ../../tutorials/create-python-package.md:62
msgid ""
"In your terminal, **run the command below**. This will begin a series of "
"prompts that will ask you questions and help you to customize your Python"
" package."
msgstr ""
-#: ../../tutorials/create-python-package.md:63
+#: ../../tutorials/create-python-package.md:68
msgid ""
"After running the command above, the template will walk you through a "
"series of questions."
msgstr ""
-#: ../../tutorials/create-python-package.md:65
+#: ../../tutorials/create-python-package.md:70
msgid ""
"Note that when you reach the prompt \"Do you want to answer one more "
"question, and skip the rest, using the default values?\" you can choose "
@@ -1272,20 +1283,20 @@ msgid ""
"for you to use."
msgstr ""
-#: ../../tutorials/create-python-package.md:67
+#: ../../tutorials/create-python-package.md:72
msgid ""
"After this question, the template will ask you for your preferred GitHub "
"username and will then create a package with basic tests, documentation, "
"and GitHub configuration setup for you."
msgstr ""
-#: ../../tutorials/create-python-package.md:88
+#: ../../tutorials/create-python-package.md:93
msgid ""
"The template will then begin to copy files into the directory that used "
-"above. (`.` means current working directory"
+"above. (`.` means current working directory.)"
msgstr ""
-#: ../../tutorials/create-python-package.md:96
+#: ../../tutorials/create-python-package.md:101
#, fuzzy
msgid "The final package structure will look like this:"
msgstr "最終的なプロジェクトのディレクトリ構造は以下のようになるはずです:"
@@ -1294,101 +1305,102 @@ msgstr "最終的なプロジェクトのディレクトリ構造は以下のよ
msgid "A full package with tests, docs, and GitHub infrastructure"
msgstr "テスト、ドキュメント、GitHubインフラストラクチャを備えた完全なパッケージ"
-#: ../../tutorials/create-python-package.md:114
+#: ../../tutorials/create-python-package.md:119
msgid ""
"If you use the \"bells and whistles\" default option when working through"
" the template prompts, our template will create a complete package setup "
-"with GitHub CI actions, typing, tests, environments , and more using "
+"with GitHub CI actions, typing, tests, environments, and more using "
"Hatch. If you customize the entire package, then you can select what "
"platform you wish to host it on (GitHub vs GitLab), whether you want "
"typing, what documentation engine you want to use, and more."
msgstr ""
-#: ../../tutorials/create-python-package.md:118
+#: ../../tutorials/create-python-package.md:123
#, fuzzy
-msgid "The resulting package directory looks like this"
+msgid "The resulting package directory looks like this:"
msgstr "プロジェクトディレクトリはこのようになっているはずです:"
-#: ../../tutorials/create-python-package.md:141
+#: ../../tutorials/create-python-package.md:146
msgid "The default tools that your package uses are:"
msgstr "パッケージが使用するデフォルトのツールは以下の通りです:"
-#: ../../tutorials/create-python-package.md:143
+#: ../../tutorials/create-python-package.md:148
msgid ""
"[Sphinx](https://www.pyopensci.org/python-package-guide/documentation"
"/hosting-tools/sphinx-python-package-documentation-tools.html) with the "
-"pydata_sphinx_theme for documentation"
+"PyData Sphinx Theme for documentation"
msgstr ""
-#: ../../tutorials/create-python-package.md:144
+#: ../../tutorials/create-python-package.md:149
msgid "pytest for testing"
msgstr "テスト用のpytest"
-#: ../../tutorials/create-python-package.md:145
+#: ../../tutorials/create-python-package.md:150
#, fuzzy
msgid "Hatch for environment setup"
msgstr "Hatchと環境"
-#: ../../tutorials/create-python-package.md:147
+#: ../../tutorials/create-python-package.md:152
msgid ""
"**Full customization** If you want to customize any elements of your "
"package setup, choose `No, I want to fully customize the template.`. "
"This will allow you to select:"
msgstr ""
-#: ../../tutorials/create-python-package.md:150
-msgid "sphinx vs [mkdocs](https://www.mkdocs.org/) vs no documentation"
+#: ../../tutorials/create-python-package.md:155
+#, fuzzy
+msgid "Sphinx vs [MkDocs](https://www.mkdocs.org/) vs no documentation"
msgstr "sphinx vs [mkdocs](https://www.mkdocs.org/) vs ドキュメントなし"
-#: ../../tutorials/create-python-package.md:151
+#: ../../tutorials/create-python-package.md:156
#, fuzzy
msgid "GitHub vs GitLab"
msgstr "GitHub & GitLab vs. Git"
-#: ../../tutorials/create-python-package.md:152
+#: ../../tutorials/create-python-package.md:157
msgid "VCS versioning"
msgstr "VCSバージョン管理"
-#: ../../tutorials/create-python-package.md:153
+#: ../../tutorials/create-python-package.md:158
#, fuzzy
msgid "and more"
msgstr "などなど。"
-#: ../../tutorials/create-python-package.md:156
+#: ../../tutorials/create-python-package.md:161
#, fuzzy
msgid "Step 2: Explore the existing module in your package"
msgstr "ステップ 2: パッケージにモジュールを追加する"
-#: ../../tutorials/create-python-package.md:158
-#, fuzzy
+#: ../../tutorials/create-python-package.md:163
+#, fuzzy, python-brace-format
msgid ""
-"A Python module refers to a `.py` file containing the code that you want "
-"your package to access and run. Within the `pyospackage` subdirectory, "
-"you have an example.py module that you can use to test out your package "
-"quickly."
+"A {term}`Module` refers to a `.py` file containing the code that you want"
+" your package to access and run. Within the `pyospackage` subdirectory, "
+"you have an `example.py` module that you can use to test out your package"
+" quickly."
msgstr ""
"Python モジュールとは、パッケージにアクセスさせ、実行させたいコードを含む `.py` ファイルを指します。 `pyospackage` "
"サブディレクトリに、少なくとも1つのPythonモジュール (.py ファイル) を追加します。"
-#: ../../tutorials/create-python-package.md:160
+#: ../../tutorials/create-python-package.md:167
msgid "Notice that the code in the example.py module, has a few features:"
msgstr "example.pyモジュールのコードには、いくつかの機能があることに注意してください:"
-#: ../../tutorials/create-python-package.md:162
+#: ../../tutorials/create-python-package.md:169
msgid "It has a [numpy-style docstring](numpy-docstring)"
msgstr "これは [numpyスタイルのdocstring](numpy-docstring) を持っています。"
-#: ../../tutorials/create-python-package.md:163
+#: ../../tutorials/create-python-package.md:170
msgid "It uses [typing](type-hints)"
msgstr "[typing](type-hints) を使用します。"
-#: ../../tutorials/create-python-package.md:164
+#: ../../tutorials/create-python-package.md:171
msgid ""
"At the top of the module, there is a docstring explaining what the module"
" does."
msgstr ""
-#: ../../tutorials/create-python-package.md:166
+#: ../../tutorials/create-python-package.md:173
#, fuzzy
msgid ""
"Python supports different docstring formats. The most popular formats for"
@@ -1401,26 +1413,26 @@ msgstr ""
"Docstring[^numpydoc]、Google Style Docstring[^googledoc]、Epytext Style "
"Docstring[^epytextdoc]です。"
-#: ../../tutorials/create-python-package.md:168
+#: ../../tutorials/create-python-package.md:175
msgid "**pyOpenSci recommends using the NumPy Docstring convention.**"
msgstr "**pyOpenSciは、NumPyのDocstring規約を使用することを推奨します。**"
-#: ../../tutorials/create-python-package.md:170
+#: ../../tutorials/create-python-package.md:177
msgid ""
"[Learn more about docstrings here](api-docstrings) for an overview of "
"both topics."
msgstr ""
-#: ../../tutorials/create-python-package.md:199
+#: ../../tutorials/create-python-package.md:206
msgid "Python modules and the `__init__.py` file"
msgstr "Pythonモジュールと `__init__.py` ファイル"
-#: ../../tutorials/create-python-package.md:203
+#: ../../tutorials/create-python-package.md:210
#, fuzzy
msgid "The word module refers to a `.py` file containing Python code."
msgstr "モジュールという言葉を目にしたとき、私たちはPythonのコードを含む `.py` ファイルを指しています。"
-#: ../../tutorials/create-python-package.md:205
+#: ../../tutorials/create-python-package.md:212
msgid ""
"The `__init__.py` allows Python to recognize that a directory contains "
"at least one module that may be imported and used in your code. A package"
@@ -1429,31 +1441,32 @@ msgstr ""
"`__init__.py` は、Pythonがディレクトリに少なくとも1つのモジュールが含まれていることを認識できるようにします。 "
"パッケージは複数のモジュール [^python-modules] を持つことができます。"
-#: ../../tutorials/create-python-package.md:210
+#: ../../tutorials/create-python-package.md:217
#, fuzzy
msgid "Step 3: Optional -- Add code to your module"
msgstr "ステップ3: モジュールにコードを追加する"
-#: ../../tutorials/create-python-package.md:212
+#: ../../tutorials/create-python-package.md:219
msgid ""
"If you want, add a second function to the `example.py` module. It can be "
"a simple function. For example, write a second function that multiplies "
"numbers."
msgstr ""
-#: ../../tutorials/create-python-package.md:215
+#: ../../tutorials/create-python-package.md:222
#, fuzzy
msgid "Step 4: Check out the metadata in your `pyproject.toml` file"
msgstr "ステップ 4: `pyproject.toml` ファイルのメタデータを修正する"
-#: ../../tutorials/create-python-package.md:217
+#: ../../tutorials/create-python-package.md:224
msgid ""
-"A `pyproject.toml` file stores metadata that provides instructions to "
-"various tools interacting with it, including Hatch, which will build your"
-" package. You can also specify metadata for your package."
+"A [pyproject.toml](pyproject-toml) file stores metadata that provides "
+"instructions to various tools interacting with it, including [Hatch](get-"
+"to-know-hatch), which will build your package. You can also specify "
+"metadata for your package."
msgstr ""
-#: ../../tutorials/create-python-package.md:219
+#: ../../tutorials/create-python-package.md:229
#, fuzzy
msgid ""
"You will learn more about the `pyproject.toml` format in the [next lesson"
@@ -1463,27 +1476,27 @@ msgstr ""
"`pyproject.toml` フォーマットについては、 [このファイルにメタデータや情報を追加する次のレッスン](pyproject-"
"toml.md) で詳しく学びます。"
-#: ../../tutorials/create-python-package.md:222
+#: ../../tutorials/create-python-package.md:232
msgid ""
-"The metadata in your generated pyproject.toml is already setup for you "
+"The metadata in your generated `pyproject.toml` is already setup for you "
"using the information you provided the copier template above."
msgstr ""
-#: ../../tutorials/create-python-package.md:224
+#: ../../tutorials/create-python-package.md:234
msgid "Brief overview of the TOML file"
msgstr "TOMLファイルの概要"
-#: ../../tutorials/create-python-package.md:227
+#: ../../tutorials/create-python-package.md:237
msgid ""
"[The TOML format](https://toml.io/en/) consists of tables and variables. "
"Tables are sections of information denoted by square brackets:"
msgstr "[TOMLフォーマット](https://toml.io/en/) は表と変数で構成されます。 表は角括弧で示される情報のセクションです:"
-#: ../../tutorials/create-python-package.md:229
+#: ../../tutorials/create-python-package.md:239
msgid "`[this-is-a-table]`."
msgstr "`[this-is-a-table]`."
-#: ../../tutorials/create-python-package.md:231
+#: ../../tutorials/create-python-package.md:241
#, fuzzy
msgid ""
"Tables can contain variables within them defined by a variable name and "
@@ -1493,16 +1506,17 @@ msgstr ""
"テーブルには、変数名と `=` 記号で定義された変数を入れることができます。 例えば、`build-system` "
"テーブルは以下の2(つの)変数を保持することが多いです:"
-#: ../../tutorials/create-python-package.md:234
+#: ../../tutorials/create-python-package.md:244
+#, fuzzy
msgid ""
"`requires = `, which tells a build tool what tools it needs to install "
"prior to building your package. In this case "
-"[hatchling](https://pypi.org/project/hatchling/)"
+"[hatchling](https://pypi.org/project/hatchling/)."
msgstr ""
"`requires=` は、ビルドツールに対して、パッケージをビルドする前にインス トールする必要があるツールを指示します。 この場合 "
"[hatchling](https://pypi.org/project/hatchling/)"
-#: ../../tutorials/create-python-package.md:236
+#: ../../tutorials/create-python-package.md:246
msgid ""
"`build-backend = `, which is used to define the specific build-backend "
"name, (in this example we are using `hatchling.build`)."
@@ -1510,13 +1524,13 @@ msgstr ""
"`build-backend = ` 、これは、特定のビルドバックエンド名を定義するために使われます、(この例では、 "
"`hatchling.build` を使用しています)。"
-#: ../../tutorials/create-python-package.md:245
+#: ../../tutorials/create-python-package.md:255
msgid ""
"TOML organizes data structures, defining relationships within a "
"configuration file."
msgstr "TOMLはデータ構造を整理し、設定ファイル内の関係を定義します。"
-#: ../../tutorials/create-python-package.md:248
+#: ../../tutorials/create-python-package.md:258
#, fuzzy
msgid "[Learn more about the pyproject.toml format here.](pyprojecttoml-metadata)"
msgstr ""
@@ -1524,30 +1538,30 @@ msgstr ""
"metadata)[pyproject.tomlフォーマットの詳細はこちら。](../package-structure-code"
"/pyproject-toml-python-package-metadata)"
-#: ../../tutorials/create-python-package.md:251
+#: ../../tutorials/create-python-package.md:261
msgid ""
"Open up the `pyproject.toml` file that Hatch created in your favorite "
"text editor. It should look something like the example below."
msgstr "Hatchが作成した `pyproject.toml` ファイルをお好みのテキストエディタで開いてください。 下の例のようになるはずです。"
-#: ../../tutorials/create-python-package.md:252
+#: ../../tutorials/create-python-package.md:262
msgid ""
"Make sure the package version, package name, and author name look "
"correct. The email is optional."
msgstr ""
-#: ../../tutorials/create-python-package.md:290
+#: ../../tutorials/create-python-package.md:300
msgid ""
"At the bottom of the template-generated `pyproject.toml` file, you will "
"see a section that defines Hatch environments. We will cover Hatch "
"environments in a later lesson."
msgstr ""
-#: ../../tutorials/create-python-package.md:292
+#: ../../tutorials/create-python-package.md:302
msgid "The bare minimum needed in a pyproject.toml file"
msgstr "pyproject.tomlファイルに最低限必要なもの"
-#: ../../tutorials/create-python-package.md:295
+#: ../../tutorials/create-python-package.md:305
#, fuzzy
msgid ""
"The core information that you need in a `pyproject.toml` file to publish "
@@ -1558,47 +1572,47 @@ msgstr ""
"PyPIで公開するために `pyproject.toml` ファイルに必要な情報は、 **パッケージ名** と **バージョン** です。 "
"しかし、 `pyproject.toml` ファイルの早い段階でメタデータを具体化することをお勧めします。"
-#: ../../tutorials/create-python-package.md:297
+#: ../../tutorials/create-python-package.md:307
#, fuzzy
msgid ""
"Once you have your project metadata in the `pyproject.toml` file, you "
"will rarely update it."
msgstr "一度pyproject.tomlファイルにプロジェクトのメタデータがあれば、それを更新することはほとんどありません。次のレッスンでは、このファイルにさらにメタデータと構造を追加します。"
-#: ../../tutorials/create-python-package.md:301
+#: ../../tutorials/create-python-package.md:311
msgid "Step 5: Install your package locally"
msgstr "ステップ 5: パッケージをローカルにインストールする"
-#: ../../tutorials/create-python-package.md:303
+#: ../../tutorials/create-python-package.md:313
#, fuzzy
msgid "At this point, you should have:"
msgstr "この時点であなたは以下を持っているはずです:"
-#: ../../tutorials/create-python-package.md:305
+#: ../../tutorials/create-python-package.md:315
msgid "A project directory structure with a `pyproject.toml` file at the root"
msgstr "`pyproject.toml` ファイルをルートに持つプロジェクトのディレクトリ構造"
-#: ../../tutorials/create-python-package.md:306
+#: ../../tutorials/create-python-package.md:316
msgid "A package directory containing an empty `__init__.py` file and"
msgstr "空の `__init__.py` ファイルを含むパッケージ・ディレクトリと"
-#: ../../tutorials/create-python-package.md:307
+#: ../../tutorials/create-python-package.md:317
#, fuzzy
msgid "At least one Python module (e.g. `example.py`)"
msgstr "少なくとも1つのPythonモジュール (e.g. `add_numbers.py`)"
-#: ../../tutorials/create-python-package.md:309
+#: ../../tutorials/create-python-package.md:319
msgid "You are now ready to install (and build) your Python package!"
msgstr "これで Python パッケージをインストール(ビルド)する準備ができました!"
-#: ../../tutorials/create-python-package.md:311
+#: ../../tutorials/create-python-package.md:321
#, fuzzy
msgid ""
"While you can do this using Hatch, we will use pip for this lesson, so "
"you can see how to install your tool into your preferred environment."
msgstr "hatchを使ってもできますが、このレッスンではpipを使います、そうすれば、あなたの好みの環境にツールをインストールする方法を見ることができます。"
-#: ../../tutorials/create-python-package.md:313
+#: ../../tutorials/create-python-package.md:323
#, fuzzy
msgid ""
"First, open your preferred shell (Windows users may use something like "
@@ -1608,38 +1622,38 @@ msgstr ""
"まず、お好みのシェルを開き (Windowsユーザーはgitbashのようなものを使っているかもしれません) "
"、まだプロジェクトディレクトリにいなければ、 `cd` してください。"
-#: ../../tutorials/create-python-package.md:314
+#: ../../tutorials/create-python-package.md:324
msgid "Activate the Python environment that you wish to use."
msgstr "使用したいPython環境をアクティブにします。"
-#: ../../tutorials/create-python-package.md:315
+#: ../../tutorials/create-python-package.md:325
msgid "Run `python -m pip install -e .`"
msgstr "`python -m pip install -e .` を実行します。"
-#: ../../tutorials/create-python-package.md:317
-#: ../../tutorials/create-python-package.md:550
-#: ../../tutorials/create-python-package.md:557
-#: ../../tutorials/get-to-know-hatch.md:197 ../../tutorials/intro.md:242
-#: ../../tutorials/publish-pypi.md:9 ../../tutorials/publish-pypi.md:183
-#: ../../tutorials/publish-pypi.md:356 ../../tutorials/pyproject-toml.md:735
+#: ../../tutorials/create-python-package.md:327
+#: ../../tutorials/create-python-package.md:560
+#: ../../tutorials/create-python-package.md:567
+#: ../../tutorials/get-to-know-hatch.md:199 ../../tutorials/intro.md:246
+#: ../../tutorials/publish-pypi.md:9 ../../tutorials/publish-pypi.md:185
+#: ../../tutorials/publish-pypi.md:358 ../../tutorials/pyproject-toml.md:744
msgid "Todo"
msgstr "Todo"
-#: ../../tutorials/create-python-package.md:318
+#: ../../tutorials/create-python-package.md:328
msgid "Add this back in when the lesson is published"
msgstr "レッスンが公開されたら、これを追加してください。"
-#: ../../tutorials/create-python-package.md:319
+#: ../../tutorials/create-python-package.md:329
msgid ""
"Activate the Python environment that you wish to use. If you need help "
"with working with virtual environments check out this lesson (add link)."
msgstr "使用したいPython環境をアクティブにします。 仮想環境での作業で助けが必要な場合は、このレッスンをチェックしてください(リンクを追加)。"
-#: ../../tutorials/create-python-package.md:345
+#: ../../tutorials/create-python-package.md:355
msgid "What does `python -m pip install -e .` do?"
msgstr "`python -m pip install -e .` は何をしているのか?"
-#: ../../tutorials/create-python-package.md:348
+#: ../../tutorials/create-python-package.md:358
#, fuzzy
msgid ""
"`python -m pip install -e .` installs your package into the current "
@@ -1655,21 +1669,21 @@ msgstr ""
" 編集可能モードの重要な注意点のひとつは、コードを更新するたびに、そのコードが更新されるということです、 "
"その場合、Pythonを再起動する必要があるかもしれません。"
-#: ../../tutorials/create-python-package.md:353
+#: ../../tutorials/create-python-package.md:363
msgid ""
"If you wish to install the package regularly (not in editable mode) you "
"can use:"
msgstr "(編集可能モードではなく) 定期的にパッケージをインストールしたい場合は、次のようにします:"
-#: ../../tutorials/create-python-package.md:356
+#: ../../tutorials/create-python-package.md:366
msgid "`python -m pip install . `"
msgstr "`python -m pip install . `"
-#: ../../tutorials/create-python-package.md:358
+#: ../../tutorials/create-python-package.md:368
msgid "**Using `python -m` when calling `pip`**"
msgstr "**`pip` を呼び出す際に `python -m` を使用する**"
-#: ../../tutorials/create-python-package.md:360
+#: ../../tutorials/create-python-package.md:370
msgid ""
"Above, you use`python -m` to call the version of pip installed into your "
"current active environment. `python -m` is important to ensure that you "
@@ -1678,7 +1692,7 @@ msgstr ""
"上記では、 `python -m` を使用して、現在アクティブな環境にインストールされている pip のバージョンを呼び出します。 `python"
" -m` は、現在の環境にインストールされているバージョンの pip を呼び出していることを確認するために重要です。"
-#: ../../tutorials/create-python-package.md:364
+#: ../../tutorials/create-python-package.md:374
msgid ""
"IMPORTANT: pip can also be used to install packages from PyPI. However, "
"in this case, you are telling pip to install your package from a local "
@@ -1689,11 +1703,11 @@ msgstr ""
"重要: "
"pipはPyPIからパッケージをインストールするためにも使用できます。しかし、この場合、`.`を使用してローカルフォルダからパッケージをインストールするようpipに指示しています。`.`の代わりにコンピュータ上のプロジェクトディレクトリへのパスを指定することもできます。`.`はpipに現在の作業ディレクトリを使用するよう指示します。"
-#: ../../tutorials/create-python-package.md:367
+#: ../../tutorials/create-python-package.md:377
msgid "Look for pyospackage in your environment"
msgstr "あなたの環境でpyospackageを探す"
-#: ../../tutorials/create-python-package.md:369
+#: ../../tutorials/create-python-package.md:379
#, fuzzy
msgid ""
"Once you have installed your package, you can view it in your current "
@@ -1703,7 +1717,7 @@ msgstr ""
"パッケージをインストールしたら、現在の環境でそれを見ることができます。 `venv` または `conda` を使用している場合、 `pip` "
"list で現在インストールされているパッケージを確認することができます。"
-#: ../../tutorials/create-python-package.md:373
+#: ../../tutorials/create-python-package.md:383
#, fuzzy
msgid ""
"Note that because `pyospackage` is installed in editable mode (`-e`), pip"
@@ -1712,11 +1726,11 @@ msgstr ""
"pyospackageは編集可能モード (`-e`) "
"でインストールされるため、pipはプロジェクトのコードへのディレクトリパスを表示することに注意してください。"
-#: ../../tutorials/create-python-package.md:401
+#: ../../tutorials/create-python-package.md:411
msgid "Step 6: Test out your new package"
msgstr "ステップ 6: 新しいパッケージをテストする"
-#: ../../tutorials/create-python-package.md:403
+#: ../../tutorials/create-python-package.md:413
msgid ""
"After installing your package, type “python” at the command prompt in "
"your chosen terminal to start a Python session in your active Python "
@@ -1725,36 +1739,36 @@ msgstr ""
"パッケージをインストールした後、選択したターミナルのコマンドプロンプトで“python”と入力して、アクティブなPython環境でPythonセッションを開始します。パッケージをインストールしたら、選択したターミナルのコマンドプロンプトで"
" \"python\" と入力し、アクティブなPython環境でPythonセッションを開始します。"
-#: ../../tutorials/create-python-package.md:406
+#: ../../tutorials/create-python-package.md:416
#, fuzzy
msgid "You can now import your package and access the `add_numbers` function."
msgstr "これでパッケージをインポートして `add_num` 関数にアクセスできます。"
-#: ../../tutorials/create-python-package.md:418
+#: ../../tutorials/create-python-package.md:428
msgid "Installing packages from GitHub"
msgstr "GitHubからパッケージをインストールする"
-#: ../../tutorials/create-python-package.md:420
+#: ../../tutorials/create-python-package.md:430
msgid ""
"If you wish to share your code without publishing to PyPI you can always "
"install packages directly from GitHub using the syntax:"
msgstr "PyPIに公開せずにコードを共有したい場合は、いつでも構文を使ってGitHubから直接パッケージをインストールできます:"
-#: ../../tutorials/create-python-package.md:427
+#: ../../tutorials/create-python-package.md:437
msgid "To make your package GitHub installable, you can:"
msgstr "GitHubのパッケージをインストール可能にするには、次のようにします:"
-#: ../../tutorials/create-python-package.md:429
+#: ../../tutorials/create-python-package.md:439
msgid "Create a new GitHub repository"
msgstr "新しいGitHubリポジトリを作成する"
-#: ../../tutorials/create-python-package.md:430
+#: ../../tutorials/create-python-package.md:440
msgid ""
"Push the contents of the project directory that you created above, to "
"GitHub"
msgstr "上記で作成したプロジェクトディレクトリの内容をGitHubにプッシュします"
-#: ../../tutorials/create-python-package.md:431
+#: ../../tutorials/create-python-package.md:441
msgid ""
"Finally install the package from GitHub using the command above. When you"
" use the command above, don't forget to substitute the user, repo, and "
@@ -1763,34 +1777,34 @@ msgstr ""
"最後に、上記のコマンドを使ってGitHubからパッケージをインストールします。 "
"上記のコマンドを使用する際は、user、repo、branch_or_tag を特定の値に置き換えることをお忘れなく。"
-#: ../../tutorials/create-python-package.md:433
+#: ../../tutorials/create-python-package.md:443
msgid ""
"For instance below you install the pyospackage from the main branch of "
"the pyOpenSci repository."
msgstr "例えば、以下のようにpyOpenSciリポジトリのmainブランチからpyospackageをインストールします。"
-#: ../../tutorials/create-python-package.md:436
+#: ../../tutorials/create-python-package.md:446
msgid "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
msgstr "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
-#: ../../tutorials/create-python-package.md:440
+#: ../../tutorials/create-python-package.md:450
msgid "Congratulations! You created your first Python package"
msgstr "おめでとうございます! あなたは最初のPythonパッケージを作成しました"
-#: ../../tutorials/create-python-package.md:442
+#: ../../tutorials/create-python-package.md:452
#, fuzzy
msgid ""
"You have now created a Python package that you can install into any "
"Python environment."
msgstr "やったね! これでどんなPython環境にもインストールできるPythonパッケージができました。"
-#: ../../tutorials/create-python-package.md:447
+#: ../../tutorials/create-python-package.md:457
msgid ""
"Add a [README file](add-readme.md) and [LICENSE](add-license-coc.md) to "
"your package"
msgstr "[READMEファイル](add-readme.md) と [LICENSE](add-license-coc.md) をパッケージに追加する。"
-#: ../../tutorials/create-python-package.md:448
+#: ../../tutorials/create-python-package.md:458
msgid ""
"[Add more metadata to your `pyproject.toml`](pyproject-toml.md) file to "
"support PyPI publication."
@@ -1798,7 +1812,7 @@ msgstr ""
"PyPI での公開をサポートするために [ `pyproject.toml` ファイルにメタデータを追加します。](pyproject-"
"toml.md)"
-#: ../../tutorials/create-python-package.md:449
+#: ../../tutorials/create-python-package.md:459
msgid ""
"[Learn how to build your package distribution](publish-pypi) files "
"(**sdist** and **wheel**) and publish to **test PyPI**."
@@ -1806,43 +1820,43 @@ msgstr ""
"[パッケージ配布ファイルをビルド](publish-pypi) して (**sdist** と **wheel**) 、 **test "
"PyPI** に公開する方法を学びます。"
-#: ../../tutorials/create-python-package.md:450
+#: ../../tutorials/create-python-package.md:460
msgid ""
"Finally you will learn how to [publish to **conda-forge**](publish-conda-"
"forge) from **PyPI**."
msgstr "**PyPI** から [**conda-forge**](publish-conda-forge) に公開する方法を学んでください。"
-#: ../../tutorials/create-python-package.md:454
+#: ../../tutorials/create-python-package.md:464
msgid "About the Python package directory structure"
msgstr "Pythonパッケージのディレクトリ構造について"
-#: ../../tutorials/create-python-package.md:456
+#: ../../tutorials/create-python-package.md:466
msgid ""
"To make your Python code installable you need to create a specific "
"directory structure with the following elements:"
msgstr "Pythonコードをインストール可能にするには、以下の要素を含む特定のディレクトリ構造を作成する必要があります:"
-#: ../../tutorials/create-python-package.md:458
+#: ../../tutorials/create-python-package.md:468
msgid "A `pyproject.toml` file."
msgstr "`pyproject.toml` ファイル。"
-#: ../../tutorials/create-python-package.md:459
+#: ../../tutorials/create-python-package.md:469
msgid "A specific directory structure."
msgstr "特定のディレクトリ構造。"
-#: ../../tutorials/create-python-package.md:460
+#: ../../tutorials/create-python-package.md:470
msgid "Some code."
msgstr "いくつかのコード。"
-#: ../../tutorials/create-python-package.md:461
+#: ../../tutorials/create-python-package.md:471
msgid "An `__init__.py` file in your code directory."
msgstr "コードディレクトリの `__init__.py` ファイル。"
-#: ../../tutorials/create-python-package.md:463
+#: ../../tutorials/create-python-package.md:473
msgid "The directory structure you'll create in this lesson will look like this:"
msgstr "このレッスンで作成するディレクトリ構造は次のようになります:"
-#: ../../tutorials/create-python-package.md:478
+#: ../../tutorials/create-python-package.md:488
msgid ""
"Diagram showing the basic steps to creating an installable package. There"
" are 4 boxes with arrows pointing towards the right. The boxes read, your"
@@ -1853,7 +1867,7 @@ msgstr ""
"ボックスは、あなたのコード、パッケージ構造の作成、pyproject.tomlへのメタデータの追加、およびpip "
"installパッケージを読み込みます。"
-#: ../../tutorials/create-python-package.md:480
+#: ../../tutorials/create-python-package.md:490
#, fuzzy
msgid ""
"Once you have the basic items of a Python package (code, metadata and a "
@@ -1861,15 +1875,15 @@ msgid ""
"environment on your computer."
msgstr "やったね! これでどんなPython環境にもインストールできるPythonパッケージができました。"
-#: ../../tutorials/create-python-package.md:483
+#: ../../tutorials/create-python-package.md:493
msgid "About the basic package directory structure"
msgstr "基本パッケージのディレクトリ構造について"
-#: ../../tutorials/create-python-package.md:485
+#: ../../tutorials/create-python-package.md:495
msgid "Notice a few things about the above layout:"
msgstr "上記のレイアウトについて、いくつかの点に注目してください:"
-#: ../../tutorials/create-python-package.md:487
+#: ../../tutorials/create-python-package.md:497
msgid ""
"Your package code lives within a `src/packagename` directory. We suggest "
"that you use `src` (short for **source code**) directory as it [ensures "
@@ -1883,7 +1897,7 @@ msgstr ""
"structure.html#the-src-layout-and-testing) `src`( **source code** "
"の略)ディレクトリを使用することをお勧めします。"
-#: ../../tutorials/create-python-package.md:488
+#: ../../tutorials/create-python-package.md:498
msgid ""
"Within the `src` directory you have a package directory called "
"`pyospackage`. Use the name of your package for that directory name. This"
@@ -1893,7 +1907,7 @@ msgstr ""
"`src` ディレクトリの中に `pyospackage` というパッケージディレクトリがあります。 ディレクトリ名にはパッケージ名を使用します。"
" これは、インストール後にPythonコードでパッケージをインポートする際の名前になります。"
-#: ../../tutorials/create-python-package.md:489
+#: ../../tutorials/create-python-package.md:499
msgid ""
"In your package directory, you have an `__init__.py` file and all of your"
" Python modules. You will learn more about the `__init__.py` file below."
@@ -1901,11 +1915,11 @@ msgstr ""
"パッケージディレクトリには `__init__.py` ファイルと Python モジュールがあります。以下に `__init__.py` "
"ファイルについて詳しく説明します。"
-#: ../../tutorials/create-python-package.md:490
+#: ../../tutorials/create-python-package.md:500
msgid "The `pyproject.toml` file lives at the root directory of your package."
msgstr "`pyproject.toml` ファイルはパッケージのルートディレクトリにあります。"
-#: ../../tutorials/create-python-package.md:491
+#: ../../tutorials/create-python-package.md:501
msgid ""
"The name of the root directory for the package is **pyospackage** which "
"is the name of the package. This is not a requirement but you will often "
@@ -1915,11 +1929,11 @@ msgstr ""
"パッケージのルートディレクトリの名前は、パッケージ名である **pyospackage** です。これは必須ではありませんが、GitHub / "
"GitLabのリポジトリ名とルートディレクトリ名がパッケージ名と同じであることをよく見かけます。"
-#: ../../tutorials/create-python-package.md:493
+#: ../../tutorials/create-python-package.md:503
msgid "What is an `__init__.py` file?"
msgstr "`__init__.py` ファイルとは何ですか?"
-#: ../../tutorials/create-python-package.md:495
+#: ../../tutorials/create-python-package.md:505
msgid ""
"The `__init__.py` file tells Python that a directory should be treated as"
" a Python package. As such, a directory with an `__init__.py` file can be"
@@ -1930,32 +1944,32 @@ msgstr ""
"このように、`__init__.py` ファイルがあるディレクトリは Python に直接インポートすることができます。 Python "
"に認識させるために `__init__.py` ファイルにコードを記述する必要はありません; 空であることもあります。"
-#: ../../tutorials/create-python-package.md:499
+#: ../../tutorials/create-python-package.md:509
msgid ""
"For example, following the file structure example above which has an "
"`__init__.py` file within it, you can run:"
msgstr "例えば、 `__init__.py` ファイルを持つ上記のファイル構造の例に従って、次のように実行します:"
-#: ../../tutorials/create-python-package.md:505
-#: ../../tutorials/pyproject-toml.md:53
+#: ../../tutorials/create-python-package.md:515
+#: ../../tutorials/pyproject-toml.md:56
msgid "What is a pyproject.toml file?"
msgstr "pyproject.tomlファイルとは何ですか?"
-#: ../../tutorials/create-python-package.md:507
+#: ../../tutorials/create-python-package.md:517
msgid "The **pyproject.toml** file is:"
msgstr "**pyproject.toml** ファイルは:"
-#: ../../tutorials/create-python-package.md:509
+#: ../../tutorials/create-python-package.md:519
msgid ""
"Where you define your project's metadata (including its name, authors, "
"license, etc)"
msgstr "プロジェクトのメタデータ (名前、作者、ライセンスなど) を定義します。"
-#: ../../tutorials/create-python-package.md:510
+#: ../../tutorials/create-python-package.md:520
msgid "Where you define dependencies (the packages that it depends on)"
msgstr "依存関係 (依存するパッケージ) を定義します。"
-#: ../../tutorials/create-python-package.md:511
+#: ../../tutorials/create-python-package.md:521
msgid ""
"Used to specify and configure what build backend you want to use to "
"[build your package](../package-structure-code/python-package-"
@@ -1964,7 +1978,7 @@ msgstr ""
"[パッケージのビルド](../package-structure-code/python-package-distribution-files-"
"sdist-wheel) に使用するビルドバックエンドを指定し、設定します。"
-#: ../../tutorials/create-python-package.md:513
+#: ../../tutorials/create-python-package.md:523
msgid ""
"After the `__init__.py` and `pyproject.toml` files have been added, your "
"package can be built and distributed as an installable Python package "
@@ -1977,19 +1991,19 @@ msgstr ""
"`pyproject.toml` "
"ファイルには、パッケージをインストールするために、以下のようないくつかの基本的な項目が定義されている必要があることに注意してください:"
-#: ../../tutorials/create-python-package.md:519
+#: ../../tutorials/create-python-package.md:529
msgid "The `build-backend` that you want to use,"
msgstr "使用したい `build-backend` を指定します、"
-#: ../../tutorials/create-python-package.md:520
+#: ../../tutorials/create-python-package.md:530
msgid "The project `name` and `version`."
msgstr "プロジェクトの `name` と `version` を指定する。"
-#: ../../tutorials/create-python-package.md:522
+#: ../../tutorials/create-python-package.md:532
msgid "Why the pyproject.toml file is important"
msgstr "pyproject.tomlファイルが重要な理由"
-#: ../../tutorials/create-python-package.md:525
+#: ../../tutorials/create-python-package.md:535
#, fuzzy
msgid ""
"The `pyproject.toml` file replaces some of the functionality of both the "
@@ -1999,7 +2013,7 @@ msgstr ""
"`pyproject.toml` ファイルは `setup.py` ファイルと `setup.cfg` ファイルの機能の一部を置き換えます。 "
"`pyproject.toml` がないパッケージをpipインストールしようとすると、以下のエラーが発生します:"
-#: ../../tutorials/create-python-package.md:535
+#: ../../tutorials/create-python-package.md:545
#, fuzzy
msgid ""
"If your project already has a `setup.py` file, Hatch can be used to "
@@ -2008,7 +2022,7 @@ msgstr ""
"プロジェクトが既に `setup.py` ファイルを定義している場合、ハッチを使用して自動的に `pyproject.toml` "
"を作成することができます。"
-#: ../../tutorials/create-python-package.md:536
+#: ../../tutorials/create-python-package.md:546
#, fuzzy
msgid ""
"See [Using Hatch to Migrate setup.py to a pyproject.toml](setup-py-to-"
@@ -2017,13 +2031,13 @@ msgstr ""
"[Hatchを使ってsetup.pyをpyproject.tomlに移行する ](setup-py-to-pyproject-toml.md) "
"を参照"
-#: ../../tutorials/create-python-package.md:551
+#: ../../tutorials/create-python-package.md:561
msgid ""
"Is it clear where to add commands? Bash vs. Python console Bash vs. Zsh "
"is different"
msgstr "コマンドを追加する場所は明確ですか? BashとPythonのコンソールの違い BashとZshの違い"
-#: ../../tutorials/create-python-package.md:553
+#: ../../tutorials/create-python-package.md:563
msgid ""
"ADD: note about what makes something \"package worthy\", with a common "
"misconception being that a package should be production-ready code that's"
@@ -2034,12 +2048,12 @@ msgstr ""
"追加: 何をもって \"パッケージに値する\" とするのかについて、 "
"一般的な誤解は、パッケージは幅広いオーディエンスにとって価値のある、生産可能なコードであるべきだというものです。これはPythonに蔓延している誤解ではないかもしれませんが、パッケージがどのようなもので構成されるかを簡単に説明することは役に立つでしょう。"
-#: ../../tutorials/create-python-package.md:554
+#: ../../tutorials/create-python-package.md:564
#, fuzzy
msgid "They can use a codespace to complete this lesson too."
msgstr "**このレッスンを完了するために必要なもの**"
-#: ../../tutorials/create-python-package.md:558
+#: ../../tutorials/create-python-package.md:568
msgid ""
"When this lesson exists, uncomment this admonition You will learn how to "
"automate defining a package version using git tags in the version and "
@@ -2048,23 +2062,23 @@ msgstr ""
"このレッスンが存在する場合、この戒めのコメントを解除します。 このレッスンでは、git "
"タグを使ってパッケージのバージョン定義を自動化する方法と、パッケージのリリースについて学びます。"
-#: ../../tutorials/create-python-package.md:542
+#: ../../tutorials/create-python-package.md:552
msgid "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
msgstr "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
-#: ../../tutorials/create-python-package.md:546
+#: ../../tutorials/create-python-package.md:556
msgid "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
msgstr "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
-#: ../../tutorials/create-python-package.md:545
+#: ../../tutorials/create-python-package.md:555
msgid "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
msgstr "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
-#: ../../tutorials/create-python-package.md:547
+#: ../../tutorials/create-python-package.md:557
msgid "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
msgstr "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
-#: ../../tutorials/create-python-package.md:544
+#: ../../tutorials/create-python-package.md:554
msgid ""
"[Python module "
"docs](https://docs.python.org/3/tutorial/modules.html#packages)"
@@ -2112,128 +2126,129 @@ msgstr ""
#: ../../tutorials/develop-python-package-hatch.md:23
msgid ""
"Welcome to your shiny new package! This page will help you get started "
-"with using Hatch to run tests, build and check your package, and build "
-"your documentation."
+"with using [Hatch](get-to-know-hatch) to run tests, build and check your "
+"package, and build your documentation."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:25
+#: ../../tutorials/develop-python-package-hatch.md:27
+#, python-brace-format
msgid ""
-"To begin, have a look at the `pyproject.toml` file in your package "
-"directory. This file contains the configuration for your package. This "
-"file is written using a .toml format. [You can learn more about toml "
-"here.](https://www.pyopensci.org/python-package-guide/package-structure-"
-"code/pyproject-toml-python-package-metadata.html) Here's the TL&DR:"
+"To begin, have a look at the [pyproject.toml](pyproject-toml) file in "
+"your package directory. This file contains the configuration for your "
+"package and is written using {term}`TOML` format. Here's the TL&DR:"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:27
+#: ../../tutorials/develop-python-package-hatch.md:31
msgid "Each `[]` section in the toml file is called a table."
msgstr "tomlファイルの各 `[]` セクションはテーブルと呼ばれます。"
-#: ../../tutorials/develop-python-package-hatch.md:28
+#: ../../tutorials/develop-python-package-hatch.md:32
msgid "You can nest tables with double brackets like this`[[]]`"
msgstr "このように二重括弧`[[]]`でテーブルをネストできます"
-#: ../../tutorials/develop-python-package-hatch.md:29
+#: ../../tutorials/develop-python-package-hatch.md:33
msgid ""
"Tables contain information about a certain thing that you want to "
"configure."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:32
+#: ../../tutorials/develop-python-package-hatch.md:36
msgid ""
"You can configure Hatch to use UV by default for environment management. "
"UV is a package manager built in Rust. It is fast and will significantly "
"speed up environment creation."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:34
+#: ../../tutorials/develop-python-package-hatch.md:38
msgid ""
"To use UV with Hatch, configure Hatch in the \"tools\" section of your "
"`pyproject.toml` file."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:42
+#: ../../tutorials/develop-python-package-hatch.md:46
msgid ""
"Using Hatch for developing, building, and maintaining your pure Python "
"package"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:44
+#: ../../tutorials/develop-python-package-hatch.md:48
+#, python-brace-format
msgid ""
-"In the pyOpenSci Python package template, we have set up Hatch "
-"environments. You will notice at the bottom of the file, a [hatch "
-"environment](https://hatch.pypa.io/1.13/environment/) section, that looks"
-" like this:"
+"In the pyOpenSci Python package template, we have set up {term}`Hatch "
+"environment` definitions. You will notice at the bottom of the file, a "
+"[hatch environment](https://hatch.pypa.io/1.13/environment/) section, "
+"that looks like this:"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:52
+#: ../../tutorials/develop-python-package-hatch.md:59
msgid ""
"Hatch allows you to configure and run environments and scripts similar to"
" a workflow tool like tox or nox."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:55
+#: ../../tutorials/develop-python-package-hatch.md:62
msgid ""
"Hatch defaults to using `venv` to manage environments. However, you can "
"configure it to use other environment tools, such as conda or mamba."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:57
+#: ../../tutorials/develop-python-package-hatch.md:64
msgid ""
"[Read the hatch documentation to learn more about environments. "
"](https://hatch.pypa.io/1.13/tutorials/environment/basic-usage/)"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:61
+#: ../../tutorials/develop-python-package-hatch.md:68
msgid ""
"Below is the Hatch environment used to build and test your package. "
"Anytime you see: `tool.hatch.envs.test`, it tells Hatch:"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:64
+#: ../../tutorials/develop-python-package-hatch.md:71
msgid ""
"\"Hey, Hatch, this is the definition for an environment.`test` is the "
"name of the environment that I want you to create.\""
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:66
+#: ../../tutorials/develop-python-package-hatch.md:73
msgid "So `tool.hatch.envs.build` will create an environment called `build`."
msgstr "つまり `tool.hatch.envs.build` は `build` という環境を作成します。"
-#: ../../tutorials/develop-python-package-hatch.md:68
+#: ../../tutorials/develop-python-package-hatch.md:75
msgid ""
"Below the environment \"declaration,\" you can see the definition of what"
" should be in that environment."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:70
+#: ../../tutorials/develop-python-package-hatch.md:77
#, fuzzy
msgid "A Hatch environment to build your package"
msgstr "パッケージのインストール"
-#: ../../tutorials/develop-python-package-hatch.md:72
+#: ../../tutorials/develop-python-package-hatch.md:79
+#, python-brace-format
msgid ""
-"Below is a Hatch environment definition that you will find in your [new "
-"project's pyproject.toml file](create-python-package). It is set up to "
-"[build your package's](build-package) distribution files ([source "
-"distribution](python-source-distribution) and [wheel](python-wheel))."
+"Below is a Hatch environment definition that you will find in your new "
+"project's [pyproject.toml](pyproject-toml) file. It is set up to build "
+"your package's {term}`Distribution files` ({term}`Source distribution "
+"(sdist)` and {term}`Wheel (.whl)`)."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:74
+#: ../../tutorials/develop-python-package-hatch.md:84
+#, python-brace-format
msgid ""
-"Notice that the environment definition declares two dependencies: `pip` "
-"and `twine`, which the environment needs to run successfully. This "
-"declaration is similar to declaring dependencies for your package at the "
-"top of your `pyproject.toml`. This section tells Hatch to create a new "
-"VENV with pip and twine installed."
+"Notice that the environment definition declares two {term}`Dependencies`:"
+" `pip` and `twine`, which the environment needs to run successfully. This"
+" declaration is similar to declaring dependencies for your package at the"
+" top of your [pyproject.toml](pyproject-toml)."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:86
+#: ../../tutorials/develop-python-package-hatch.md:99
#, fuzzy
msgid "Hatch will install your package in editable mode by default"
msgstr "インタラクティブな開発のために編集可能モードでパッケージをインストールする方法"
-#: ../../tutorials/develop-python-package-hatch.md:87
+#: ../../tutorials/develop-python-package-hatch.md:100
msgid ""
"Notice the `detached = True` flag at the bottom of the environment. By "
"default, hatch will install your package in editable mode into any "
@@ -2241,145 +2256,148 @@ msgid ""
"package into the environment."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:91
+#: ../../tutorials/develop-python-package-hatch.md:104
msgid "Hatch scripts"
msgstr "Hatchスクリプト"
-#: ../../tutorials/develop-python-package-hatch.md:93
-msgid "Hatch supports defining scripts that run in specific Hatch environments."
+#: ../../tutorials/develop-python-package-hatch.md:106
+#, fuzzy, python-brace-format
+msgid ""
+"Hatch supports defining {term}`Script (Hatch)` commands that run in "
+"specific Hatch environments."
msgstr "Hatchは特定のHatch環境で実行されるスクリプトの定義をサポートしています。"
-#: ../../tutorials/develop-python-package-hatch.md:95
+#: ../../tutorials/develop-python-package-hatch.md:109
msgid ""
"Above, you have defined a new environment called 'build' that Hatch will "
"create as a virtual environment (venv). Because `detached = True` in that"
" environment, Hatch won't install your package into it."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:97
+#: ../../tutorials/develop-python-package-hatch.md:111
msgid ""
"You can then use that environment to run \"scripts\". The definition "
"below tells Hatch to run the following scripts in the build environment."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:99
+#: ../../tutorials/develop-python-package-hatch.md:113
msgid "`[tool.hatch.envs.build.scripts]`"
msgstr "`[tool.hatch.envs.build.scripts]`"
-#: ../../tutorials/develop-python-package-hatch.md:101
+#: ../../tutorials/develop-python-package-hatch.md:115
msgid "You define this `scripts` to run using the following syntax, where:"
msgstr "この `scripts` を実行するために次の構文を使用して定義します:"
-#: ../../tutorials/develop-python-package-hatch.md:103
+#: ../../tutorials/develop-python-package-hatch.md:117
msgid "`tool.hatch`: Alerts Hatch that this table is for Hatch to use"
msgstr "`tool.hatch`: このテーブルがHatch用であることをHatchに通知します"
-#: ../../tutorials/develop-python-package-hatch.md:104
+#: ../../tutorials/develop-python-package-hatch.md:118
msgid "`envs.build`: Use the defined build environment."
msgstr "`envs.build`: 定義されたビルド環境を使用します。"
-#: ../../tutorials/develop-python-package-hatch.md:105
+#: ../../tutorials/develop-python-package-hatch.md:119
msgid ""
"`scripts`: Define what scripts to run. In this case, Hatch will run shell"
" scripts."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:108
+#: ../../tutorials/develop-python-package-hatch.md:122
msgid ""
"Below is the `build.scripts` table that defines 3 shell commands to be "
"run:"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:110
+#: ../../tutorials/develop-python-package-hatch.md:124
msgid "`pip check` # verifies your dependencies"
msgstr "`pip check` # 依存関係を検証します"
-#: ../../tutorials/develop-python-package-hatch.md:111
+#: ../../tutorials/develop-python-package-hatch.md:125
#, fuzzy
msgid "`hatch build --clean` # build your packages distribution files."
msgstr "ステップ 2: パッケージのsdistとwheelディストリビューションをビルドする"
-#: ../../tutorials/develop-python-package-hatch.md:112
+#: ../../tutorials/develop-python-package-hatch.md:126
msgid ""
"`twine check dist/*` # use twine to check that your package's sdist "
"(source distribution) is ok."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:126
+#: ../../tutorials/develop-python-package-hatch.md:140
msgid ""
"Hatch, by default, will install your package in editable mode into any "
"virtual environment (venv) that it creates. If `detached=True` is set, "
"then it will skip that step."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:129
+#: ../../tutorials/develop-python-package-hatch.md:143
#, fuzzy
msgid "Running the build script"
msgstr "テストの実行"
-#: ../../tutorials/develop-python-package-hatch.md:131
+#: ../../tutorials/develop-python-package-hatch.md:145
msgid "You can run the build script and build your package like this:"
msgstr "ビルドスクリプトを実行し、次のようにパッケージをビルドできます:"
-#: ../../tutorials/develop-python-package-hatch.md:133
+#: ../../tutorials/develop-python-package-hatch.md:147
msgid "`hatch run build:check`"
msgstr "`hatch run build:check`"
-#: ../../tutorials/develop-python-package-hatch.md:135
+#: ../../tutorials/develop-python-package-hatch.md:149
msgid ""
"This step updates the build environment and then builds and checks the "
"output distributions of your package."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:137
+#: ../../tutorials/develop-python-package-hatch.md:151
msgid "You can enter the build environment in your shell to check it out:"
msgstr "シェルでビルド環境に入って確認できます:"
-#: ../../tutorials/develop-python-package-hatch.md:143
+#: ../../tutorials/develop-python-package-hatch.md:157
msgid "If you run `pip list` in the environment, twine will be there:"
msgstr "環境で `pip list` を実行すると、twineが入っています:"
-#: ../../tutorials/develop-python-package-hatch.md:149
-#: ../../tutorials/develop-python-package-hatch.md:207
+#: ../../tutorials/develop-python-package-hatch.md:163
+#: ../../tutorials/develop-python-package-hatch.md:221
#, fuzzy
msgid "To leave the environment use:"
msgstr "環境設定"
-#: ../../tutorials/develop-python-package-hatch.md:155
+#: ../../tutorials/develop-python-package-hatch.md:169
#, fuzzy
msgid "Hatch, testing, and matrix environments"
msgstr "Hatchと環境"
-#: ../../tutorials/develop-python-package-hatch.md:157
+#: ../../tutorials/develop-python-package-hatch.md:171
msgid ""
"It's always helpful to run your tests on the Python versions that you "
"expect your users to be using. In this section, you'll explore the test "
"environment setup in the pyOpenSci template package."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:159
+#: ../../tutorials/develop-python-package-hatch.md:173
msgid "Below, you see the Hatch environment test table."
msgstr "以下に、Hatch環境テストテーブルが表示されます。"
-#: ../../tutorials/develop-python-package-hatch.md:161
+#: ../../tutorials/develop-python-package-hatch.md:175
msgid ""
"Similar to the above build environment, the environment below defines the"
" dependencies that Hatch needs to install into the test environment "
"(required to run your tests)."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:175
+#: ../../tutorials/develop-python-package-hatch.md:189
msgid "Your test environment has a matrix associated with it"
msgstr "テスト環境にはマトリックスが関連付けられています"
-#: ../../tutorials/develop-python-package-hatch.md:177
+#: ../../tutorials/develop-python-package-hatch.md:191
msgid ""
"If the environment has a matrix associated with it, that tells Hatch to "
"run the tests across different Python versions. Below, you are running "
"tests on versions 3.10 through 3.13."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:180
+#: ../../tutorials/develop-python-package-hatch.md:194
msgid ""
"Hatch by default will install Python [using "
"UV](https://docs.astral.sh/uv/guides/install-python/) both when you "
@@ -2387,7 +2405,7 @@ msgid ""
" below"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:188
+#: ../../tutorials/develop-python-package-hatch.md:202
msgid ""
"In your project, if you run `hatch shell test`, you will see the output "
"below. This means that because there is a matrix of Python versions to "
@@ -2395,56 +2413,56 @@ msgid ""
"you want to use."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:201
+#: ../../tutorials/develop-python-package-hatch.md:215
msgid ""
"Pick the Python test environment that you want to use and enter it, like "
"this (this will open Python 3.13):"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:213
+#: ../../tutorials/develop-python-package-hatch.md:227
#, fuzzy
msgid "Hatch scripts for tests"
msgstr "`hatch publish -r test` を実行します"
-#: ../../tutorials/develop-python-package-hatch.md:215
+#: ../../tutorials/develop-python-package-hatch.md:229
msgid ""
"In that same tests section, you will see a `tool.hatch.envs.test.scripts`"
" section. Similar to what you saw above with the build steps, this is "
"where the \"script\" to run your tests is defined."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:218
+#: ../../tutorials/develop-python-package-hatch.md:232
msgid ""
"Notice that below, the script has a script called `run`. And that script "
"runs pytest with a set of arguments, including generating code coverage."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:225
+#: ../../tutorials/develop-python-package-hatch.md:239
msgid "To run this script in your terminal, use the syntax:"
msgstr "ターミナルでこのスクリプトを実行するには、次の構文を使用します:"
-#: ../../tutorials/develop-python-package-hatch.md:227
+#: ../../tutorials/develop-python-package-hatch.md:241
msgid "`hatch run test:run`"
msgstr "`hatch run test:run`"
-#: ../../tutorials/develop-python-package-hatch.md:229
+#: ../../tutorials/develop-python-package-hatch.md:243
#, fuzzy
msgid "Reminder"
msgstr "おすすめ"
-#: ../../tutorials/develop-python-package-hatch.md:232
+#: ../../tutorials/develop-python-package-hatch.md:246
msgid ""
"`hatch run`: this calls hatch and tells it that it will be running a "
"command"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:233
+#: ../../tutorials/develop-python-package-hatch.md:247
msgid ""
"`test:run` defines the environment you want it to run (`test`) in this "
"case, and the script is defined as `run`"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:236
+#: ../../tutorials/develop-python-package-hatch.md:250
msgid ""
"If you have a matrix setup for tests, then it will both install the "
"needed Python version using UV and run your tests in each version of the "
@@ -2453,35 +2471,35 @@ msgid ""
"version listed in the matrix table."
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:266
+#: ../../tutorials/develop-python-package-hatch.md:280
msgid "Build your documentation with Hatch environments"
msgstr "Hatch環境でドキュメントをビルドする"
-#: ../../tutorials/develop-python-package-hatch.md:268
+#: ../../tutorials/develop-python-package-hatch.md:282
msgid ""
"Finally, you can build and serve your documentation using hatch. To build"
" a static HTML version of the docs run:"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:271
+#: ../../tutorials/develop-python-package-hatch.md:285
msgid "`hatch run docs:build`"
msgstr "`hatch run docs:build`"
-#: ../../tutorials/develop-python-package-hatch.md:273
+#: ../../tutorials/develop-python-package-hatch.md:287
msgid ""
"To run a local server with your docs updated as you update your markdown "
"files, run:"
msgstr ""
-#: ../../tutorials/develop-python-package-hatch.md:275
+#: ../../tutorials/develop-python-package-hatch.md:289
msgid "`hatch run docs:serve`"
msgstr "`hatch run docs:serve`"
-#: ../../tutorials/develop-python-package-hatch.md:277
+#: ../../tutorials/develop-python-package-hatch.md:291
msgid "To stop serving the docs use:"
msgstr "ドキュメントの提供を停止するには:"
-#: ../../tutorials/develop-python-package-hatch.md:279
+#: ../../tutorials/develop-python-package-hatch.md:293
msgid "mac: ctrl + c windows:"
msgstr "mac: ctrl + c windows:"
@@ -2490,9 +2508,9 @@ msgid "Get to Know Hatch"
msgstr "Hatchを知る"
#: ../../tutorials/get-to-know-hatch.md:8
+#, fuzzy
msgid ""
-"Our Python packaging tutorials use the tool "
-"[Hatch](https://hatch.pypa.io/latest/). While there are [many great "
+"Our Python packaging tutorials use Hatch. While there are [many great "
"packaging tools](/package-structure-code/python-package-build-tools) out "
"there, we have selected Hatch because:"
msgstr ""
@@ -2508,9 +2526,10 @@ msgid ""
msgstr "高品質なPythonパッケージを作成するために必要なステップのほとんどをサポートするエンドツーエンドのツールです。Hatchを使えば、初心者は覚えるツールが少なくて済みます。"
#: ../../tutorials/get-to-know-hatch.md:16
+#, fuzzy, python-brace-format
msgid ""
-"It supports different build back-ends if you ever need to compile code in"
-" other languages."
+"It supports different {term}`Build backend` options if you ever need to "
+"compile code in other languages."
msgstr "他の言語のコードをコンパイルする必要がある場合は、異なるビルドバックエンドをサポートします。"
#: ../../tutorials/get-to-know-hatch.md:18
@@ -2611,9 +2630,9 @@ msgstr ""
"[Hatchのインストールドキュメント](https://hatch.pypa.io/latest/install/) をご覧ください。"
#: ../../tutorials/get-to-know-hatch.md:75
+#, fuzzy, python-brace-format
msgid ""
-"Hatch can also be installed directly using "
-"[pip](https://hatch.pypa.io/latest/install/#pip) or "
+"Hatch can also be installed directly using {term}`pip` or "
"[conda](https://hatch.pypa.io/latest/install/#conda). We encourage you to"
" follow the instructions above because we have found that the Hatch "
"installers for Windows and Mac are the easiest and most efficient."
@@ -2622,13 +2641,13 @@ msgstr ""
"[conda](https://hatch.pypa.io/latest/install/#conda) "
"を使って直接インストールすることもできる。WindowsとMac用のHatchインストーラーが最も簡単で効率的であることがわかりましたので、上記の指示に従うことをお勧めします。"
-#: ../../tutorials/get-to-know-hatch.md:79
+#: ../../tutorials/get-to-know-hatch.md:80
msgid ""
"Our Linux users have found success installing Hatch with pipx if they "
"already use apt install."
msgstr "私たちのLinuxユーザーは、すでにapt installを使っている場合、pipxを使ってHatchをインストールすることに成功しています。"
-#: ../../tutorials/get-to-know-hatch.md:82
+#: ../../tutorials/get-to-know-hatch.md:83
msgid ""
"Both approaches (using a graphical installer on Windows/Mac and pipx) "
"ensure that you have Hatch installed globally. A global install means "
@@ -2638,28 +2657,28 @@ msgstr ""
"どちらのアプローチ(Windows/Macでグラフィカルインストーラを使う方法とpipxを使う方法)も、Hatchがグローバルにインストールされていることを保証します。"
" グローバルインストールとは、コンピュータ上の全てのPython環境でHatchが利用できることを意味します。"
-#: ../../tutorials/get-to-know-hatch.md:87
+#: ../../tutorials/get-to-know-hatch.md:88
msgid "Check that hatch installed correctly"
msgstr "hatchが正しく取り付けられているか確認します"
-#: ../../tutorials/get-to-know-hatch.md:89
+#: ../../tutorials/get-to-know-hatch.md:90
msgid ""
"Once you have completed the installation instructions above, you can open"
" your terminal, and make sure that Hatch installed correctly using the "
"command below:"
msgstr "上記のインストール手順が完了したら、ターミナルを開き、以下のコマンドを使用してHatchが正しくインストールされたことを確認してください:"
-#: ../../tutorials/get-to-know-hatch.md:97
+#: ../../tutorials/get-to-know-hatch.md:98
msgid ""
"*Note the version number output of `hatch --version` will likely be "
"different from the output above in this tutorial.*"
msgstr "* `hatch --version` で出力されるバージョン番号は、このチュートリアルの上記の出力とは異なる可能性が高いことに注意してください。*"
-#: ../../tutorials/get-to-know-hatch.md:100
+#: ../../tutorials/get-to-know-hatch.md:101
msgid "Configure Hatch"
msgstr "Hatchの設定"
-#: ../../tutorials/get-to-know-hatch.md:102
+#: ../../tutorials/get-to-know-hatch.md:103
msgid ""
"Once you have installed Hatch, you can customize its configuration. This "
"includes setting the default name and setup for every package you create."
@@ -2669,7 +2688,7 @@ msgstr ""
"これには、作成するすべてのパッケージにデフォルト名とセットアップを設定することも含まれます。 "
"このステップは必須ではありませんが、行うことをお勧めします。"
-#: ../../tutorials/get-to-know-hatch.md:106
+#: ../../tutorials/get-to-know-hatch.md:107
msgid ""
"Hatch stores your configuration in a [`config.toml` "
"file](https://hatch.pypa.io/latest/config/project-templates/)."
@@ -2677,7 +2696,7 @@ msgstr ""
"Hatchは設定を [`config.toml`ファイル](https://hatch.pypa.io/latest/config"
"/project-templates/) に保存します。"
-#: ../../tutorials/get-to-know-hatch.md:108
+#: ../../tutorials/get-to-know-hatch.md:109
msgid ""
"While you can update the `config.toml` file through the command line, it "
"might be easier to look at and update it in a text editor if you are "
@@ -2686,54 +2705,56 @@ msgstr ""
"コマンドラインから `config.toml` ファイルを更新することができます, "
"初めて使う場合は、テキストエディタで見て更新する方が簡単かもしれません。"
-#: ../../tutorials/get-to-know-hatch.md:112
+#: ../../tutorials/get-to-know-hatch.md:113
msgid "Step 1: Open and Edit Your `config.toml` File"
msgstr "ステップ 1: `config.toml` ファイルを開いて編集する"
-#: ../../tutorials/get-to-know-hatch.md:114
+#: ../../tutorials/get-to-know-hatch.md:115
msgid ""
"To open the config file in your file browser, run the following command "
"in your shell:"
msgstr "ファイルブラウザで設定ファイルを開くには、シェルで以下のコマンドを実行します:"
-#: ../../tutorials/get-to-know-hatch.md:117
+#: ../../tutorials/get-to-know-hatch.md:118
msgid "`hatch config explore`"
msgstr "`hatch config explore`"
-#: ../../tutorials/get-to-know-hatch.md:119
+#: ../../tutorials/get-to-know-hatch.md:120
msgid ""
"This will open up a directory window that allows you to double-click on "
"the file and open it in your favorite text editor."
msgstr "ディレクトリウィンドウが開き、ファイルをダブルクリックして好きなテキストエディタで開くことができます。"
-#: ../../tutorials/get-to-know-hatch.md:122
+#: ../../tutorials/get-to-know-hatch.md:123
msgid ""
"You can also retrieve the location of the Hatch config file by running "
"the following command in your shell:"
msgstr "シェルで以下のコマンドを実行すれば、Hatchのコンフィグファイルの場所を取得することもできます:"
-#: ../../tutorials/get-to-know-hatch.md:130
+#: ../../tutorials/get-to-know-hatch.md:131
msgid "Step 2 - update your email and name"
msgstr "ステップ2 - Eメールと名前を更新する"
-#: ../../tutorials/get-to-know-hatch.md:132
+#: ../../tutorials/get-to-know-hatch.md:133
+#, fuzzy
msgid ""
"Once the file is open, update the [template] table of the `config.toml` "
"file with your name and email. This information will be used in any "
-"`pyproject.toml` metadata files that you create using Hatch."
+"[pyproject.toml](pyproject-toml) metadata files that you create using "
+"Hatch."
msgstr ""
"ファイルを開いたら、 `config.toml` ファイルの[template]テーブルをあなたの名前とEメールで更新します。 "
"この情報は、Hatchを使用して作成した `pyproject.toml` メタデータファイルに使用されます。"
-#: ../../tutorials/get-to-know-hatch.md:142
+#: ../../tutorials/get-to-know-hatch.md:144
msgid "Step 3"
msgstr "ステップ3"
-#: ../../tutorials/get-to-know-hatch.md:144
+#: ../../tutorials/get-to-know-hatch.md:146
msgid "Next, set tests to false in the `[template.plugins.default]` table."
msgstr "次に、 `[template.plugins.default]` テーブルでtestsをfalseに設定します。"
-#: ../../tutorials/get-to-know-hatch.md:146
+#: ../../tutorials/get-to-know-hatch.md:148
msgid ""
"While tests are important, setting the tests configuration in Hatch to "
"`true` will create a more complex `pyproject.toml` file. You won't need "
@@ -2743,11 +2764,11 @@ msgstr ""
"テストは重要ですが、Hatchのtests設定を `true` にすると、より複雑な `pyproject.toml` "
"ファイルが作成されます。この初心者向けチュートリアルシリーズではこの機能を使う必要はありませんが、後のチュートリアルで紹介します。"
-#: ../../tutorials/get-to-know-hatch.md:151
+#: ../../tutorials/get-to-know-hatch.md:153
msgid "Your `config.toml` file should look something like the one below."
msgstr "あなたの `config.toml` ファイルは以下のようになるはずです。"
-#: ../../tutorials/get-to-know-hatch.md:189
+#: ../../tutorials/get-to-know-hatch.md:191
#, fuzzy
msgid ""
"Also notice that the default license option is MIT. While we will discuss"
@@ -2760,31 +2781,31 @@ msgstr ""
"MITライセンスは [choosealicense.com](https://www.choosealicense.com) "
"が推奨する寛容なライセンスです、そしてこのチュートリアルシリーズではこれを使用します。"
-#: ../../tutorials/get-to-know-hatch.md:195
+#: ../../tutorials/get-to-know-hatch.md:197
msgid "You are of course welcome to select another license."
msgstr "もちろん、他のライセンスを選択することも歓迎します。"
-#: ../../tutorials/get-to-know-hatch.md:198
+#: ../../tutorials/get-to-know-hatch.md:200
msgid ""
"I think we'd need the SPDX license options here if they want to chose "
"bsd-3 for instance"
msgstr "例えばbsd-3を選びたいのであれば、SPDXライセンスのオプションが必要だと思います。"
-#: ../../tutorials/get-to-know-hatch.md:201
+#: ../../tutorials/get-to-know-hatch.md:203
msgid "Step 4: Close the config file and run `hatch config show`"
msgstr "ステップ4: 設定ファイルを閉じて、 `hatch config show` を実行します。"
-#: ../../tutorials/get-to-know-hatch.md:203
+#: ../../tutorials/get-to-know-hatch.md:205
msgid ""
"Once you have completed the steps above run the following command in your"
" shell."
msgstr "上記の手順が完了したら、シェルで以下のコマンドを実行します。"
-#: ../../tutorials/get-to-know-hatch.md:205
+#: ../../tutorials/get-to-know-hatch.md:207
msgid "`hatch config show`"
msgstr "`hatch config show`"
-#: ../../tutorials/get-to-know-hatch.md:207
+#: ../../tutorials/get-to-know-hatch.md:209
msgid ""
"`hatch config show` will print out the contents of your `config.toml` "
"file in your shell. Look at the values and ensure that your name, email "
@@ -2793,21 +2814,21 @@ msgstr ""
"`hatch config show` はシェルの `config.toml` ファイルの内容を出力します。 "
"値を見て、あなたの名前とEメールが設定されていることを確認してください。また、 `tests=false` であることを確認すること。"
-#: ../../tutorials/get-to-know-hatch.md:211
+#: ../../tutorials/get-to-know-hatch.md:213
msgid "Hatch features"
msgstr "Hatchの特徴"
-#: ../../tutorials/get-to-know-hatch.md:213
+#: ../../tutorials/get-to-know-hatch.md:215
msgid ""
"Hatch offers a suite of features that will make creating, publishing and "
"maintaining your Python package easier."
msgstr "Hatchは、Pythonパッケージの作成、公開、保守を容易にする一連の機能を提供します。"
-#: ../../tutorials/get-to-know-hatch.md:216
+#: ../../tutorials/get-to-know-hatch.md:218
msgid "Comparison to other tools"
msgstr "他のツールとの比較"
-#: ../../tutorials/get-to-know-hatch.md:218
+#: ../../tutorials/get-to-know-hatch.md:220
msgid ""
"[We compared Hatch to several of the other popular packaging tools in the"
" ecosystem including flit, pdm and poetry. Learn more here](package-"
@@ -2816,15 +2837,15 @@ msgstr ""
"[私たちはHatchを、flit、pdm、poetryなど、エコシステムで人気のある他のパッケージングツールと比較しました。 詳細はこちら"
"](package-features)"
-#: ../../tutorials/get-to-know-hatch.md:221
+#: ../../tutorials/get-to-know-hatch.md:223
msgid "[More on Hatch here](hatch)"
msgstr "[Hatchの詳細はこちら](hatch)"
-#: ../../tutorials/get-to-know-hatch.md:223
+#: ../../tutorials/get-to-know-hatch.md:225
msgid "A few features that Hatch offers"
msgstr "Hatchが提供するいくつかの機能"
-#: ../../tutorials/get-to-know-hatch.md:225
+#: ../../tutorials/get-to-know-hatch.md:227
msgid ""
"It will convert metadata stored in a `setup.py` or `setup.cfg` file to a "
"pyproject.toml file for you (see [Migrating setup.py to pyproject.toml "
@@ -2834,89 +2855,93 @@ msgstr ""
"ファイルに変換します。 ([Hatchを使用してsetup.pyをpyproject.tomlに移行する](setup-py-to-"
"pyproject-toml.md ) を参照)"
-#: ../../tutorials/get-to-know-hatch.md:227
+#: ../../tutorials/get-to-know-hatch.md:229
msgid ""
"It will help you by storing configuration information for publishing to "
"PyPI after you've entered it once."
msgstr "PyPIに公開するための設定情報を、一度入力した後に保存してくれます。"
-#: ../../tutorials/get-to-know-hatch.md:229
+#: ../../tutorials/get-to-know-hatch.md:231
msgid "Use `hatch -h` to see all of the available commands."
msgstr "利用可能なコマンドをすべて表示するには、 `hatch -h` を使用します。"
-#: ../../tutorials/get-to-know-hatch.md:231
+#: ../../tutorials/get-to-know-hatch.md:233
msgid "What's next"
msgstr "次のレッスン"
-#: ../../tutorials/get-to-know-hatch.md:233
+#: ../../tutorials/get-to-know-hatch.md:235
msgid ""
"In the next lesson you'll learn how to package and make your code "
"installable using Hatch."
msgstr "次のレッスンでは、Hatchを使ってコードをパッケージ化し、インストール可能にする方法を学びます。"
-#: ../../tutorials/intro.md:33 ../../tutorials/setup-py-to-pyproject-toml.md:30
+#: ../../tutorials/intro.md:34 ../../tutorials/setup-py-to-pyproject-toml.md:36
msgid "Get to know Hatch"
msgstr "Hatchを知る"
-#: ../../tutorials/intro.md:33
+#: ../../tutorials/intro.md:34 ../../tutorials/run-python-scripts-hatch.md:8
+msgid "Run standalone Python scripts with Hatch"
+msgstr ""
+
+#: ../../tutorials/intro.md:34
msgid "Python Packaging Tutorial Setup"
msgstr "Pythonパッケージングチュートリアルのセットアップ"
-#: ../../tutorials/intro.md:40 ../../tutorials/intro.md:87
+#: ../../tutorials/intro.md:42 ../../tutorials/intro.md:89
msgid "What is a Python package?"
msgstr "Pythonパッケージとは何ですか?"
-#: ../../tutorials/intro.md:40
+#: ../../tutorials/intro.md:42
#, fuzzy
msgid "Create a Python package"
msgstr "なぜPythonパッケージを作るのか?"
-#: ../../tutorials/intro.md:40
+#: ../../tutorials/intro.md:42
msgid "Publish to PyPI"
msgstr "PyPIに公開する"
-#: ../../tutorials/intro.md:40
+#: ../../tutorials/intro.md:42
msgid "Publish to conda-forge"
msgstr "conda-forgeに公開する"
-#: ../../tutorials/intro.md:40
+#: ../../tutorials/intro.md:42
msgid "Publish using GitHub Actions and Trusted Publishing"
msgstr ""
-#: ../../tutorials/intro.md:40
+#: ../../tutorials/intro.md:42
msgid "Create and publish a Python Package"
msgstr "Pythonパッケージの作成と公開"
-#: ../../tutorials/intro.md:51
+#: ../../tutorials/intro.md:53
#, fuzzy
msgid "Develop package (Hatch environments)"
msgstr "Pythonのパッケージと環境"
-#: ../../tutorials/intro.md:51
+#: ../../tutorials/intro.md:53
msgid "Add README file"
msgstr "README ファイルを追加する"
-#: ../../tutorials/intro.md:51
+#: ../../tutorials/intro.md:53
msgid "Add a license & code of conduct"
msgstr "ライセンスと行動規範の追加"
-#: ../../tutorials/intro.md:51
+#: ../../tutorials/intro.md:53
msgid "Update metadata in pyproject.toml"
msgstr "pyproject.tomlのメタデータを更新する"
-#: ../../tutorials/intro.md:51
+#: ../../tutorials/intro.md:53
msgid "Project information files & metadata"
msgstr "プロジェクト情報ファイルとメタデータ"
-#: ../../tutorials/intro.md:61
+#: ../../tutorials/intro.md:63
msgid "Reference Guides"
msgstr "リファレンスガイド"
-#: ../../tutorials/intro.md:68
+#: ../../tutorials/intro.md:70
msgid "Migrate setup.py to a pyproject.toml using Hatch"
msgstr "Hatchを使ってsetup.pyをpyproject.tomlに移行する"
-#: ../../tutorials/intro.md:68
+#: ../../tutorials/intro.md:70
msgid "Hatch for Existing Packages"
msgstr "既存パッケージ用Hatch"
@@ -2929,10 +2954,11 @@ msgid "_A start to finish beginner-friendly tutorial_"
msgstr "_初心者にやさしいチュートリアル_"
#: ../../tutorials/intro.md:11
+#, fuzzy, python-brace-format
msgid ""
"Welcome to the pyOpenSci Python packaging tutorial series. The lessons on"
" the upcoming pages walk you through the core steps needed to create a "
-"Python package."
+"{term}`Python package`."
msgstr ""
"pyOpenSci Pythonパッケージングチュートリアルシリーズへようこそ。 "
"これからのページのレッスンは、Pythonパッケージを作成するために必要なコアステップを説明します。"
@@ -2947,7 +2973,7 @@ msgstr ""
"パッケージングチュートリアルのレッスンを示す図。Pythonパッケージとは何か、コードをpipでインストール可能にする、パッケージをPyPIに公開する、READMEとLICENSEファイルを追加する、PyPI用のメタデータを追加する、最後にconda"
" forgeに公開する、の6つです。"
-#: ../../tutorials/intro.md:19 ../../tutorials/trusted-publishing.md:255
+#: ../../tutorials/intro.md:19 ../../tutorials/trusted-publishing.md:258
msgid ""
"This lesson is the first in a series of lessons to help you get started "
"with Python packaging."
@@ -2968,72 +2994,73 @@ msgstr ""
"しかし、Pythonパッケージの作成に関わるステップをよりよく理解することに興味があるのであれば、このコンテンツはまだ価値があるでしょう。"
#: ../../tutorials/intro.md:29
+#, fuzzy
msgid ""
"In this series you will learn about the core elements that you need to "
-"publish your package to the [Python Package Index "
-"(PyPI)](https://pypi.org/)."
+"publish your package to [PyPI](publish-pypi)."
msgstr ""
"このシリーズでは、 [Python Package Index (PyPI)](https://pypi.org/) "
"にパッケージを公開するために必要なコアな要素について学びます。"
-#: ../../tutorials/intro.md:31
+#: ../../tutorials/intro.md:32
msgid ""
"In the second series, you will learn about infrastructure and "
"documentation needed to support package maintenance."
msgstr "第2シリーズでは、パッケージのメンテナンスをサポートするために必要なインフラとドキュメントについて学びます。"
-#: ../../tutorials/intro.md:75 ../../tutorials/publish-conda-forge.md:20
-#: ../../tutorials/publish-pypi.md:20 ../../tutorials/pyproject-toml.md:24
-#: ../../tutorials/setup-py-to-pyproject-toml.md:18
+#: ../../tutorials/intro.md:77 ../../tutorials/publish-conda-forge.md:22
+#: ../../tutorials/publish-pypi.md:20 ../../tutorials/pyproject-toml.md:27
+#: ../../tutorials/setup-py-to-pyproject-toml.md:20
#: ../../tutorials/trusted-publishing.md:13
msgid "Learning Objectives"
msgstr "学習目標"
-#: ../../tutorials/intro.md:77
+#: ../../tutorials/intro.md:79
msgid ""
"This lesson introduces you to the basic components of a Python package. "
"After reading this lesson you will:"
msgstr "このレッスンでは Python パッケージの基本的な構成要素を紹介します。 このレッスンを読めば、次のことがわかります:"
-#: ../../tutorials/intro.md:80
+#: ../../tutorials/intro.md:82
msgid "Understand what a Python package is"
msgstr "Pythonパッケージとは何かを理解する"
-#: ../../tutorials/intro.md:81
+#: ../../tutorials/intro.md:83
msgid "Be able to list the 5 core components of a Python package"
msgstr "Pythonパッケージの5つのコアコンポーネントを列挙できます"
-#: ../../tutorials/intro.md:82
+#: ../../tutorials/intro.md:84
msgid ""
"Be able to explain the difference between generalizable code and code "
"that supports a specific scientific application"
msgstr "一般化可能なコードと特定の科学的アプリケーションをサポートするコードの違いを説明できます。"
-#: ../../tutorials/intro.md:89
+#: ../../tutorials/intro.md:91
msgid ""
"At a high level, you can think about a Python package as a toolbox that "
"you can use to perform various tasks."
msgstr "高レベルでは、Pythonパッケージは、様々なタスクを実行するために使用できるツールボックスと考えることができます。"
-#: ../../tutorials/intro.md:92
+#: ../../tutorials/intro.md:94
+#, fuzzy, python-brace-format
msgid ""
"A Python package is basically a directory with a specific file structure."
-" Within the package directory structure, there are modules which are "
-"files that end in `.py` (the same extension you'd see in a Python "
-"script). These modules allow you to group and structure your Python code."
-" Each module contains functions and classes, that you can think about as "
-"the tools in your toolbox."
+" Within the package directory structure, there are {term}`Module` objects"
+" which are files that end in `.py` (the same extension you'd see in a "
+"Python script). These modules allow you to group and structure your "
+"Python code. Each module contains functions and classes, that you can "
+"think about as the tools in your toolbox."
msgstr ""
"Pythonパッケージは基本的に特定のファイル構造を持つディレクトリです。 パッケージのディレクトリ構造の中に、`.py` "
"で終わるファイル(Pythonスクリプトで見られるのと同じ拡張子)のモジュールがあります。これらのモジュールによって、Pythonコードをグループ化し、構造化することができます。各モジュールには関数とクラスが含まれており、それらはあなたの道具箱の中の道具だと考えることができます。"
-#: ../../tutorials/intro.md:101
+#: ../../tutorials/intro.md:103
msgid ""
"Diagram showing a sketch of a toolbox filled with different tools "
"including a hammer and a saw."
msgstr "ハンマーやノコギリなど、さまざまな工具が入った工具箱のスケッチを示す図。"
-#: ../../tutorials/intro.md:103
+#: ../../tutorials/intro.md:105
msgid ""
"You can think about a package as a toolbox filled with coding tools. A "
"tool may be a function or a class. Each tool does a specific thing well."
@@ -3041,11 +3068,11 @@ msgstr ""
"パッケージとは、コーディングツールが詰まった道具箱のようなものだと考えることができます。 ツールは関数かもしれないし、クラスかもしれません。 "
"それぞれのツールは特定のことをよくします。"
-#: ../../tutorials/intro.md:108
+#: ../../tutorials/intro.md:110
msgid "Python packages are installable"
msgstr "Pythonパッケージはインストール可能"
-#: ../../tutorials/intro.md:110
+#: ../../tutorials/intro.md:112
msgid ""
"A package is installable, which means that you can add the functionality "
"within the package's code to any Python environment and import that "
@@ -3053,7 +3080,7 @@ msgid ""
"as NumPy or Matplotlib."
msgstr "パッケージはインストール可能で、パッケージのコード内の機能をどのPython環境にも追加でき、NumPyやMatplotlibのような科学的なPythonのコアパッケージをインポートするように、その機能をインポートできます。"
-#: ../../tutorials/intro.md:119
+#: ../../tutorials/intro.md:121
msgid ""
"Installing a package into an environment makes it easier to manage and "
"reuse your code across different projects. Structuring your code as a "
@@ -3061,15 +3088,15 @@ msgid ""
"the toolbox you've created and let others build with it."
msgstr "パッケージを環境にインストールすることで、異なるプロジェクト間でのコードの管理と再利用が容易になる。あなたのコードをパッケージとして構造化することは、あなたが作成したツールボックスのツールを共有し、他の人がそれを使って構築できるようにするために必要な最初のステップです。"
-#: ../../tutorials/intro.md:124
+#: ../../tutorials/intro.md:126
msgid "Why create a Python package?"
msgstr "なぜPythonパッケージを作るのか?"
-#: ../../tutorials/intro.md:126
+#: ../../tutorials/intro.md:128
msgid "You might create a Python package because you want to:"
msgstr "Pythonパッケージを作りたいから作るかもしれません:"
-#: ../../tutorials/intro.md:128
+#: ../../tutorials/intro.md:130
msgid ""
"**Use your code across different projects:** At its most basic level, "
"creating a package allows you to install your code into a Python "
@@ -3080,16 +3107,17 @@ msgstr ""
"最も基本的なレベルでは、パッケージを作成することで、あなたのコードをPython環境にインストールすることができます。 "
"これにより、ローカルとクラウドの両方のワークフローに関数やクラスをインポートすることができます。"
-#: ../../tutorials/intro.md:129
+#: ../../tutorials/intro.md:131
+#, fuzzy, python-brace-format
msgid ""
"**Share your code:** If you publish a package on a public repository such"
-" as PyPI or conda, your package can be installed on any machine using pip"
-" or conda with a single command."
+" as PyPI or conda-forge, your package can be installed on any machine "
+"using {term}`pip` or conda with a single command."
msgstr ""
"**Share your code:** PyPIやcondaのような公開リポジトリでパッケージを公開する場合、 "
"あなたのパッケージは、pipやcondaを使ってどのマシンにもコマンドひとつでインストールできます。"
-#: ../../tutorials/intro.md:130
+#: ../../tutorials/intro.md:134
msgid ""
"**Build community around your code:** Packages make it easier for "
"multiple people to work on the same project (particularly when published "
@@ -3104,7 +3132,7 @@ msgstr ""
"のようなバージョン管理システムを使えば、コードベースへの長期的な変更を追跡するのがさらに簡単になる。 "
"issueやプルリクエストのようなツールは、外部のユーザーがバグ修正に貢献したり、コードベースへの変更を受け入れるためのレビュープロセスを確立したりすることを容易にします。"
-#: ../../tutorials/intro.md:131
+#: ../../tutorials/intro.md:135
msgid ""
"**Organize your code:** Packages can be used to organize large code "
"projects, dividing them into smaller, more manageable components. This "
@@ -3114,29 +3142,29 @@ msgstr ""
"**コードを整理する:** パッケージは、大規模なコード・プロジェクトを整理し、より小さく管理しやすいコンポーネントに分割するために使用できます。"
" この構造は、コードベースを維持する上でも、理解しやすくする上でも役立ちます。"
-#: ../../tutorials/intro.md:133
+#: ../../tutorials/intro.md:137
msgid "What to consider before you create a package"
msgstr "パッケージを作成する前に考慮すべきこと"
-#: ../../tutorials/intro.md:135
+#: ../../tutorials/intro.md:139
msgid ""
"Creating a Python package that others use takes considerable time and "
"effort. Before you begin, think about your goals including:"
msgstr "他の人が使うPythonパッケージを作るには、かなりの時間と労力がかかります。 始める前に、以下のような目標について考えてください:"
-#: ../../tutorials/intro.md:138
+#: ../../tutorials/intro.md:142
msgid "Who you think will use your package"
msgstr "あなたのパッケージを利用すると思われる人"
-#: ../../tutorials/intro.md:139
+#: ../../tutorials/intro.md:143
msgid "How people might use your package and on what data (if data are relevant)"
msgstr "人々があなたのパッケージをどのように使うか、またどのようなデータについて使うか(データが関連する場合)"
-#: ../../tutorials/intro.md:140
+#: ../../tutorials/intro.md:144
msgid "Whether you have time to add things such as documentation and tests"
msgstr "ドキュメントやテストなどを追加する時間があるかどうか"
-#: ../../tutorials/intro.md:141
+#: ../../tutorials/intro.md:145
msgid ""
"How long you might be able to maintain it: remember that once people "
"begin using your package they will depend on your maintainer team to "
@@ -3145,21 +3173,21 @@ msgstr ""
"メンテナンスできる可能性のある期間: "
"いったん人々があなたのパッケージを使い始めると、彼らはそれを更新し、バグを修正し、質問に答えるために、あなたのメンテナチームに依存することになることを忘れないでください。"
-#: ../../tutorials/intro.md:143
+#: ../../tutorials/intro.md:147
msgid ""
"Before creating a user-facing package, it's important to consider all of "
"the above."
msgstr "ユーザー向けのパッケージを作成する前に、上記のすべてを考慮することが重要です。"
-#: ../../tutorials/intro.md:145
+#: ../../tutorials/intro.md:149
msgid "The elements of a Python package"
msgstr "Pythonパッケージの要素"
-#: ../../tutorials/intro.md:149 ../../tutorials/intro.md:227
+#: ../../tutorials/intro.md:153 ../../tutorials/intro.md:231
msgid "Diagram showing .. more here if this stays."
msgstr "図......これが残ればもっとここに。"
-#: ../../tutorials/intro.md:151
+#: ../../tutorials/intro.md:155
msgid ""
"The elements of a Python package include code, documentation, tests, an "
"OSI-approved license and infrastructure. Maintainers are at the core "
@@ -3169,17 +3197,17 @@ msgstr ""
"Pythonパッケージの要素には、コード、ドキュメント、テスト、OSIが承認したライセンス、インフラが含まれます。 "
"メインテナーは、バグを修正し、ユーザーの懸念に対処しながら、すべてが機能し、最新であることを確認する中核を担っています。"
-#: ../../tutorials/intro.md:157
+#: ../../tutorials/intro.md:161
msgid "The core elements of Python package include:"
msgstr "Pythonパッケージの核となる要素は以下の通りです:"
-#: ../../tutorials/intro.md:159
+#: ../../tutorials/intro.md:163
msgid ""
"**Code:** Functions and classes that provide functionality for a user of "
"your package"
msgstr "**コード:** パッケージのユーザーに機能を提供する関数とクラス"
-#: ../../tutorials/intro.md:160
+#: ../../tutorials/intro.md:164
msgid ""
"**Documentation:** Installation instructions, tutorials, and examples "
"that both help users get started using your package and contributors and "
@@ -3188,13 +3216,13 @@ msgstr ""
"**ドキュメンテーション:** "
"インストール手順、チュートリアル、サンプルは、ユーザがあなたのパッケージを使い始めるのを助け、貢献者やメンテナがバグを修正し、パッケージを保守するのを助けます。"
-#: ../../tutorials/intro.md:161
+#: ../../tutorials/intro.md:165
msgid ""
"Contributor Documentation in the form of a **CONTRIBUTING.md** file is "
"useful to help people to contribute to your package."
msgstr "**CONTRIBUTING.md** ファイル形式の貢献者ドキュメンテーションは、人々があなたのパッケージに貢献するのを助けるのに便利です。"
-#: ../../tutorials/intro.md:162
+#: ../../tutorials/intro.md:166
msgid ""
"Development Documentation helps both maintainers and contributors "
"understand how to maintain a package's infrastructure."
@@ -3202,14 +3230,14 @@ msgstr ""
"Development Documentation "
"は、メンテナと貢献者の両方が、パッケージのインフラストラクチャをどのように保守するかを理解するのに役立ちます。"
-#: ../../tutorials/intro.md:163
+#: ../../tutorials/intro.md:167
msgid ""
"**Tests:** that make sure your code works as it should and makes it "
"easier for you and others to contribute to, modify and update the code in"
" the future"
msgstr "**テスト:** これは、あなたのコードが本来の機能を発揮し、あなたや他の人が貢献しやすくなるようにするものです、 将来的にコードを修正更新します"
-#: ../../tutorials/intro.md:164
+#: ../../tutorials/intro.md:168
#, fuzzy
msgid ""
"**License:** An open source license, or license that is [OSI "
@@ -3220,7 +3248,7 @@ msgstr ""
"**ライセンス:** オープンソースライセンス、あるいは [OSI認可](https://opensource.org/licenses/) "
"ライセンスとは、他の人があなたのパッケージを使うことを許可するライセンスのことです。また、パッケージの要素をどのように再利用できるか、また再利用できないかに関する法的な方向性も示しています。"
-#: ../../tutorials/intro.md:165
+#: ../../tutorials/intro.md:169
msgid ""
"**Infrastructure** that automates updates, publication workflows and runs"
" test suites. Infrastructure includes a suite of things such as platforms"
@@ -3231,11 +3259,11 @@ msgstr ""
"**インフラ** 更新、公開ワークフロー、テストスイートの実行を自動化します。 "
"インフラストラクチャーには、GitHubやGitLabのようなプラットフォーム、noxやtoxのようなローカルでテストやツールを実行するツール、パッケージメンテナンスのステップを自動化する継続的インテグレーションなど、一連のものが含まれます。"
-#: ../../tutorials/intro.md:167
+#: ../../tutorials/intro.md:171
msgid "What pyOpenSci looks for in a package"
msgstr "pyOpenSciがパッケージで探すもの"
-#: ../../tutorials/intro.md:170
+#: ../../tutorials/intro.md:174
msgid ""
"pyOpenSci performs an [initial set of editor "
"checks](https://www.pyopensci.org/software-peer-review/how-to/editor-in-"
@@ -3247,11 +3275,11 @@ msgstr ""
"/software-peer-review/how-to/editor-in-chief-guide.html#editor-checklist-"
"template) を行います。 これらのチェックは、パッケージを作成する際に、パッケージが持つべきものの基準として役に立つかもしれません。"
-#: ../../tutorials/intro.md:176
+#: ../../tutorials/intro.md:180
msgid "Packages are more than just code - Infrastructure"
msgstr "パッケージは単なるコードではありません - インフラストラクチャー"
-#: ../../tutorials/intro.md:178
+#: ../../tutorials/intro.md:182
msgid ""
"A package in any language is more than just code. If you expect other "
"people to use your package, besides yourself, you should consider not "
@@ -3261,11 +3289,11 @@ msgstr ""
"どの言語でも、パッケージは単なるコードではありません。 "
"自分以外の人があなたのパッケージを使うことを期待するのであれば、高品質のコードを書くだけでなく、パッケージが有用なコミュニティリソースとなるための様々な要素も考慮すべきです。"
-#: ../../tutorials/intro.md:183
+#: ../../tutorials/intro.md:187
msgid "Version control and storing your package on GitHub or GitLab"
msgstr "GitHubまたはGitLabでのバージョン管理とパッケージの保存"
-#: ../../tutorials/intro.md:185
+#: ../../tutorials/intro.md:189
msgid ""
"Most Python packages live in an online version control platform such as "
"GitHub or GitLab. GitHub and GitLab both run [git](https://git-scm.com/) "
@@ -3278,7 +3306,7 @@ msgstr ""
"GitHubとGitLabはどちらもバージョン管理のために [git](https://git-scm.com/) を実行しています。 "
"ソフトウェアをバージョン管理下に置くことは、時間の経過に伴う変更を追跡する一方で、コードベースへの変更が予期せず何かを壊してしまった場合に、履歴をさかのぼって変更を取り消すことができるからです。"
-#: ../../tutorials/intro.md:190
+#: ../../tutorials/intro.md:194
msgid ""
"By publishing your package on GitHub or GitLab, you are making your code "
"public facing. This means that others can both see your code and also "
@@ -3288,11 +3316,11 @@ msgstr ""
"あなたのパッケージをGitHubやGitLabで公開することで、あなたはコードを公開することになります。 "
"これは、他の人があなたのコードを見ることができ、プルリクエスト(GitHub)/マージリクエスト(GitLab)/コードレビューワークフローを使って貢献することもできることを意味します。"
-#: ../../tutorials/intro.md:192
+#: ../../tutorials/intro.md:196
msgid "GitHub & GitLab vs. Git"
msgstr "GitHub & GitLab vs. Git"
-#: ../../tutorials/intro.md:195
+#: ../../tutorials/intro.md:199
msgid ""
"GitHub and GitLab are online (cloud) platforms that run `git` (version "
"control software) on the backend. Running git locally on your computer "
@@ -3303,35 +3331,35 @@ msgstr ""
"プラットフォームです。 コンピュータ上でローカルに git を実行すると、GitHub や GitLab にファイルをアップロード (`git "
"push`) したりダウンロード (`git pull`) したりすることができます。"
-#: ../../tutorials/intro.md:200
+#: ../../tutorials/intro.md:204
msgid "Issues or Ticket Trackers"
msgstr "issue かチケットトラッカー"
-#: ../../tutorials/intro.md:202
+#: ../../tutorials/intro.md:206
msgid ""
"GitHub and GitLab also both offer community features such as issues that "
"allow:"
msgstr "GitHubとGitLabは、どちらもissueのようなコミュニティ機能を提供しています:"
-#: ../../tutorials/intro.md:204
+#: ../../tutorials/intro.md:208
msgid "you to communicate with your maintainers and contributor community"
msgstr "メンテナや貢献者コミュニティとのコミュニケーション"
-#: ../../tutorials/intro.md:205
+#: ../../tutorials/intro.md:209
msgid "users to report bugs, ask questions and request new features"
msgstr "ユーザーによるバグ報告、質問、新機能のリクエスト"
-#: ../../tutorials/intro.md:206
+#: ../../tutorials/intro.md:210
msgid ""
"you to publicly keep track of enhancements and features you want to work "
"on for your package."
msgstr "あなたのパッケージのために取り組みたい機能強化や機能を公的に追跡することができます。"
-#: ../../tutorials/intro.md:208
+#: ../../tutorials/intro.md:212
msgid "Continuous integration and continuous deployment"
msgstr "継続的インテグレーションと継続的デプロイメント"
-#: ../../tutorials/intro.md:210
+#: ../../tutorials/intro.md:214
msgid ""
"GitHub and GitLab also provide continuous integration and continuous "
"deployment (CI/CD). Continuous integration (CI) refers to a platform that"
@@ -3343,29 +3371,29 @@ msgstr ""
" とは、特定のイベントが発生したときに特定のジョブを自動的に実行するプラットフォームのことを指し、継続的デプロイメント "
"(CD)とは、実行や構築だけでなく、最終的なアウトプットをどこかに公開することを指すCIの拡張です。"
-#: ../../tutorials/intro.md:212
+#: ../../tutorials/intro.md:216
msgid "**An example of Continuous integration:**"
msgstr "**継続的インテグレーションの例:**"
-#: ../../tutorials/intro.md:214
+#: ../../tutorials/intro.md:218
msgid ""
"When someone submits a change to your code, your tests will run across "
"different operating systems and the code will be checked for format "
"issues."
msgstr "誰かがあなたのコードに変更を加えた場合、あなたのテストは異なるオペレーティングシステム上で実行され、コードはフォーマットの問題がないかチェックされます。"
-#: ../../tutorials/intro.md:216
+#: ../../tutorials/intro.md:220
msgid "**An example of Continuous deployment:**"
msgstr "**継続的デプロイの例:**"
-#: ../../tutorials/intro.md:218
+#: ../../tutorials/intro.md:222
msgid ""
"When you are ready to release your package to PyPI, a continuous "
"deployment operation might be triggered on release to publish your "
"package to PyPI."
msgstr "PyPIにパッケージをリリースする準備ができたら、リリース時に継続的デプロイ操作をトリガーしてパッケージをPyPIに公開することがあります。"
-#: ../../tutorials/intro.md:220
+#: ../../tutorials/intro.md:224
msgid ""
"Integrated CI/CD will help you maintain your software, ensuring that "
"changes to the code don't break things unexpectedly. They can also help "
@@ -3375,15 +3403,15 @@ msgstr ""
"統合されたCI/CDは、コードの変更が予期せぬ事態を引き起こさないよう、ソフトウェアの保守を支援します。 "
"また、コードに新しい変更が加えられるたびに、コードのスタイルや書式の一貫性を維持するのにも役立ちます。"
-#: ../../tutorials/intro.md:229
+#: ../../tutorials/intro.md:233
msgid "The lifecycle of a scientific Python package."
msgstr "科学的Pythonパッケージのライフサイクル。"
-#: ../../tutorials/intro.md:232
+#: ../../tutorials/intro.md:236
msgid "When should you turn your code into a Python package?"
msgstr "あなたのコードをPythonパッケージにするタイミングは?"
-#: ../../tutorials/intro.md:234
+#: ../../tutorials/intro.md:238
msgid ""
"You may be wondering, what types of code should become a Python package "
"that is both on GitHub and published to PyPI and/or conda-forge."
@@ -3391,11 +3419,11 @@ msgstr ""
"どのようなコードをPythonのパッケージにして、GitHubに置き、PyPIやconda-"
"forgeに公開すればいいのか、疑問に思うかもしれません。"
-#: ../../tutorials/intro.md:236
+#: ../../tutorials/intro.md:240
msgid "There are a few use cases to consider:"
msgstr "考慮すべき使用例がいくつかあります:"
-#: ../../tutorials/intro.md:238
+#: ../../tutorials/intro.md:242
msgid ""
"**Creating a basic package for yourself:** Sometimes you want create a "
"package for your own personal use. This might mean making your code "
@@ -3407,7 +3435,7 @@ msgstr ""
"**自分用の基本パッケージを作ります:** 個人的に使用するためにパッケージを作成したいこともあるでしょう。 "
"これは、コードをローカルにpipでインストールできるようにすることを意味するかもしれませんし、GitHubに公開したいと思うかもしれません。その場合、他の人があなたのコードを使うことを期待していないので、パッケージを更新する必要がある場合に、あなた自身と将来の自分のためのドキュメントしか用意できないかもしれません。"
-#: ../../tutorials/intro.md:240
+#: ../../tutorials/intro.md:244
msgid ""
"An example of this type of package might be a set of functions that you "
"write that are useful across several of your projects. It could be useful"
@@ -3416,11 +3444,11 @@ msgstr ""
"この種のパッケージの例としては、いくつかのプロジェクトにまたがって有用な関数のセットを書くことができます。 "
"これらの機能をすべてのプロジェクトで利用できれば便利でしょう。"
-#: ../../tutorials/intro.md:243
+#: ../../tutorials/intro.md:247
msgid "LINK to pip installable lesson when it's published - it's in review now"
msgstr "レッスンが公開されたら、pipでインストールできるようにリンクします - 審査中になります"
-#: ../../tutorials/intro.md:246
+#: ../../tutorials/intro.md:250
msgid ""
"**Creating a package for the community:** In other cases, you may create "
"some code that you soon realize might also be useful to not just you, but"
@@ -3436,7 +3464,7 @@ msgstr ""
"その場合は、パッケージを作成してGitHubで公開し、他のユーザーもそれを使うかもしれないので、CI/CDパイプラインや課題トラッカーなどのGitHubのインフラを利用することも検討できるでしょう。あなたのパッケージを他の人たちにも使ってもらいたいので、LICENSE情報、ユーザーや貢献者のための文書、テストも含めておきたいです。"
" このタイプのパッケージはPyPIに公開されることが多いです。"
-#: ../../tutorials/intro.md:249
+#: ../../tutorials/intro.md:253
msgid ""
"For example, all of the [pyOpenSci packages](https://www.pyopensci.org"
"/python-packages.html) are public facing with an intended audience beyond"
@@ -3445,11 +3473,11 @@ msgstr ""
"例えば、すべての [pyOpenSciパッケージ](https://www.pyopensci.org/python-packages.html)"
" は、メンテナ以外の読者を想定して公開されています。"
-#: ../../tutorials/intro.md:251
+#: ../../tutorials/intro.md:255
msgid "Packages that you expect others to use should be well-scoped"
msgstr "他の人が使用することを想定しているパッケージは、十分なスコープを持つべきです。"
-#: ../../tutorials/intro.md:253
+#: ../../tutorials/intro.md:257
msgid ""
"Ideally the code in your Python package is focused on a specific theme or"
" use case. This theme is important as it's a way to scope the content of "
@@ -3458,7 +3486,7 @@ msgstr ""
"Pythonパッケージのコードは、特定のテーマやユースケースにフォーカスしているのが理想的です。 "
"このテーマは、パッケージの内容に幅を持たせる方法として重要です。"
-#: ../../tutorials/intro.md:255
+#: ../../tutorials/intro.md:259
msgid ""
"It can be tricky to decide when your code becomes something that might be"
" more broadly useful to others. But one question you can ask yourself is "
@@ -3469,11 +3497,11 @@ msgstr ""
"自分のコードが、いつ他の人に広く役立つものになるかを決めるのは、難しいことです。 "
"しかし、自分自身に問いかけることができる質問が一つあります。それは、あなたのコードは特定の研究プロジェクトのために書かれたものですか?あるいは、あなたのドメインにおける複数のプロジェクトにまたがるより広範な応用が可能でしょうか?"
-#: ../../tutorials/intro.md:257
+#: ../../tutorials/intro.md:261
msgid "How does this relate to code for a research project?"
msgstr "研究プロジェクトのコードとの関連は?"
-#: ../../tutorials/intro.md:260
+#: ../../tutorials/intro.md:264
#, fuzzy
msgid ""
"A [Research Compendium](https://book.the-turing-way.org/reproducible-"
@@ -3486,7 +3514,7 @@ msgstr ""
"research/compendia.html) とは、特定の研究プロジェクトをサポートするコード、データ、文書を整理したものです。 "
"研究で使用された方法、データ、分析の包括的な記録を提供することで、研究の再現性と透明性を高めることを目的としています。"
-#: ../../tutorials/intro.md:265
+#: ../../tutorials/intro.md:269
msgid ""
"A Python package is a collection of modules that can be used to perform a"
" specific set of tasks. These tasks should be applicable to numerous "
@@ -3497,7 +3525,7 @@ msgstr ""
"これらのタスクは、数多くのワークフローに適用できるはずです。 そのため、Pythonパッケージは、特定のプロジェクトをサポートするResearch"
" Compendiumよりも汎用性が高いです。"
-#: ../../tutorials/intro.md:270
+#: ../../tutorials/intro.md:274
msgid ""
"[Read about `Good enough practices in scientific "
"computing`](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510)"
@@ -3505,7 +3533,7 @@ msgstr ""
"[`科学的コンピューティングにおける十分なプラクティス` "
"について読む](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510)"
-#: ../../tutorials/intro.md:271
+#: ../../tutorials/intro.md:275
msgid ""
"[Learn more about research compendia (also called repo-packs) in this "
"blog post.](https://lorenabarba.com/blog/how-repro-packs-can-save-your-"
@@ -3515,11 +3543,11 @@ msgstr ""
"については、こちらのブログ記事で詳しくご紹介しています。](https://lorenabarba.com/blog/how-repro-"
"packs-can-save-your-future-self/)"
-#: ../../tutorials/intro.md:274
+#: ../../tutorials/intro.md:278
msgid "Below are a few examples well scoped pyOpenSci packages:"
msgstr "以下はよくスコープされたpyOpenSciパッケージの例です:"
-#: ../../tutorials/intro.md:276
+#: ../../tutorials/intro.md:280
msgid ""
"[Crowsetta](https://crowsetta.readthedocs.io/en/latest/): is a package "
"designed to work with annotating animal vocalizations and bioacoustics "
@@ -3530,7 +3558,7 @@ msgstr ""
"[Crowsetta](https://crowsetta.readthedocs.io/en/latest/): "
"は、動物の発声や生物音響データの注釈付けを行うために設計されたパッケージです。このパッケージは、ユーザー固有の研究ワークフローに関連する特定の個々の研究アプリケーションに焦点を当てるのではなく、科学者がさまざまなタイプの生体音響データを処理するのを支援します。"
-#: ../../tutorials/intro.md:277
+#: ../../tutorials/intro.md:281
msgid ""
"[Pandera](https://www.union.ai/pandera) is another more broadly used "
"Python package. Pandera supports data testing and thus also has a broader"
@@ -3539,21 +3567,21 @@ msgstr ""
"[Pandera](https://www.union.ai/pandera) もまた、より広く使われているPythonパッケージです。 "
"Panderaはデータの検査をサポートしているため、広範な研究用途にも使用できます。"
-#: ../../tutorials/intro.md:279
+#: ../../tutorials/intro.md:283
msgid "Matplotlib as an example"
msgstr "例としてのMatplotlib"
-#: ../../tutorials/intro.md:281
+#: ../../tutorials/intro.md:285
msgid ""
"At the larger end of the user spectrum, Matplotlib is a great example. "
"Matplotlib does one thing really well:"
msgstr "大規模なユーザーでは、Matplotlibが良い例です。 Matplotlibは一つのことをとてもよくやってくれます:"
-#: ../../tutorials/intro.md:284
+#: ../../tutorials/intro.md:288
msgid "_It creates visual plots of data._"
msgstr "_データの視覚的なプロットを作成します。_"
-#: ../../tutorials/intro.md:286
+#: ../../tutorials/intro.md:290
msgid ""
"Thousands of people use Matplotlib for different plotting applications "
"using different types of data. While few scientific packages will have "
@@ -3563,17 +3591,17 @@ msgstr ""
"Matplotlibは、何千人もの人々が、様々な種類のデータを使った様々なプロットアプリケーションに利用しています。 "
"Matplotlibのような広範なアプリケーションと大規模なユーザーベースを持つ科学パッケージはほとんどないでしょうが、自分のパッケージが何をするのかを調べるという考え方は依然として重要です。"
-#: ../../tutorials/intro.md:292
+#: ../../tutorials/intro.md:296
msgid "Code should also be clean & readable & documented"
msgstr "コードはまた、クリーンで読みやすく、文書化されていなければなりません。"
-#: ../../tutorials/intro.md:294
+#: ../../tutorials/intro.md:298
msgid ""
"The code in your package should also be clean, readable, and well "
"documented."
msgstr "パッケージ内のコードもまた、クリーンで読みやすく、十分に文書化されていなければなりません。"
-#: ../../tutorials/intro.md:296
+#: ../../tutorials/intro.md:300
msgid ""
"**Clean code:** Clean code refers to code that uses expressive variable "
"names, is concise and doesn't repeat itself. You can learn about best "
@@ -3582,7 +3610,7 @@ msgstr ""
"**クリーンコード:** "
"クリーンなコードとは、表現力豊かな変数名を使い、簡潔で、繰り返しのないコードを指す。きれいなコードのためのベストプラクティスについては、今後のpyOpenSciチュートリアルで学ぶことができます。"
-#: ../../tutorials/intro.md:300
+#: ../../tutorials/intro.md:304
msgid ""
"**Readable code:** readable code is code written with a consistent style."
" You can use linters and code formatters such as black and flake8 to "
@@ -3595,7 +3623,7 @@ msgstr ""
" [コードフォーマッタの詳細はこちらです。](../package-structure-code/code-style-linting-"
"format)"
-#: ../../tutorials/intro.md:304
+#: ../../tutorials/intro.md:308
msgid ""
"**Documented code:** documented code is written using docstrings that "
"help a user understand both what the functions and methods in your code "
@@ -3608,15 +3636,15 @@ msgstr ""
" [docstringsについては、こちらのガイドで詳しく説明しています。](../documentation/write-user-"
"documentation/document-your-code-api-docstrings)"
-#: ../../tutorials/intro.md:308
+#: ../../tutorials/intro.md:312
msgid "Making your package installable - publishing to PyPI & conda-forge"
msgstr "パッケージをインストール可能にします - PyPIとconda-forgeに公開します"
-#: ../../tutorials/intro.md:310
+#: ../../tutorials/intro.md:314
msgid "Python packages and environments"
msgstr "Pythonのパッケージと環境"
-#: ../../tutorials/intro.md:312
+#: ../../tutorials/intro.md:316
msgid ""
"You can install a Python package into a Python environment in the same "
"way you might install NumPy or Pandas. Installing your package into an "
@@ -3626,7 +3654,7 @@ msgstr ""
"NumPyやPandasをインストールするのと同じように、PythonパッケージをPython環境にインストールすることができます。 "
"パッケージを環境にインストールすることで、特定のPython環境を有効にして実行したコードからそのパッケージにアクセスできるようになります。"
-#: ../../tutorials/intro.md:318
+#: ../../tutorials/intro.md:322
msgid ""
"Diagram showing the steps associated with creating a package and then "
"installing it. The first arrow says your package and the second says pip "
@@ -3639,7 +3667,7 @@ msgstr ""
"packageと書かれています。2つ目の矢印は、PandasやNumPyなどのいくつかのパッケージがすでにインストールされているPython環境を表すボックスにつながります。あなたのパッケージも、pip"
" installしたときに同じ環境にインストールされます。"
-#: ../../tutorials/intro.md:320
+#: ../../tutorials/intro.md:324
msgid ""
"You don't have to publish to PyPI to make your code installable. With the"
" correct file structure and project metadata you can make your code "
@@ -3652,11 +3680,11 @@ msgstr ""
"正しいファイル構造とプロジェクトのメタデータがあれば、PyPIに公開することなく、コードをローカルにインストールし、作業中のプロジェクトに使用することができます。"
" PyPIへの公開は、自分のコードを公開し、他の人と共有したいときに便利です。"
-#: ../../tutorials/intro.md:327
+#: ../../tutorials/intro.md:331
msgid "Publishing a package to PyPI / Conda-Forge"
msgstr "PyPI / Conda-Forgeへのパッケージの公開"
-#: ../../tutorials/intro.md:329
+#: ../../tutorials/intro.md:333
msgid ""
"If you want to make your package directly installable without having to "
"download the code to your computer locally then you need to publish it in"
@@ -3665,13 +3693,13 @@ msgstr ""
"コードをローカルにダウンロードすることなく、パッケージを直接インストールできるようにしたい場合は、 **PyPI** や **conda-"
"forge** のようなリポジトリで公開する必要があります。"
-#: ../../tutorials/intro.md:333
+#: ../../tutorials/intro.md:337
msgid ""
"Learn [how to publish your package to PyPI in this tutorial.](publish-"
"pypi.md)"
msgstr "[このチュートリアルでは、パッケージをPyPIに公開する方法](publish-pypi.md) を学びます。"
-#: ../../tutorials/intro.md:335
+#: ../../tutorials/intro.md:339
msgid ""
"Then you can create a conda-forge recipe using the "
"[Grayskull](https://github.com/conda/grayskull) tool. You can then submit"
@@ -3680,13 +3708,13 @@ msgstr ""
"その後、 [Grayskull](https://github.com/conda/grayskull) ツールを使ってconda-"
"forgeレシピを作成することができます。 このレシピをconda-forgeに投稿することができます。"
-#: ../../tutorials/intro.md:337
+#: ../../tutorials/intro.md:341
msgid ""
"[You will learn more about the conda-forge publication process here"
".](publish-conda-forge.md)"
msgstr "[conda-forgeの公開プロセスについてはこちらをご覧ください。](publish-conda-forge.md)"
-#: ../../tutorials/intro.md:340
+#: ../../tutorials/intro.md:344
msgid ""
"Graphic showing the high level packaging workflow. On the left you see a "
"graphic with code, metadata and tests in it. Those items all go into your"
@@ -3700,7 +3728,7 @@ msgstr ""
"ハイレベルなパッケージングのワークフローを示すグラフィックです。左側には、コード、メタデータ、テストが入ったグラフィックがあります。ドキュメンテーションやデータは、通常、パッケージホイールの配布物には掲載されないため、そのボックスの下にあります。右の矢印は、ビルド配布ファイルのボックスに移動します。このボックスは、TestPyPIか本物のPyPIのどちらかに公開するように導きます"
"。PyPIからconda-forgeに接続し、ディストリビューションをPyPIからconda-forgeに送る自動ビルドを行うことができます。"
-#: ../../tutorials/intro.md:342
+#: ../../tutorials/intro.md:346
msgid ""
"In the image above, you can see the steps associated with publishing your"
" package on PyPI and conda-forge. PyPI supports [sdist](#python-source-"
@@ -3718,11 +3746,11 @@ msgstr ""
"forgeレシピリポジトリでprを開きます。このプロセスについては、 [conda-forgeのレッスン](/tutorials/publish-"
"conda-forge) で詳しく学びます。"
-#: ../../tutorials/intro.md:346
+#: ../../tutorials/intro.md:350
msgid "Yay, your package has users! Now what?"
msgstr "やった、あなたのパッケージにはユーザーがいます! さて、どうしますか?"
-#: ../../tutorials/intro.md:348
+#: ../../tutorials/intro.md:352
msgid ""
"As the community using your package grows, you may also find yourself "
"managing users, contributors, and others who want to interact with your "
@@ -3734,11 +3762,11 @@ msgstr ""
"あなたのパッケージを使うコミュニティが大きくなるにつれて、あなたはユーザーや貢献者、その他あなたのパッケージと交流したい人たちを管理することになるかもしれません。開発に飛び込む前に、これらすべてを考慮することが重要です。"
" コミュニティーの中にユーザーベースができれば、人々はあなたのコードに依存するようになり、その使い方の指示を必要とするようになります。"
-#: ../../tutorials/intro.md:350
+#: ../../tutorials/intro.md:354
msgid "To support your community, you'll want to add things like:"
msgstr "コミュニティをサポートするために、以下のようなものを追加したいです:"
-#: ../../tutorials/intro.md:352
+#: ../../tutorials/intro.md:356
msgid ""
"[a development guide that documents your maintainer workflow process "
"](/documentation/repository-files/development-guide.md)"
@@ -3746,7 +3774,7 @@ msgstr ""
"[メンテナーのワークフロープロセスを文書化した開発ガイド](/documentation/repository-files"
"/development-guide.md)"
-#: ../../tutorials/intro.md:353
+#: ../../tutorials/intro.md:357
msgid ""
"[a code of conduct to defines community interaction standards and "
"expectations](/documentation/repository-files/code-of-conduct-file.md)"
@@ -3754,7 +3782,7 @@ msgstr ""
"[コミュニティとの交流の基準と期待を定める行動規範](/documentation/repository-files/code-of-"
"conduct-file.md)"
-#: ../../tutorials/intro.md:354
+#: ../../tutorials/intro.md:358
msgid ""
"[a contributing guide that helps users understand expectations associated"
" with making contributions to your project](/documentation/repository-"
@@ -3763,11 +3791,11 @@ msgstr ""
"[プロジェクトに貢献する際にユーザーが期待されることを理解するのに役立つ貢献ガイド](/documentation/repository-"
"files/contributing-file.md)"
-#: ../../tutorials/intro.md:356
+#: ../../tutorials/intro.md:360
msgid "Support for contributors and maintainers"
msgstr "コントリビューターとメンテナーのサポート"
-#: ../../tutorials/intro.md:358
+#: ../../tutorials/intro.md:362
msgid ""
"If you intend for others to use and contribute to your code, consider who"
" will maintain it over time. You will want a **contributing and "
@@ -3780,7 +3808,7 @@ msgstr ""
" **貢献と開発** ガイドと、コミュニティの交流があなたにとっても貢献者やメンテナチームにとっても健全であり続けるようにするための "
"**行動規範** が欲しいでしょう。"
-#: ../../tutorials/intro.md:360
+#: ../../tutorials/intro.md:364
msgid ""
"The elements above are also important for future maintenance of your "
"package. In the case that you are no long able to maintain it or simply "
@@ -3790,11 +3818,11 @@ msgstr ""
"上記の要素は、今後のパッケージのメンテナンスにおいても重要です。 "
"メンテナンスができなくなった場合、あるいは単に追加的な助けが欲しい場合、開発、そしてドキュメントの貢献は、新しいメンテナへの参加を支援します。"
-#: ../../tutorials/intro.md:365
+#: ../../tutorials/intro.md:369
msgid "What's next?"
msgstr "次のレッスン"
-#: ../../tutorials/intro.md:367
+#: ../../tutorials/intro.md:371
msgid ""
"In future lessons you will learn more about the infrastructure around a "
"published Python package that makes it both easier to maintain, easier "
@@ -3803,7 +3831,7 @@ msgid ""
"Python package."
msgstr "今後のレッスンでは、公開された、メンテナンスが容易になり、他の人が貢献しやすくなり、他の科学者が使いやすくなるPythonパッケージのインフラについて学びます。しかし、まずはPythonパッケージを公開するという最初のゴールに到達してもらいたいと思います。"
-#: ../../tutorials/intro.md:369
+#: ../../tutorials/intro.md:373
msgid ""
"In this next lesson you will learn how to create a basic installable "
"Python package. Make your code pip installable "
@@ -3837,21 +3865,22 @@ msgid "How to add a `README` and `LICENSE` file to your package"
msgstr "パッケージに `README` と `LICENSE` ファイルを追加する方法"
#: ../../tutorials/publish-conda-forge.md:13
+#, fuzzy
msgid ""
-"How to setup your `pyproject.toml` file with all of the metadata that "
-"PyPI requires and also metadata that will be helpful for users to find "
-"your package."
+"How to setup your [pyproject.toml](pyproject-toml) file with all of the "
+"metadata that PyPI requires and also metadata that will be helpful for "
+"users to find your package."
msgstr ""
"どのように `pyproject.toml` ファイルに PyPI "
"が要求するすべてのメタデータと、ユーザがあなたのパッケージを見つけるのに役立つメタデータをセットアップするかです。"
-#: ../../tutorials/publish-conda-forge.md:15
+#: ../../tutorials/publish-conda-forge.md:17
msgid ""
"If you have gone through all of the above lessons, you are now ready to "
"publish your package on conda-forge."
msgstr "上記のレッスンをすべて終えたなら、conda-forgeでパッケージを公開する準備が整いました。"
-#: ../../tutorials/publish-conda-forge.md:18
+#: ../../tutorials/publish-conda-forge.md:20
msgid ""
"**IMPORTANT:** Please do not practice publishing your package to conda-"
"forge. You should only publish to conda-forge when you have a package on "
@@ -3860,38 +3889,39 @@ msgstr ""
"**重要:** パッケージをconda-forgeに公開する練習はしないでください。 conda-"
"forgeに公開するのは、pypi.orgにメンテナンスする予定のパッケージがあるときだけにしてください。"
-#: ../../tutorials/publish-conda-forge.md:24 ../../tutorials/publish-pypi.md:24
+#: ../../tutorials/publish-conda-forge.md:26 ../../tutorials/publish-pypi.md:24
msgid "In this lesson you will learn how to:"
msgstr "このレッスンで学ぶこと:"
-#: ../../tutorials/publish-conda-forge.md:26
+#: ../../tutorials/publish-conda-forge.md:28
msgid "Create a conda-forge yaml recipe for your package using Grayskull"
msgstr "Grayskullを使用してパッケージのconda-forge yamlレシピを作成します。"
-#: ../../tutorials/publish-conda-forge.md:27
+#: ../../tutorials/publish-conda-forge.md:29
msgid ""
"Submit the recipe (yaml file) to the conda-forge staged recipes "
"repository as a pull request"
msgstr "レシピ(yamlファイル)をconda-forge staged recipesリポジトリにプルリクエストとして提出します。"
-#: ../../tutorials/publish-conda-forge.md:28
+#: ../../tutorials/publish-conda-forge.md:30
msgid ""
"Maintain your conda-forge package by creating new releases for your "
"package on PyPI"
msgstr "PyPIでパッケージの新しいリリースを作成することで、conda-forgeパッケージを維持します。"
-#: ../../tutorials/publish-conda-forge.md:31
+#: ../../tutorials/publish-conda-forge.md:33
+#, fuzzy, python-brace-format
msgid ""
"Once your package is on PyPI you can then easily publish it to conda-"
"forge using the [grayskull](https://conda.github.io/grayskull/) tool. You"
" do not need to build the package specifically for conda, conda-forge "
-"will build from your PyPI source distribution file (sdist)."
+"will build from your PyPI {term}`Source distribution (sdist)` file."
msgstr ""
"パッケージがPyPIに登録されたら、 [grayskull](https://conda.github.io/grayskull/) "
"ツールを使って簡単にconda-forgeに公開することができます。conda専用のパッケージをビルドする必要はない、conda-"
"forgeはPyPIのソース配布ファイル (sdist) からビルドします。"
-#: ../../tutorials/publish-conda-forge.md:38
+#: ../../tutorials/publish-conda-forge.md:41
msgid ""
"Image showing the progression of creating a Python package, building it "
"and then publishing to PyPI and conda-forge. You take your code and turn "
@@ -3904,23 +3934,24 @@ msgstr ""
"forgeへの公開の流れを示す画像です。あなたのコードをPyPIが受け付ける配布ファイル(sdistとwheel)に変換します。そして、両方のディストリビューションを公開しているPyPIリポジトリへの矢印があります"
"。PyPIからconda-forgeのレシピを作成し、conda-forgeに公開することができます。"
-#: ../../tutorials/publish-conda-forge.md:40
+#: ../../tutorials/publish-conda-forge.md:43
+#, fuzzy, python-brace-format
msgid ""
-"Once you have published both package distributions (the source "
-"distribution and the wheel) to PyPI, you can then publish to conda-forge."
-" Conda-forge requires a source distribution on PyPI in order to build "
-"your package on conda-forge. You do not need to rebuild your package to "
-"publish to conda-forge."
+"Once you have published both package distributions (the {term}`Source "
+"distribution (sdist)` and the {term}`Wheel (.whl)`) to PyPI, you can then"
+" publish to conda-forge. Conda-forge requires a source distribution on "
+"PyPI in order to build your package on conda-forge. You do not need to "
+"rebuild your package to publish to conda-forge."
msgstr ""
"両方のパッケージ配布(ソース配布とホイール)をPyPIに公開したら、次にconda-forgeに公開します。conda-"
"forgeでパッケージをビルドするには、PyPIでのソース配布が必要です。conda-"
"forgeに公開するためにパッケージをリビルドする必要はありません。"
-#: ../../tutorials/publish-conda-forge.md:43
+#: ../../tutorials/publish-conda-forge.md:50
msgid "What is conda-forge?"
msgstr "conda-forgeとは何ですか?"
-#: ../../tutorials/publish-conda-forge.md:45
+#: ../../tutorials/publish-conda-forge.md:52
msgid ""
"conda is an open source package and environment management tool that can "
"be used to install tools from the different channels on Anaconda.org."
@@ -3928,7 +3959,7 @@ msgstr ""
"conda はオープンソースのパッケージと環境管理ツールで、Anaconda.org "
"のさまざまなチャンネルからツールをインストールするために使用できます。"
-#: ../../tutorials/publish-conda-forge.md:48
+#: ../../tutorials/publish-conda-forge.md:55
msgid ""
"You can think about a channel as a specific location where a group of "
"packages are stored and can be installed from using a command such as "
@@ -3949,11 +3980,11 @@ msgstr ""
"recipesのGitHubリポジトリ](https://github.com/conda-forge/staged-recipes) "
"での技術レビューに合格しなければなりません。"
-#: ../../tutorials/publish-conda-forge.md:51
+#: ../../tutorials/publish-conda-forge.md:58
msgid "[Learn more about conda channels here.](#about-conda)"
msgstr "[condaチャンネルについて詳しくはこちら。](#about-conda)"
-#: ../../tutorials/publish-conda-forge.md:55
+#: ../../tutorials/publish-conda-forge.md:62
msgid ""
"Graphic with the title Python package repositories. Below it says "
"anything hosted on PyPI can be installed using pip install. Packaging "
@@ -3971,7 +4002,7 @@ msgstr ""
"チームによって管理されているものです。 その下にPyPIサーバーという行があります。 PyPI - 誰でもPyPIに公開することができます、と "
"test PyPI (PyPIをテストするためのテストベッドサーバ)。"
-#: ../../tutorials/publish-conda-forge.md:57
+#: ../../tutorials/publish-conda-forge.md:64
msgid ""
"Conda channels represent various repositories that you can install "
"packages from. Because conda-forge is community maintained, anyone can "
@@ -3984,11 +4015,11 @@ msgstr ""
"誰でもPyPIにパッケージを投稿し、PyPIをテストすることができます。 conda-forge とは異なり、PyPI "
"に投稿されたパッケージを手動でチェックすることはありません。"
-#: ../../tutorials/publish-conda-forge.md:60
+#: ../../tutorials/publish-conda-forge.md:67
msgid "Why publish to conda-forge"
msgstr "conda-forgeに公開する理由"
-#: ../../tutorials/publish-conda-forge.md:62
+#: ../../tutorials/publish-conda-forge.md:69
msgid ""
"There are many users, especially in the scientific Python ecosystem that "
"use conda as their primary package manager / environment tool. Thus, "
@@ -4001,11 +4032,11 @@ msgstr ""
"したがって、conda-forgeチャンネルでこれらのユーザーがパッケージを利用できるようにすることは有用です。 場合によっては、conda-"
"forge上のパッケージは、pipとcondaを混ぜてインストールする際に起こりうる依存関係の衝突を最小限に抑えることができます。これは空間生態系にとって特に重要です。"
-#: ../../tutorials/publish-conda-forge.md:64
+#: ../../tutorials/publish-conda-forge.md:71
msgid "How publishing to conda-forge works"
msgstr "conda-forgeへの公開の仕組み"
-#: ../../tutorials/publish-conda-forge.md:66
+#: ../../tutorials/publish-conda-forge.md:73
msgid ""
"Once you have built and published your package to PyPI, you have "
"everything that you need to publish to conda-forge. There is no "
@@ -4014,7 +4045,7 @@ msgstr ""
"パッケージをビルドしてPyPIに公開したら、conda-forgeに公開するために必要なものはすべて揃っています。 conda-"
"forgeに公開するための追加のビルドステップは必要ありません。"
-#: ../../tutorials/publish-conda-forge.md:68
+#: ../../tutorials/publish-conda-forge.md:75
msgid ""
"Conda-forge will build your package from the source distribution which "
"you [published to PyPI in the previous lesson](publish-pypi) using the "
@@ -4023,17 +4054,17 @@ msgstr ""
"Conda-forgeは、 [前のレッスンでPyPIに公開した](publish-pypi) "
"ソースディストリビューションから、以下で作成するレシピを使ってパッケージをビルドします。"
-#: ../../tutorials/publish-conda-forge.md:70
+#: ../../tutorials/publish-conda-forge.md:77
msgid "Conda-forge publication steps"
msgstr "Conda-forgeの公開手順"
-#: ../../tutorials/publish-conda-forge.md:73
+#: ../../tutorials/publish-conda-forge.md:80
msgid ""
"Image showing the steps associated with publishing to conda-forge. Check "
"out the caption below for a detailed description."
msgstr "conda-forgeへの公開に関連する手順を示す画像です。 詳しい説明は以下のキャプションをご覧ください。"
-#: ../../tutorials/publish-conda-forge.md:75
+#: ../../tutorials/publish-conda-forge.md:82
msgid ""
"The steps for publishing to conda-forge begin with publishing your Python"
" package to PyPI. Once you have published to PyPI you can then create a "
@@ -4046,15 +4077,15 @@ msgstr ""
"recipesリポジトリに投稿してレビューを受けることができます。 レシピが承認されると、あなたのパッケージはconda-"
"forge上のリポジトリ(フィードストックと呼ばれます)に登録されます。"
-#: ../../tutorials/publish-conda-forge.md:78
+#: ../../tutorials/publish-conda-forge.md:85
msgid "The steps to publish to conda-forge are:"
msgstr "conda-forgeに公開する手順は以下の通りです:"
-#: ../../tutorials/publish-conda-forge.md:80
+#: ../../tutorials/publish-conda-forge.md:87
msgid "Publish your Python package distribution files (sdist & wheel) to PyPI"
msgstr "Pythonパッケージの配布ファイル (sdistとwheel) をPyPIに公開する"
-#: ../../tutorials/publish-conda-forge.md:81
+#: ../../tutorials/publish-conda-forge.md:88
msgid ""
"Create a conda-forge recipe, which is a yaml file with instructions on "
"how to build your package on conda-forge, using the grayskull[^grayskull]"
@@ -4063,7 +4094,7 @@ msgstr ""
"これは、 grayskull[^grayskull] パッケージを使用して、conda-"
"forge上でパッケージをビルドする方法を説明したyamlファイルです。"
-#: ../../tutorials/publish-conda-forge.md:82
+#: ../../tutorials/publish-conda-forge.md:89
msgid ""
"Submit the recipe (yaml file) to the conda-forge staged recipes "
"repository as a pull request for review. [Click here for an example "
@@ -4075,7 +4106,7 @@ msgstr ""
"[pyOpenSciからの投稿例はこちらをクリックしてください](https://github.com/conda-forge/staged-"
"recipes/pull/25173)"
-#: ../../tutorials/publish-conda-forge.md:84
+#: ../../tutorials/publish-conda-forge.md:91
msgid ""
"Once someone from the conda-forge team reviews your pull request, you may"
" need to make some changes. Eventually the pull request will be approved "
@@ -4084,27 +4115,27 @@ msgstr ""
"conda-"
"forgeチームの誰かがあなたのプルリクエストをレビューしたら、いくつかの変更が必要になるかもしれません。最終的にプルリクエストは承認され、マージされます。"
-#: ../../tutorials/publish-conda-forge.md:86
+#: ../../tutorials/publish-conda-forge.md:93
msgid ""
"Once your recipe is accepted and merged on conda-forge, users can install"
" your package using:"
msgstr "あなたのレシピがconda-forgeで承認され、マージされると、ユーザーはあなたのパッケージをインストールできます:"
-#: ../../tutorials/publish-conda-forge.md:88
+#: ../../tutorials/publish-conda-forge.md:95
msgid "`conda install -c conda-forge your-package`"
msgstr "`conda install -c conda-forge your-package`"
-#: ../../tutorials/publish-conda-forge.md:90
+#: ../../tutorials/publish-conda-forge.md:97
msgid ""
"You only create the recipe once. Once the recipe is accepted and merged, "
"you only need to maintain the repository."
msgstr "レシピを作成するのは一度だけです。 レシピが受け入れられマージされたら、リポジトリを管理するだけです。"
-#: ../../tutorials/publish-conda-forge.md:92
+#: ../../tutorials/publish-conda-forge.md:99
msgid "Maintaining a conda-forge package"
msgstr "conda-forge パッケージのメンテナンス"
-#: ../../tutorials/publish-conda-forge.md:94
+#: ../../tutorials/publish-conda-forge.md:101
msgid ""
"Once your package is on conda-forge, the repository will track release "
"activity on the package's PyPI repository. Any time you make a new PyPI "
@@ -4115,25 +4146,25 @@ msgstr ""
"新しいソースディストリビューションで新しい PyPI リリースを作成すると、conda-forge はあなたの conda-forge "
"リポジトリ(フィードストックとも呼ばれます)をビルドして更新します。"
-#: ../../tutorials/publish-conda-forge.md:96
+#: ../../tutorials/publish-conda-forge.md:103
msgid ""
"When the update is processed, the friendly conda-forge bot will create a "
"new pull request with an updated distribution recipe in your feedstock."
msgstr "アップデートが処理されると、フレンドリーなconda-forgeボットがフィードストックの配布レシピを更新した新しいプルリクエストを作成します。"
-#: ../../tutorials/publish-conda-forge.md:98
+#: ../../tutorials/publish-conda-forge.md:105
msgid ""
"You can review that pull request and then merge it once all of the "
"continuous integration tests pass."
msgstr "そのプルリクエストをレビューし、継続的インテグレーションのテストがすべてパスしたら、それをマージすることができます。"
-#: ../../tutorials/publish-conda-forge.md:100
+#: ../../tutorials/publish-conda-forge.md:107
msgid ""
" How to Publish your package"
" on conda-forge"
msgstr " conda-forgeでパッケージを公開する方法"
-#: ../../tutorials/publish-conda-forge.md:102
+#: ../../tutorials/publish-conda-forge.md:109
msgid ""
"It's time to add your package to the conda-forge channel. Remember that "
"your package needs to be on PyPI before the steps below will work. And "
@@ -4143,19 +4174,19 @@ msgstr ""
"以下の手順が動作する前に、あなたのパッケージがPyPI上にある必要があることを覚えておいてください。また、conda-"
"forgeを管理しているチームはすべてボランティアであることを忘れないでください。"
-#: ../../tutorials/publish-conda-forge.md:105
+#: ../../tutorials/publish-conda-forge.md:112
msgid ""
"Be sure that your package is on PyPI.org (not test.pypi.org) before you "
"attempt to publish to conda-forge."
msgstr "conda-forgeに公開する前に、あなたのパッケージが(test.pypi.orgではなく)PyPI.orgにあることを確認してください。"
-#: ../../tutorials/publish-conda-forge.md:108
+#: ../../tutorials/publish-conda-forge.md:115
msgid ""
"Only submit your package to conda-forge if you intend to maintain it over"
" time."
msgstr "パッケージをconda-forgeに投稿するのは、長期的にメンテナンスするつもりである場合だけにしてください。"
-#: ../../tutorials/publish-conda-forge.md:111
+#: ../../tutorials/publish-conda-forge.md:118
msgid ""
"Note - this is a tutorial aimed to help you get your package onto conda-"
"forge. The official conda documentation for this processed [is "
@@ -4165,11 +4196,11 @@ msgstr ""
"forgeに載せる手助けをすることを目的としています。この処理に関するcondaの公式ドキュメントは [こちら](https://conda-"
"forge.org/docs/maintainer/adding_pkgs.html) 。"
-#: ../../tutorials/publish-conda-forge.md:113
+#: ../../tutorials/publish-conda-forge.md:120
msgid "Step 1: Install grayskull"
msgstr "ステップ1: grayskullをインストールする"
-#: ../../tutorials/publish-conda-forge.md:115
+#: ../../tutorials/publish-conda-forge.md:122
msgid ""
"First, [install "
"grayskull](https://conda.github.io/grayskull/user_guide.html). You can "
@@ -4179,17 +4210,17 @@ msgstr ""
"[grayskullをインストールします](https://conda.github.io/grayskull/user_guide.html) "
"。 pip を使用してインストールできます:"
-#: ../../tutorials/publish-conda-forge.md:121
+#: ../../tutorials/publish-conda-forge.md:128
msgid "or conda"
msgstr "それともconda"
-#: ../../tutorials/publish-conda-forge.md:127
+#: ../../tutorials/publish-conda-forge.md:134
msgid ""
"To run this command, use the same shell / terminal that you have been "
"using to run hatch commands in the previous tutorials."
msgstr "このコマンドを実行するには、前のチュートリアルでhatchコマンドを実行するのに使ったのと同じシェル/ターミナルを使います。"
-#: ../../tutorials/publish-conda-forge.md:132
+#: ../../tutorials/publish-conda-forge.md:139
msgid ""
"You can also install grayskull using pipx[^pipx]. pipx is a tool that "
"allows you to install commonly used tools that you might want to have "
@@ -4199,17 +4230,17 @@ msgstr ""
"pipx[^pipx] を使用してgrayskullをインストールすることもできます。 "
"pipxは、作成したPython環境すべてにパッケージをインストールするのではなく、複数のPython環境で利用できるようにしたい、よく使われるツールをインストールできるツールです。"
-#: ../../tutorials/publish-conda-forge.md:135
+#: ../../tutorials/publish-conda-forge.md:142
msgid "Step 2: Fork and clone the conda-forge staged-recipes repository"
msgstr "ステップ 2: conda-forge staged-recipes リポジトリをフォークしてクローンします。"
-#: ../../tutorials/publish-conda-forge.md:137
+#: ../../tutorials/publish-conda-forge.md:144
msgid ""
"Next, open your shell and `cd` to a location where you want to clone the "
"**conda-forge/staged-recipes** repository."
msgstr "次に、シェルを開き、 **conda-forge/staged-recipes** リポジトリをクローンしたい場所に `cd` します。"
-#: ../../tutorials/publish-conda-forge.md:138
+#: ../../tutorials/publish-conda-forge.md:145
msgid ""
"fork and clone the [conda-forge/staged-recipes GitHub "
"repository](https://github.com/conda-forge/staged-recipes)."
@@ -4217,21 +4248,21 @@ msgstr ""
"[conda-forge/staged-recipes GitHubリポジトリ](https://github.com/conda-forge"
"/staged-recipes) をフォークしてクローンしてください。"
-#: ../../tutorials/publish-conda-forge.md:139
+#: ../../tutorials/publish-conda-forge.md:146
msgid ""
"Create a new branch in your fork rather than submitting from the main "
"branch of your fork. We suggest naming the branch your package's name."
msgstr "フォークのメインブランチから投稿するのではなく、フォークに新しいブランチを作成してください。ブランチにパッケージ名をつけることをお勧めします。"
-#: ../../tutorials/publish-conda-forge.md:141
+#: ../../tutorials/publish-conda-forge.md:148
msgid "`git checkout -b your-package-name `"
msgstr "`git checkout -b your-package-name `"
-#: ../../tutorials/publish-conda-forge.md:143
+#: ../../tutorials/publish-conda-forge.md:150
msgid "In bash, `cd` into the `staged-recipes/recipes` folder"
msgstr "bashで `cd` を `staged-recipes/recipes` フォルダに入れる。"
-#: ../../tutorials/publish-conda-forge.md:151
+#: ../../tutorials/publish-conda-forge.md:158
msgid ""
"Next, create a new branch in your `conda-forge/staged-recipes` cloned "
"repository. You might want to make that branch the same name as your "
@@ -4240,69 +4271,69 @@ msgstr ""
"次に、クローンした `conda-forge/staged-recipes` リポジトリに新しいブランチを作成します。 "
"そのブランチを、あなたのパッケージと同じ名前にしたいかもしれません。"
-#: ../../tutorials/publish-conda-forge.md:162
+#: ../../tutorials/publish-conda-forge.md:169
msgid "Step 3: Create your conda-forge recipe"
msgstr "ステップ3: conda-forgeレシピの作成"
-#: ../../tutorials/publish-conda-forge.md:164
+#: ../../tutorials/publish-conda-forge.md:171
msgid "Next, navigate to the recipes directory"
msgstr "次に、レシピディレクトリに移動します。"
-#: ../../tutorials/publish-conda-forge.md:166
+#: ../../tutorials/publish-conda-forge.md:173
msgid ""
"If you run `ls` here, you will notice there is an example directory with "
"an example recipe for you to look at."
msgstr "ここで `ls` を実行すると、レシピ例のあるexampleディレクトリがあることに気づくでしょう。"
-#: ../../tutorials/publish-conda-forge.md:178
+#: ../../tutorials/publish-conda-forge.md:185
msgid "Next, run `grayskull pypi your-package-name` to generate a recipe."
msgstr "次に、 `grayskull pypi your-package-name` を実行してレシピを生成します。"
-#: ../../tutorials/publish-conda-forge.md:222
+#: ../../tutorials/publish-conda-forge.md:229
msgid ""
"Grayskull will pull metadata about your package from PyPI. It does not "
"use your local installation of the package."
msgstr "Grayskull はあなたのパッケージのメタデータを PyPI から取得します。ローカルにインストールしたパッケージは使用しません。"
-#: ../../tutorials/publish-conda-forge.md:223
+#: ../../tutorials/publish-conda-forge.md:230
msgid ""
"An internet connection is needed to run the `grayskull pypi your-package-"
"name` step."
msgstr "`grayskull pypi your-package-name` のステップを実行するにはインターネット接続が必要です。"
-#: ../../tutorials/publish-conda-forge.md:226
+#: ../../tutorials/publish-conda-forge.md:233
msgid ""
"When you run grayskull, it will grab the latest distribution of your "
"package from PyPI and will use that to create a new recipe."
msgstr "grayskullを実行すると、PyPIからあなたのパッケージの最新のディストリビューションを取得し、それを使って新しいレシピを作成します。"
-#: ../../tutorials/publish-conda-forge.md:228
+#: ../../tutorials/publish-conda-forge.md:235
msgid ""
"The recipe will be saved in a directory named after your package's name, "
"wherever you run the command."
msgstr "レシピは、コマンドを実行した場所の、あなたのパッケージ名にちなんだ名前のディレクトリに保存されます。"
-#: ../../tutorials/publish-conda-forge.md:230
+#: ../../tutorials/publish-conda-forge.md:237
msgid "`recipes/packagename/meta.yaml`"
msgstr "`recipes/packagename/meta.yaml`"
-#: ../../tutorials/publish-conda-forge.md:232
+#: ../../tutorials/publish-conda-forge.md:239
msgid ""
"At the very bottom of the grayskull output, it will also tell you where "
"it saved the recipe file."
msgstr "grayskull 出力の一番下にある、レシピファイルの保存場所も教えてくれます。"
-#: ../../tutorials/publish-conda-forge.md:235
+#: ../../tutorials/publish-conda-forge.md:242
msgid ""
"Open the meta.yaml file. The finished `meta.yaml` file that grayskull "
"creates should look like the example below:"
msgstr "meta.yaml ファイルを開きます。 grayskullが作成する完成した `meta.yaml` ファイルは、以下の例のようになるはずです:"
-#: ../../tutorials/publish-conda-forge.md:282
+#: ../../tutorials/publish-conda-forge.md:289
msgid "Step 3b: Bug fix - add a home url to the about: section"
msgstr "ステップ 3b: バグフィクス - about:セクションにホームURLを追加します"
-#: ../../tutorials/publish-conda-forge.md:284
+#: ../../tutorials/publish-conda-forge.md:291
msgid ""
"There is currently a small bug in Grayskull where it doesn't populate the"
" home: element of the recipe. If you don't include this, [you will "
@@ -4314,19 +4345,19 @@ msgstr ""
"forge linter bot から [エラーメッセージが表示されます](https://github.com/conda-forge"
"/staged-recipes/pull/25173#issuecomment-1917916528) 。"
-#: ../../tutorials/publish-conda-forge.md:298
+#: ../../tutorials/publish-conda-forge.md:305
msgid "to fix this, open your meta.yaml file in your favorite text editor."
msgstr "これを修正するには、meta.yamlファイルをお好みのテキストエディタで開いてください。"
-#: ../../tutorials/publish-conda-forge.md:299
+#: ../../tutorials/publish-conda-forge.md:306
msgid "and add a home: element to the about section"
msgstr "そして、aboutセクションに home: 要素を追加します"
-#: ../../tutorials/publish-conda-forge.md:301
+#: ../../tutorials/publish-conda-forge.md:308
msgid "The about section will look like this after you create your recipe."
msgstr "レシピを作成すると、aboutセクションはこのようになります。"
-#: ../../tutorials/publish-conda-forge.md:311
+#: ../../tutorials/publish-conda-forge.md:318
msgid ""
"Below you add a home: element. If you have a project home page / website "
"you can use that url. Otherwise, you can also use your PyPI landing page."
@@ -4334,11 +4365,11 @@ msgstr ""
"以下で home: element "
"を追加します。プロジェクトのホームページやウェブサイトがあれば、そのURLを使うことができます。そうでなければ、PyPIのランディングページを使うこともできます。"
-#: ../../tutorials/publish-conda-forge.md:322
+#: ../../tutorials/publish-conda-forge.md:329
msgid "Step 4: tests for conda-forge"
msgstr "ステップ 4: conda-forgeのテスト"
-#: ../../tutorials/publish-conda-forge.md:324
+#: ../../tutorials/publish-conda-forge.md:331
msgid ""
"Next, have a look at the tests section in your **meta.yaml** file. At a "
"minimum you should import your package or the main modules associated "
@@ -4347,35 +4378,35 @@ msgstr ""
"次に、 **meta.yaml** ファイルのtestsセクションを見てください。 "
"最低限、自分のパッケージか、そのパッケージに関連する主要なモジュールをインポートして `pip check` を実行する必要があります。"
-#: ../../tutorials/publish-conda-forge.md:326
+#: ../../tutorials/publish-conda-forge.md:333
msgid ""
"`pip check` will ensure that your package installs properly with all of "
"the proper dependencies."
msgstr "`pip check` は、あなたのパッケージが適切な依存関係をすべて持って正しくインストールされることを保証します。"
-#: ../../tutorials/publish-conda-forge.md:338
+#: ../../tutorials/publish-conda-forge.md:345
msgid ""
"If you have more advanced tests that you wish to run, you can add them "
"here. However, you can also simply leave the tests section as it is."
msgstr "さらに高度なテストを実施したい場合は、ここに追加することができます。 しかし、テストセクションをそのままにしておくこともできます。"
-#: ../../tutorials/publish-conda-forge.md:340
+#: ../../tutorials/publish-conda-forge.md:347
msgid "Step 4: Submit a pull request to the staged-recipes repository"
msgstr "ステップ 4: staged-recipesリポジトリにプルリクエストを提出します"
-#: ../../tutorials/publish-conda-forge.md:342
+#: ../../tutorials/publish-conda-forge.md:349
msgid ""
"Once you have completed all of the above, you are ready to open up a pull"
" request in the `conda-forge/staged-recipes repository`."
msgstr "上記がすべて完了したら、 `conda-forge/staged-recipes repository` でプルリクエストを開く準備ができました。"
-#: ../../tutorials/publish-conda-forge.md:344
+#: ../../tutorials/publish-conda-forge.md:351
msgid ""
"Submit a pull request from your fork/branch of the staged-recipes "
"repository."
msgstr "staged-recipesリポジトリのフォーク/ブランチからプルリクエストを提出してください。"
-#: ../../tutorials/publish-conda-forge.md:345
+#: ../../tutorials/publish-conda-forge.md:352
msgid ""
"Remember that the conda-forge maintainers are volunteers. Be patient for "
"someone to respond and supportive in your communication with them."
@@ -4387,25 +4418,25 @@ msgstr ""
msgid "Conda-forge checklist help"
msgstr "Conda-forgeチェックリストヘルプ"
-#: ../../tutorials/publish-conda-forge.md:351
+#: ../../tutorials/publish-conda-forge.md:358
msgid "Conda-forge Staged-recipes Pull Request Checklist"
msgstr "Conda-forge Staged-recipes プルリクエストチェックリスト"
-#: ../../tutorials/publish-conda-forge.md:353
+#: ../../tutorials/publish-conda-forge.md:360
msgid ""
"When you submit your package to conda-forge, the pull request template "
"includes a list of checks that you want to ensure you have covered."
msgstr "conda-forgeにパッケージを投稿する際、プルリクエストテンプレートには、あなたが確実にカバーしたいチェックリストが含まれています。"
-#: ../../tutorials/publish-conda-forge.md:355
+#: ../../tutorials/publish-conda-forge.md:362
msgid "Below we break down each element of that list."
msgstr "以下では、そのリストの各要素を分解します。"
-#: ../../tutorials/publish-conda-forge.md:357
+#: ../../tutorials/publish-conda-forge.md:364
msgid "Pull request template checklist tips"
msgstr "プルリクエストテンプレートのチェックリストのヒント"
-#: ../../tutorials/publish-conda-forge.md:360
+#: ../../tutorials/publish-conda-forge.md:367
msgid ""
"-[x] Title of this PR is meaningful: e.g. \"Adding my_nifty_package\", "
"not \"updated meta.yaml\"."
@@ -4413,7 +4444,7 @@ msgstr ""
"-[x] このPRのタイトルは意味があります: 例 \"updated meta.yaml\" ではなく \"Adding "
"my_nifty_package\" 。"
-#: ../../tutorials/publish-conda-forge.md:362
+#: ../../tutorials/publish-conda-forge.md:369
msgid ""
"**Translation:** Make sure that your pull request title is specific. We "
"suggest something like: `Add recipe for `"
@@ -4421,7 +4452,7 @@ msgstr ""
"**翻訳:** プルリクエストのタイトルが具体的であることを確認してください。 我々は次のようなものを提案します: ` のレシピを追加`"
-#: ../../tutorials/publish-conda-forge.md:365
+#: ../../tutorials/publish-conda-forge.md:372
msgid ""
"-[x] License file is packaged (see [here](https://github.com/conda-forge"
"/staged-"
@@ -4433,7 +4464,7 @@ msgstr ""
"recipes/blob/5eddbd7fc9d1502169089da06c3688d9759be978/recipes/example/meta.yaml#L64-L73"
" を参照)) 。"
-#: ../../tutorials/publish-conda-forge.md:367
+#: ../../tutorials/publish-conda-forge.md:374
msgid ""
"**Translation:** You should have a LICENSE file included in your "
"package's source distribution. If you have followed the pyOpenSci "
@@ -4447,11 +4478,11 @@ msgstr ""
"build` を実行すると、conda-forge がパッケージのビルドに使用する出力 [ソースディストリビューションファイル(tar.gz "
"ファイル) ](python-source-distribution) にそのファイルがバンドルされます。"
-#: ../../tutorials/publish-conda-forge.md:369
+#: ../../tutorials/publish-conda-forge.md:376
msgid "[x] Source is from official source."
msgstr "[x] ソースは公式ソースより。"
-#: ../../tutorials/publish-conda-forge.md:371
+#: ../../tutorials/publish-conda-forge.md:378
msgid ""
"**Translation:** If your package is on PyPI as you learned in the "
"[previous lesson on publishing your Python package](publish-pypi) then "
@@ -4462,7 +4493,7 @@ msgstr ""
"で学んだように、あなたのパッケージがPyPI上にあるのであれば、問題はありません。 conda-"
"forgeはディストリビューションを既知のリポジトリに公開することを推奨します。"
-#: ../../tutorials/publish-conda-forge.md:373
+#: ../../tutorials/publish-conda-forge.md:380
msgid ""
"-[x] Package does not vendor other packages. (If a package uses the "
"source of another package, they should be separate packages or the "
@@ -4471,7 +4502,7 @@ msgstr ""
"-[x] パッケージは他のパッケージをベンダリングしません。 "
"(あるパッケージが他のパッケージのソースを使用している場合、これらは別々のパッケージにするか、すべてのパッケージのライセンスをパッケージ化する必要があります)。"
-#: ../../tutorials/publish-conda-forge.md:375
+#: ../../tutorials/publish-conda-forge.md:382
msgid ""
"**Translation:** If the code base in your package is your own and it all "
"shares the same LICENSE then you are in good shape. If you have code "
@@ -4482,13 +4513,13 @@ msgstr ""
"**翻訳:** "
"あなたのパッケージのコードベースがあなた自身のものであり、それがすべて同じライセンスを共有しているのであれば、問題はありません。他のパッケージから取得したコードがある場合は、そのコードを宣言し、異なる場合はそのライセンスも含める必要があるかもしれません。これらのチュートリアルに従ったのであれば、あなたはベンダーのコードを持っていません。"
-#: ../../tutorials/publish-conda-forge.md:377
+#: ../../tutorials/publish-conda-forge.md:384
msgid ""
"-[x] If static libraries are linked in, the license of the static library"
" is packaged."
msgstr "-[x] スタティックライブラリーがリンクされている場合、スタティックライブラリーのライセンスがパッケージされます。"
-#: ../../tutorials/publish-conda-forge.md:379
+#: ../../tutorials/publish-conda-forge.md:386
msgid ""
"-[x] Package does not ship static libraries. If static libraries are "
"needed, [follow CFEP-18](https://github.com/conda-"
@@ -4497,7 +4528,7 @@ msgstr ""
"-[x] パッケージには静的ライブラリは同梱されていません。静的ライブラリーが必要な場合、 [CFEP-18 "
"に従います](https://github.com/conda-forge/cfep/blob/main/cfep-18.md)."
-#: ../../tutorials/publish-conda-forge.md:381
+#: ../../tutorials/publish-conda-forge.md:388
msgid ""
"**Translation:** A static library refers to a copy of a package built "
"into your package. If your package is a pure Python package, then you can"
@@ -4507,21 +4538,21 @@ msgstr ""
"**翻訳:** "
"スタティックライブラリーは、パッケージに組み込まれたパッケージのコピーを指します。もしあなたのパッケージが純粋なPythonパッケージであれば、スタティックライブラリが同梱されていないことを確認してください。"
-#: ../../tutorials/publish-conda-forge.md:383
+#: ../../tutorials/publish-conda-forge.md:390
msgid ""
"The pyOpenSci tutorials are all pure Python and as such do not use static"
" libraries in a linked or shipped (included in the package distribution) "
"format."
msgstr "pyOpenSciチュートリアルはすべて純粋なPythonであり、リンクされた、あるいは出荷された(パッケージ配布に含まれる)形式の静的ライブラリは使用しません。"
-#: ../../tutorials/publish-conda-forge.md:385
+#: ../../tutorials/publish-conda-forge.md:392
msgid ""
"If your package has a more complex build that includes links to "
"extensions written in other languages such as C++, then be sure to "
"include the proper licenses for those extensions in your metadata."
msgstr "あなたのパッケージが、C++のような他の言語で書かれた拡張機能へのリンクを含む、より複雑なビルドを持つ場合は、メタデータにそれらの拡張機能の適切なライセンスを含めるようにしてください。"
-#: ../../tutorials/publish-conda-forge.md:390
+#: ../../tutorials/publish-conda-forge.md:397
msgid ""
"If you want to learn more about static libraries, then [this "
"overview](https://pypackaging-"
@@ -4532,11 +4563,11 @@ msgstr ""
"native.github.io/background/compilation_concepts/#shared-vs-static-"
"libraries) が役に立つかもしれません。"
-#: ../../tutorials/publish-conda-forge.md:393
+#: ../../tutorials/publish-conda-forge.md:400
msgid "-[ ] Build number is 0."
msgstr "-[ ] ビルド番号は0。"
-#: ../../tutorials/publish-conda-forge.md:395
+#: ../../tutorials/publish-conda-forge.md:402
msgid ""
"**Translation:** The build number in your recipe is right below the "
"source location of your package's source distribution. `number: 0` is "
@@ -4545,7 +4576,7 @@ msgstr ""
"**翻訳:** レシピのビルド番号は、パッケージのソース配布場所のすぐ下にあります。 `number: 0` "
"は、レシピのそのセクションに表示されるべきものです。"
-#: ../../tutorials/publish-conda-forge.md:408
+#: ../../tutorials/publish-conda-forge.md:415
msgid ""
"[x] A tarball (`url`) rather than a repo (e.g. `git_url`) is used in your"
" recipe (see [here](https://conda-"
@@ -4554,7 +4585,7 @@ msgstr ""
"[x] レシピでは、リポジトリ (例 `git_url` ) ではなく、tarball (`url`) を使用します。 (詳細は "
"[こちら](https://conda-forge.org/docs/maintainer/adding_pkgs.html))。"
-#: ../../tutorials/publish-conda-forge.md:410
+#: ../../tutorials/publish-conda-forge.md:417
msgid ""
"**Translation:** Here conda wants you to provide a link to the source "
"distribution on PyPI rather than a link to your GitHub repository "
@@ -4567,13 +4598,13 @@ msgstr ""
" `url:` セクションがあり、tar.gzで終わるPyPIのURLを提供していることに注意してください。これは、conda-"
"forgeが使用するソースディストリビューションへのリンクです。"
-#: ../../tutorials/publish-conda-forge.md:416
+#: ../../tutorials/publish-conda-forge.md:423
msgid ""
"[x] GitHub users listed in the maintainer section have posted a comment "
"confirming they are willing to be listed there."
msgstr "[x] GitHubのメンテナセクションに掲載されているユーザーは、掲載の意思を確認するコメントを投稿しています。"
-#: ../../tutorials/publish-conda-forge.md:418
+#: ../../tutorials/publish-conda-forge.md:425
msgid ""
"**Translation** Once you have submitted your recipe, be sure that all "
"maintainers listed in your recipe respond acknowledging that they are ok "
@@ -4583,7 +4614,7 @@ msgstr ""
"**Translation** レシピを提出したら、レシピに記載されているすべてのメンテナが、あなたのパッケージの conda-forge "
"バージョンのメンテナとして記載されても構わないという返事をすることを確認してください。"
-#: ../../tutorials/publish-conda-forge.md:420
+#: ../../tutorials/publish-conda-forge.md:427
msgid ""
"[x] When in trouble, please check our [knowledge base "
"documentation](https://conda-"
@@ -4592,7 +4623,7 @@ msgstr ""
"[x] 問題が発生した場合は、チームに問い合わせる前に [ナレッジベースのドキュメント](https://conda-"
"forge.org/docs/maintainer/knowledge_base.html) を確認してください。"
-#: ../../tutorials/publish-conda-forge.md:422
+#: ../../tutorials/publish-conda-forge.md:429
msgid ""
"**Translation** The conda team are volunteers who spend their time "
"supporting our community. Please try to troubleshoot on your own first "
@@ -4601,13 +4632,13 @@ msgstr ""
"**翻訳** コンダチームはボランティアで、私たちのコミュニティをサポートするために時間を費やしています。 "
"彼らに助けを求める前に、まずは自分でトラブルシューティングを試みてください。"
-#: ../../tutorials/publish-conda-forge.md:424
+#: ../../tutorials/publish-conda-forge.md:431
msgid ""
"This is also why we don't suggest you publish to conda-forge as a "
"practice run."
msgstr "これが、練習としてconda-forgeに公開することをお勧めしない理由でもあります。"
-#: ../../tutorials/publish-conda-forge.md:428
+#: ../../tutorials/publish-conda-forge.md:435
msgid ""
"Once you create your pull request, a suite of CI actions will run that "
"build and test the build of your package. A conda-forge maintainer will "
@@ -4616,13 +4647,13 @@ msgstr ""
"プルリクエストを作成すると、一連のCIアクションがビルドを実行し、パッケージのビルドをテストします。 conda-"
"forgeのメンテナーは、あなたのレシピを良い状態にしてマージするためにあなたと協力します。"
-#: ../../tutorials/publish-conda-forge.md:432
+#: ../../tutorials/publish-conda-forge.md:439
msgid ""
"Image showing the 5 CI tasks that will run against your package in the "
"GitHub interface after you'ce created a pull request."
msgstr "プルリクエストを作成した後、GitHubのインターフェイスであなたのパッケージに対して実行される5つのCIタスクを示す画像。"
-#: ../../tutorials/publish-conda-forge.md:434
+#: ../../tutorials/publish-conda-forge.md:441
msgid ""
"Wait until all of the CI steps in your pull request have run. At that "
"point your pull request is ready for review by a conda-forge maintainer."
@@ -4630,7 +4661,7 @@ msgstr ""
"プルリクエストのCIステップがすべて実行されるまで待ちます。 この時点で、あなたのプルリクエストはconda-"
"forgeのメンテナによるレビューの準備が整いました。"
-#: ../../tutorials/publish-conda-forge.md:437
+#: ../../tutorials/publish-conda-forge.md:444
msgid ""
"In some cases getting all of the checks to run successfully in CI might "
"take a bit of work. If you are struggling to get your recipe to build "
@@ -4639,15 +4670,15 @@ msgstr ""
"場合によっては、CIですべてのチェックを成功させるには、少し手間がかかるかもしれません。 レシピがうまくビルドできない場合は、conda-"
"forge メンテナチームに助けを求めてください。"
-#: ../../tutorials/publish-conda-forge.md:439
+#: ../../tutorials/publish-conda-forge.md:446
msgid "Please be patient and wait for them to respond."
msgstr "辛抱強く返答を待ってください。"
-#: ../../tutorials/publish-conda-forge.md:441
+#: ../../tutorials/publish-conda-forge.md:448
msgid "conda-forge staged recipes and CI failures"
msgstr "conda-forgeのステージレシピとCIの失敗"
-#: ../../tutorials/publish-conda-forge.md:444
+#: ../../tutorials/publish-conda-forge.md:451
msgid ""
"If your package is a pure Python package that can be installed on any "
"type of computer (Windows, mac, linux) and has no architecture "
@@ -4659,7 +4690,7 @@ msgstr ""
"Pythonまたはアーキテクチャの要求がないパッケージとして知られています) 、conda-forgeチームはLinux "
"CI用のテストのみがパスすることを要求します。"
-#: ../../tutorials/publish-conda-forge.md:446
+#: ../../tutorials/publish-conda-forge.md:453
msgid ""
"So if tests for Windows and MAC OS fail, that is to be expected. In this "
"case, don't worry about failing tests, the maintainer team can help you "
@@ -4668,7 +4699,7 @@ msgstr ""
"そのため、WindowsとMAC OSのテストが失敗したとしても、それは予想されることです。 "
"この場合、テストの失敗を心配する必要はありません。メンテナチームが、あなたのパッケージが公開されるよう手助けしてくれます。"
-#: ../../tutorials/publish-conda-forge.md:449
+#: ../../tutorials/publish-conda-forge.md:456
msgid ""
"Once you have submitted your recipe, you can wait for the CI build to "
"pass. If it's not passing, and you aren't sure why, a conda-forge "
@@ -4677,7 +4708,7 @@ msgstr ""
"レシピを提出したら、CIビルドが通過するのを待つことができます。 もしそれが通らず、その理由がわからない場合は、conda-"
"forgeのメンテナーが解決してくれるでしょう。"
-#: ../../tutorials/publish-conda-forge.md:451
+#: ../../tutorials/publish-conda-forge.md:458
msgid ""
"Once your recipe is built and merged, the conda team will create a new "
"package repository for you similar to [this one for the GemGIS "
@@ -4687,7 +4718,7 @@ msgstr ""
"[GemGISパッケージ用のリポジトリ](https://github.com/conda-forge/gemgis-feedstock) "
"と同じような新しいパッケージリポジトリを作成します。"
-#: ../../tutorials/publish-conda-forge.md:453
+#: ../../tutorials/publish-conda-forge.md:460
msgid ""
" Congratulations - you "
"have added your package to conda-forge. おめでとう - パッケージをconda-"
"forgeに追加しました。"
-#: ../../tutorials/publish-conda-forge.md:455
+#: ../../tutorials/publish-conda-forge.md:462
msgid ""
"The last part of this process is maintaining the repository. We cover "
"that next."
msgstr "このプロセスの最後の部分は、リポジトリの管理です。次はそれを取り上げます。"
-#: ../../tutorials/publish-conda-forge.md:458
+#: ../../tutorials/publish-conda-forge.md:465
msgid "Maintaining your conda-forge feedstock"
msgstr "conda-forgeフィードストックのメンテナンス"
-#: ../../tutorials/publish-conda-forge.md:460
+#: ../../tutorials/publish-conda-forge.md:467
msgid ""
"Every time you create a new release on PyPI, the conda-forge bots will "
"recognize the release and will rebuild the newly released version of your"
@@ -4715,7 +4746,7 @@ msgstr ""
"PyPIで新しいリリースを作成するたびに、conda-"
"forgeボットはそのリリースを認識し、新しくリリースされたバージョンのパッケージをリビルドします。このプロセスには1-2日かかることがありますので、気長にお待ちください。"
-#: ../../tutorials/publish-conda-forge.md:462
+#: ../../tutorials/publish-conda-forge.md:469
msgid ""
"Once the conda-forge build is complete, all of the maintainers of your "
"conda-forge feedstock will get a ping on GitHub that a new pull request "
@@ -4724,7 +4755,7 @@ msgstr ""
"conda-forgeのビルドが完了すると、 conda-forge feedstock "
"の全メンテナにGitHubで新しいプルリクエストが開かれたことが通知されます。"
-#: ../../tutorials/publish-conda-forge.md:464
+#: ../../tutorials/publish-conda-forge.md:471
msgid ""
"Review the pull request. If all tests are passing, you can merge it. "
"Shortly after merging your pull request, the conda-forge release will be "
@@ -4733,39 +4764,39 @@ msgstr ""
"プルリクエストを確認します。すべてのテストがパスすれば、マージできます。あなたのプルリクエストをマージした直後に、conda-forge "
"リリースが利用可能になり、ユーザーはインストールできるようになります:"
-#: ../../tutorials/publish-conda-forge.md:466
+#: ../../tutorials/publish-conda-forge.md:473
msgid "`conda install -c conda-forge yourpackage`"
msgstr "`conda install -c conda-forge yourpackage`"
-#: ../../tutorials/publish-conda-forge.md:470
+#: ../../tutorials/publish-conda-forge.md:477
msgid "If you have walked through this entire tutorial series you will now:"
msgstr "このチュートリアルシリーズを一通りご覧になった方なら、もうお分かりでしょう:"
-#: ../../tutorials/publish-conda-forge.md:472
+#: ../../tutorials/publish-conda-forge.md:479
msgid "Understand [what a Python package is ](intro.md)"
msgstr "[Pythonパッケージとは何か](intro.md) を理解する"
-#: ../../tutorials/publish-conda-forge.md:473
+#: ../../tutorials/publish-conda-forge.md:480
msgid ""
"Know how to [make your code installable](create-python-package.md) into "
"Python environments"
msgstr "[コードをPython環境にインストール可能にする方法](create-python-package.md) を知る"
-#: ../../tutorials/publish-conda-forge.md:474
+#: ../../tutorials/publish-conda-forge.md:481
msgid ""
"Know how to create a `pyproject.toml` file, a `README` file, and a "
"`LICENSE` and code of conduct."
msgstr "`pyproject.toml` ファイル、 `README` ファイル、 `LICENSE` と行動規範の作成方法を知っている。"
-#: ../../tutorials/publish-conda-forge.md:475
+#: ../../tutorials/publish-conda-forge.md:482
msgid "Know how to [publish your package to PyPI](publish-pypi.md) and"
msgstr "[パッケージをPyPIに公開する](publish-pypi.md) 方法と"
-#: ../../tutorials/publish-conda-forge.md:476
+#: ../../tutorials/publish-conda-forge.md:483
msgid "Know how to publish your package to conda-forge"
msgstr "パッケージをconda-forgeに公開する方法を知ります"
-#: ../../tutorials/publish-conda-forge.md:478
+#: ../../tutorials/publish-conda-forge.md:485
msgid ""
"The above are the basic steps that you need to take to create and publish"
" a Python package. In a future tutorial series we will cover that basics "
@@ -4774,11 +4805,11 @@ msgstr ""
"以上が、Pythonパッケージを作成して公開するために必要な基本的な手順です。 "
"今後のチュートリアルシリーズでは、パッケージのメンテナンスの基本について取り上げます。"
-#: ../../tutorials/publish-conda-forge.md:482
+#: ../../tutorials/publish-conda-forge.md:489
msgid "[Grayskull blogpost](https://conda-forge.org/blog/2020/03/05/grayskull/)"
msgstr "[Grayskull blogpost](https://conda-forge.org/blog/2020/03/05/grayskull/)"
-#: ../../tutorials/publish-conda-forge.md:483
+#: ../../tutorials/publish-conda-forge.md:490
msgid "[Pipx documentation](https://pipx.pypa.io/stable/)"
msgstr "[Pipx documentation](https://pipx.pypa.io/stable/)"
@@ -4806,24 +4837,28 @@ msgid "How to make your code installable."
msgstr "コードをインストール可能にします。"
#: ../../tutorials/publish-pypi.md:26
-msgid "Build your package's source (sdist) and wheel distributions"
-msgstr "パッケージのソース (sdist) とwheelディストリビューションをビルドします。"
+#, python-brace-format
+msgid ""
+"Build your package's {term}`Source distribution (sdist)` and {term}`Wheel"
+" (.whl)` {term}`Distribution files`"
+msgstr ""
-#: ../../tutorials/publish-pypi.md:27
+#: ../../tutorials/publish-pypi.md:28
msgid "Setup an account on TestPyPI (the process is similar for PyPI)"
msgstr "TestPyPIにアカウントを設定する(PyPIでも同様の手順です)"
-#: ../../tutorials/publish-pypi.md:28
+#: ../../tutorials/publish-pypi.md:29
msgid "Publish your package to TestPyPI and PyPI"
msgstr "パッケージをTestPyPIとPyPIに公開する"
-#: ../../tutorials/publish-pypi.md:30
+#: ../../tutorials/publish-pypi.md:31
+#, fuzzy
msgid ""
-"You will do all of your development work in this lesson using "
-"[Hatch](https://hatch.pypa.io/latest/)."
+"You will do all of your development work in this lesson using [Hatch"
+"](get-to-know-hatch)."
msgstr "このレッスンでは、すべての開発作業を [Hatch](https://hatch.pypa.io/latest/) を使って行います。"
-#: ../../tutorials/publish-pypi.md:32
+#: ../../tutorials/publish-pypi.md:34
msgid ""
"Once your package is on PyPI you can publish it to conda-forge (which is "
"a channel on conda) using "
@@ -4832,13 +4867,13 @@ msgstr ""
"パッケージがPyPIに載ったら、 [Grayskull](https://conda.github.io/grayskull/) "
"を使ってconda-forge (condaのチャンネルです) に公開できます。"
-#: ../../tutorials/publish-pypi.md:35
+#: ../../tutorials/publish-pypi.md:37
msgid ""
"You will learn how to publish to conda-forge in the [next lesson"
"](publish-conda-forge)."
msgstr "conda-forgeに公開する方法は [次のレッスン](publish-conda-forge) で学びます。"
-#: ../../tutorials/publish-pypi.md:39
+#: ../../tutorials/publish-pypi.md:41
msgid ""
"Graphic showing the high level packaging workflow. On the left you see a "
"graphic with code, metadata and tests in it. Those items all go into your"
@@ -4855,7 +4890,7 @@ msgstr ""
"。PyPIからconda-forgeに接続することで、PyPIからconda-"
"forgeにディストリビューションを送る自動ビルドを行うことができるからです。"
-#: ../../tutorials/publish-pypi.md:41
+#: ../../tutorials/publish-pypi.md:43
msgid ""
"You need to build your Python package in order to publish it to PyPI (or "
"Conda). The build process organizes your code and metadata into a "
@@ -4865,17 +4900,17 @@ msgstr ""
"PythonパッケージをPyPI(またはConda)に公開するには、ビルドする必要があります。ビルドプロセスは、あなたのコードとメタデータをPyPIにアップロードできる配布フォーマットに整理し、その後ユーザーがダウンロードしてインストールできるようにします。"
" "
-#: ../../tutorials/publish-pypi.md:44
+#: ../../tutorials/publish-pypi.md:46
msgid "TestPyPI vs PyPI"
msgstr "TestPyPI vs PyPI"
-#: ../../tutorials/publish-pypi.md:46
+#: ../../tutorials/publish-pypi.md:48
msgid ""
"There are two repositories associated with PyPI to which you can upload "
"your Python package."
msgstr "PyPIには、Pythonパッケージをアップロードできる2つのリポジトリがあります。"
-#: ../../tutorials/publish-pypi.md:49
+#: ../../tutorials/publish-pypi.md:51
msgid ""
"**[TestPyPI](https://test.pypi.org):** TestPyPI is a package repository "
"provided by PyPI that you can use for testing that your package can be "
@@ -4886,7 +4921,7 @@ msgstr ""
"**[TestPyPI](https://test.pypi.org):** "
"TestPyPIはPyPIが提供するパッケージリポジトリで、あなたのパッケージが正しくアップロード、ダウンロード、インストールできるかをテストするために使用できます。これは、実際のPyPIサービスに不完全なパッケージを公開することなく、パッケージを公開する方法を学び、練習するのに最適な場所です。"
-#: ../../tutorials/publish-pypi.md:50
+#: ../../tutorials/publish-pypi.md:52
msgid ""
"**[PyPI](https://pypi.org):** This is the live, production PyPI "
"repository where you can officially publish your Python package, and from"
@@ -4900,17 +4935,17 @@ msgstr ""
"PyPIにパッケージを公開するのは、それが他の人に使われる準備ができたとき、そして/またはそれがあなたが保守するパッケージになると確信したときだけにしてください。"
" PyPIはPythonパッケージの公開方法を学ぶ練習の場ではありません。"
-#: ../../tutorials/publish-pypi.md:52
+#: ../../tutorials/publish-pypi.md:54
msgid ""
"The steps for publishing on TestPyPI vs. PyPI are similar with the "
"exception of a different url. We will point out where they differ."
msgstr "TestPyPIとPyPIで公開する手順は、URLが異なることを除いて似ています。両者の相違点を指摘します。"
-#: ../../tutorials/publish-pypi.md:55
+#: ../../tutorials/publish-pypi.md:57
msgid "4 Steps for publishing a Python package on TestPyPI (or PyPI)"
msgstr "TestPyPI (またはPyPI)でPythonパッケージを公開するための4つのステップ"
-#: ../../tutorials/publish-pypi.md:57
+#: ../../tutorials/publish-pypi.md:59
msgid ""
"In this lesson you will learn how to publish your package to TestPyPI "
"using [Hatch](https://hatch.pypa.io/latest/). There are 4 things that you"
@@ -4920,39 +4955,41 @@ msgstr ""
"を使ってパッケージをTestPyPIに公開する方法を学びます。 Pythonパッケージを公開するために必要なことは4つあります: "
"TestPyPIでは。必要なのは:"
-#: ../../tutorials/publish-pypi.md:62
+#: ../../tutorials/publish-pypi.md:64
msgid "**Create a package development environment**"
msgstr "**パッケージ開発環境の構築**"
-#: ../../tutorials/publish-pypi.md:63
+#: ../../tutorials/publish-pypi.md:65
+#, fuzzy, python-brace-format
msgid ""
"[**Build your package using `hatch build`**](../package-structure-code"
"/python-package-distribution-files-sdist-wheel). Building a package is "
"the process of turning your code into two types of distribution files: "
"sdist and wheel. The wheel distribution file is particularly important "
-"for users who will `pip install` your package."
+"for users who will use {term}`pip` to install your package."
msgstr ""
"[**`hatch build` を使ってパッケージをビルドします**](../package-structure-code/python-"
"package-distribution-files-sdist-wheel)。 "
"パッケージのビルドは、コードを2種類の配布ファイルに変換するプロセスです: sdistとwheel。wheel配布ファイルは、あなたのパッケージを"
" `pip install` するユーザーにとって特に重要です。"
-#: ../../tutorials/publish-pypi.md:64
+#: ../../tutorials/publish-pypi.md:66
+#, fuzzy, python-brace-format
msgid ""
"**Create an account on TestPyPI (or PyPI)**: You will need to create a "
-"TestPyPI account and associated token which provides permissions for you "
-"to upload your package. When you later publish your package to PyPI, you "
-"will need a separate PyPI account and token."
+"TestPyPI account and associated {term}`API token` which provides "
+"permissions for you to upload your package. When you later publish your "
+"package to PyPI, you will need a separate PyPI account and token."
msgstr ""
"**TestPyPI (またはPyPI)でアカウントを作成します**: "
"TestPyPIアカウントと、パッケージをアップロードするためのパーミッションを提供する関連トークンを作成する必要があります。 "
"後でパッケージをPyPIに公開するときは、別のPyPIアカウントとトークンが必要になります。"
-#: ../../tutorials/publish-pypi.md:65
+#: ../../tutorials/publish-pypi.md:67
msgid "**Publish to TestPyPI using `hatch publish`**"
msgstr "** `hatch publish` を使用してTestPyPIにパブリッシュする**"
-#: ../../tutorials/publish-pypi.md:67
+#: ../../tutorials/publish-pypi.md:69
#, fuzzy
msgid ""
"In a [future lesson](trusted-publishing), you will learn how to create an"
@@ -4962,11 +4999,11 @@ msgstr ""
"今後のレッスンでは、GitHub リリースを作成するたびにパッケージの更新版を PyPI に公開する、自動化された GitHub Actions "
"のワークフローを作成する方法を学びます。"
-#: ../../tutorials/publish-pypi.md:69
+#: ../../tutorials/publish-pypi.md:71
msgid "Learn more about building Python packages in our guide"
msgstr "Pythonパッケージのビルドについては、ガイドを参照してください。"
-#: ../../tutorials/publish-pypi.md:73
+#: ../../tutorials/publish-pypi.md:75
msgid ""
"[Learn more about what building a Python package is](../package-"
"structure-code/python-package-distribution-files-sdist-wheel)"
@@ -4974,13 +5011,13 @@ msgstr ""
"[Pythonパッケージのビルドについてもっと知る](../package-structure-code/python-package-"
"distribution-files-sdist-wheel)"
-#: ../../tutorials/publish-pypi.md:74
+#: ../../tutorials/publish-pypi.md:76
msgid ""
"[Learn more about the package distribution file that PyPI needs called "
"the wheel](#python-wheel)"
msgstr "[PyPIが必要とするwheelと呼ばれるパッケージ配布ファイルについての詳細はこちら](#python-wheel)"
-#: ../../tutorials/publish-pypi.md:75
+#: ../../tutorials/publish-pypi.md:77
msgid ""
"[Learn more about the package distribution file that conda-forge will "
"need on PyPI called the sdist (source distribution)](#python-source-"
@@ -4989,26 +5026,26 @@ msgstr ""
"[PyPIでconda-forgeが必要とするsdist (ソースディストリビューション) "
"と呼ばれるパッケージ配布ファイルについてはこちらを参照してください](#python-source-distribution)"
-#: ../../tutorials/publish-pypi.md:78
+#: ../../tutorials/publish-pypi.md:80
msgid "Step 1: Create a Python package development environment"
msgstr "ステップ1: Pythonパッケージ開発環境の構築"
-#: ../../tutorials/publish-pypi.md:80
+#: ../../tutorials/publish-pypi.md:82
msgid ""
"The first step in building your package is to create a development "
"environment. The Python environment will contain all of the dependencies "
"needed to both install and work on your package."
msgstr "パッケージ構築の最初のステップは、開発環境を作ることだ。Python環境には、あなたのパッケージのインストールと作業の両方に必要な依存関係がすべて含まれています。"
-#: ../../tutorials/publish-pypi.md:82
+#: ../../tutorials/publish-pypi.md:84
msgid "Use Hatch to create your environment."
msgstr "Hatchを使って環境を整えましょう。"
-#: ../../tutorials/publish-pypi.md:90
+#: ../../tutorials/publish-pypi.md:92
msgid "Then view all of the current environments that hatch has access to:"
msgstr "次に、Hatchがアクセスできる現在の環境をすべて表示します:"
-#: ../../tutorials/publish-pypi.md:102
+#: ../../tutorials/publish-pypi.md:104
msgid ""
"Then activate the environment. Note that when you call a shell from a "
"Hatch environment, it will automatically install your package into the "
@@ -5017,19 +5054,19 @@ msgstr ""
"そして環境をアクティブにします。 "
"Hatch環境からシェルを呼び出すと、開発モードまたは編集可能モードで、あなたのパッケージが自動的に環境にインストールされることに注意してください。"
-#: ../../tutorials/publish-pypi.md:112
+#: ../../tutorials/publish-pypi.md:114
msgid "View what's in the environment using `pip list`:"
msgstr "`pip list` を使って環境にあるものを見ます:"
-#: ../../tutorials/publish-pypi.md:128
+#: ../../tutorials/publish-pypi.md:130
msgid "At any time you can exit the environment using `exit`."
msgstr "いつでも `exit` を使って環境を終了することができます。"
-#: ../../tutorials/publish-pypi.md:142
+#: ../../tutorials/publish-pypi.md:144
msgid "Hatch and environments"
msgstr "Hatchと環境"
-#: ../../tutorials/publish-pypi.md:144
+#: ../../tutorials/publish-pypi.md:146
msgid ""
"Behind the scenes when hatch creates a new virtual environment, by "
"default it uses venv[^venv] which is the default environment management "
@@ -5038,15 +5075,15 @@ msgstr ""
"hatchが新しい仮想環境を作るときの裏側では、デフォルトではPythonのインストールに付属しているデフォルトの環境管理ツールである "
"venv[^venv] を使います。"
-#: ../../tutorials/publish-pypi.md:147
+#: ../../tutorials/publish-pypi.md:149
msgid "Hatch will:"
msgstr "Hatch は:"
-#: ../../tutorials/publish-pypi.md:149
+#: ../../tutorials/publish-pypi.md:151
msgid "Create a new virtualenv (venv) that is located on your computer."
msgstr "コンピュータ上に新しい仮想環境 (venv) を作成します。"
-#: ../../tutorials/publish-pypi.md:150
+#: ../../tutorials/publish-pypi.md:152
msgid ""
"Install your package into the environment in editable mode (similar to "
"`python -m pip install -e`). This means it installs both your project and"
@@ -5055,11 +5092,11 @@ msgstr ""
"編集可能モードでパッケージを環境にインストールします ( `python -m pip install -e` と同様) 。 "
"これは、pyproject.tomlファイルで宣言されているように、あなたのプロジェクトとプロジェクトの依存関係の両方をインストールすることを意味します。"
-#: ../../tutorials/publish-pypi.md:152
+#: ../../tutorials/publish-pypi.md:154
msgid "Step 2: Build your package's sdist and wheel distributions"
msgstr "ステップ 2: パッケージのsdistとwheelディストリビューションをビルドする"
-#: ../../tutorials/publish-pypi.md:154
+#: ../../tutorials/publish-pypi.md:156
msgid ""
"Once you have your development environment setup, you are ready to build "
"your package using Hatch. Remember that building is the process of "
@@ -5068,7 +5105,7 @@ msgstr ""
"開発環境のセットアップが完了したら、Hatchを使ってパッケージをビルドする準備ができました。 "
"ビルドとは、Pythonパッケージのファイル構造を2つの配布ファイルにするプロセスであることを覚えておいてください:"
-#: ../../tutorials/publish-pypi.md:156
+#: ../../tutorials/publish-pypi.md:158
msgid ""
"The [wheel distribution](#python-wheel) is a pre-built version of your "
"package. It useful for users as it can be directly installed using a tool"
@@ -5077,7 +5114,7 @@ msgstr ""
"[wheelディストリビューション](#python-wheel) は、あなたのパッケージのビルド済みバージョンです。 `pip` "
"などのツールを使って直接インストールできるので、ユーザーにとっては便利です。このファイルの拡張子は `.whl` です。"
-#: ../../tutorials/publish-pypi.md:157
+#: ../../tutorials/publish-pypi.md:159
msgid ""
"The [source distribution](#python-source-distribution) contains the files"
" that make up your package in an unbuilt format. This file will have the "
@@ -5086,7 +5123,7 @@ msgstr ""
"[ソースディストリビューション](#python-source-distribution) "
"には、あなたのパッケージを構成するファイルが、ビルドされていない状態で含まれています。 このファイルの拡張子は `.tar.gz` となります。"
-#: ../../tutorials/publish-pypi.md:159
+#: ../../tutorials/publish-pypi.md:161
#, fuzzy
msgid ""
"You will use Hatch as a **Front end** tool that builds your package's "
@@ -5100,15 +5137,15 @@ msgstr ""
"[hatchling](https://hatch.pypa.io/latest/) ビルドバックエンドを使用するのは、 [前のレッスン"
"](create-python-package)でpyproject.tomlファイルで宣言したからです。"
-#: ../../tutorials/publish-pypi.md:163
+#: ../../tutorials/publish-pypi.md:165
msgid "To build your package run `hatch build`:"
msgstr "パッケージをビルドするには `hatch build` を実行します:"
-#: ../../tutorials/publish-pypi.md:174
+#: ../../tutorials/publish-pypi.md:176
msgid "Learn more about building a Python package"
msgstr "Pythonパッケージのビルドについて"
-#: ../../tutorials/publish-pypi.md:176
+#: ../../tutorials/publish-pypi.md:178
msgid ""
"You can learn more about building in the [build page of our packaging "
"guide](../package-structure-code/python-package-distribution-files-sdist-"
@@ -5117,7 +5154,7 @@ msgstr ""
"ビルドについては、 [パッケージングガイドのビルドのページ](../package-structure-code/python-package-"
"distribution-files-sdist-wheel) で詳しく説明しています。"
-#: ../../tutorials/publish-pypi.md:180
+#: ../../tutorials/publish-pypi.md:182
msgid ""
"The sdist is important if you wish to [publish your package to conda-"
"forge](publish-conda-forge). You will learn about this in a later lesson."
@@ -5125,7 +5162,7 @@ msgstr ""
"sdistは、conda-forgeにパッケージを [公開する場合に重要です](publish-conda-forge) "
"。これについては後のレッスンで学びます。"
-#: ../../tutorials/publish-pypi.md:184
+#: ../../tutorials/publish-pypi.md:186
msgid ""
"➜ hatch build ────────────────────────────────────── sdist "
"────────────────────────────────────── dist/pyospackage-0.1.tar.gz "
@@ -5139,7 +5176,7 @@ msgstr ""
"────────────────────────────────────── dist/pyospackage-0.1-py3-none-"
"any.whl"
-#: ../../tutorials/publish-pypi.md:191
+#: ../../tutorials/publish-pypi.md:193
msgid ""
" Congratulations - "
"you've created your Python package distribution files "
-#: ../../tutorials/publish-pypi.md:193
+#: ../../tutorials/publish-pypi.md:195
msgid ""
"You've now built your Python package and created your package "
"distribution files. The next step is to setup your account on TestPyPI so"
@@ -5158,11 +5195,11 @@ msgstr ""
"これで Python "
"パッケージをビルドし、パッケージ配布ファイルを作成しました。次のステップは、TestPyPIのアカウントをセットアップして、パッケージを公開できるようにすることです。"
-#: ../../tutorials/publish-pypi.md:196
+#: ../../tutorials/publish-pypi.md:198
msgid "Step 3. Setup your TestPyPI account"
msgstr "ステップ 3. TestPyPIアカウントをセットアップする"
-#: ../../tutorials/publish-pypi.md:198
+#: ../../tutorials/publish-pypi.md:200
msgid ""
"Next, you'll setup an account on TestPyPI. Remember that you are using "
"TestPyPI here instead of the real PyPI as a way to safely learn how to "
@@ -5172,11 +5209,11 @@ msgstr ""
"次に、TestPyPIのアカウントをセットアップします。 TestPyPIは本物のPyPIではなく、パッケージが準備できる前に誤ってパッケージを "
"\"リリース\" することなく、安全にパッケージを公開する方法を学ぶ方法として使用していることを忘れないでください。"
-#: ../../tutorials/publish-pypi.md:202
+#: ../../tutorials/publish-pypi.md:204
msgid "TestPyPI vs. PyPI"
msgstr "TestPyPI vs. PyPI"
-#: ../../tutorials/publish-pypi.md:203
+#: ../../tutorials/publish-pypi.md:205
msgid ""
"If you have a package that you are confident belongs on PyPI, all of the "
"steps below will also work for you. When you publish using Hatch, you "
@@ -5187,13 +5224,13 @@ msgstr ""
"を使って公開する場合、TestPyPI に公開する `hatch publish -r test` ではなく、直接 PyPI に公開する "
"`hatch publish` を呼び出します。"
-#: ../../tutorials/publish-pypi.md:206
+#: ../../tutorials/publish-pypi.md:208
msgid ""
"[Open up a web browser and go to the TestPyPI "
"website](https://test.pypi.org/)."
msgstr "[ウェブブラウザを開き、TestPyPIのウェブサイトにアクセスする](https://test.pypi.org/)."
-#: ../../tutorials/publish-pypi.md:207
+#: ../../tutorials/publish-pypi.md:209
msgid ""
"[Create an account](https://test.pypi.org/account/register/) if you don't"
" already have one. Be sure to store your password in a safe place!"
@@ -5202,11 +5239,11 @@ msgstr ""
"[アカウントを作成してください。](https://test.pypi.org/account/register/) "
"パスワードは必ず安全な場所に保管してください!"
-#: ../../tutorials/publish-pypi.md:208
+#: ../../tutorials/publish-pypi.md:210
msgid "Once you have an account setup, login to it."
msgstr "アカウントを設定したら、ログインしてください。"
-#: ../../tutorials/publish-pypi.md:209
+#: ../../tutorials/publish-pypi.md:211
msgid ""
"Search on [https://test.pypi.org/](https://test.pypi.org/) (and also on "
"[https://pypi.org/](https://pypi.org/)) to ensure that the package name "
@@ -5219,21 +5256,21 @@ msgstr ""
"、選択したパッケージ名がすでに存在しないことを確認してください。 "
"テスト用のpyosPackageを使う場合は、一意であることを保証するために、パッケージ名の最後に自分の名前かGitHubのユーザー名を追加することをお勧めします。"
-#: ../../tutorials/publish-pypi.md:211
+#: ../../tutorials/publish-pypi.md:213
msgid "Example: `pyosPackage_yourNameHere`."
msgstr "例: `pyosPackage_yourNameHere`."
-#: ../../tutorials/publish-pypi.md:213
+#: ../../tutorials/publish-pypi.md:215
msgid ""
"How to rename your Python package if the name is already taken in (test) "
"PyPI"
msgstr ""
-#: ../../tutorials/publish-pypi.md:217
+#: ../../tutorials/publish-pypi.md:219
msgid "Required"
msgstr "要件"
-#: ../../tutorials/publish-pypi.md:219
+#: ../../tutorials/publish-pypi.md:221
msgid ""
"Search your publishing location(s) to make sure your new name isn't taken"
" ([TestPyPI](https://test.pypi.org/), [PyPI](https://pypi.org/), [conda-"
@@ -5243,7 +5280,7 @@ msgstr ""
"([TestPyPI](https://test.pypi.org/), [PyPI](https://pypi.org/), [conda-"
"forge](https://conda-forge.org/packages/))"
-#: ../../tutorials/publish-pypi.md:220
+#: ../../tutorials/publish-pypi.md:222
msgid ""
"Update the project name in your pyproject.toml file (e.g. `name = "
"\"pyospackage_yourNameHere\"`)"
@@ -5251,39 +5288,39 @@ msgstr ""
"pyproject.toml ファイルのプロジェクト名を更新します (e.g. `name = "
"\"pyospackage_yourNameHere\"`)"
-#: ../../tutorials/publish-pypi.md:221
+#: ../../tutorials/publish-pypi.md:223
msgid ""
"Update the module folder name to be the same (e.g. "
"`src/pyospackage_yourNameHere`)"
msgstr "モジュールフォルダ名を同じに更新します (例: `src/pyospackage_yourNameHere`)"
-#: ../../tutorials/publish-pypi.md:222
+#: ../../tutorials/publish-pypi.md:224
msgid "Rebuild your project (`hatch build`)"
msgstr "プロジェクトの再ビルド (`hatch build`)"
-#: ../../tutorials/publish-pypi.md:223
+#: ../../tutorials/publish-pypi.md:225
msgid "Publish your package to capture the name (continue this tutorial!)"
msgstr "パッケージを公開して名前を取得する(このチュートリアルを続けましょう!)"
-#: ../../tutorials/publish-pypi.md:225
+#: ../../tutorials/publish-pypi.md:227
msgid "Recommended"
msgstr "おすすめ"
-#: ../../tutorials/publish-pypi.md:227
+#: ../../tutorials/publish-pypi.md:229
msgid "Update the GitHub repository name to align with the new package name"
msgstr "GitHubリポジトリ名を新しいパッケージ名に合わせて更新します"
-#: ../../tutorials/publish-pypi.md:228
+#: ../../tutorials/publish-pypi.md:230
msgid ""
"Update your local project folder to match the new package name (e.g. "
"`pyospackage_yourNameHere/src`)"
msgstr "ローカルのプロジェクトフォルダを新しいパッケージ名に合わせて更新します (例: `pyospackage_yourNameHere/src` )。"
-#: ../../tutorials/publish-pypi.md:229
+#: ../../tutorials/publish-pypi.md:231
msgid "Update mentions of your repository name in other files (e.g. `README.md`)"
msgstr "他のファイル (例えば `README.md` ) のリポジトリ名の記述を更新します。"
-#: ../../tutorials/publish-pypi.md:233
+#: ../../tutorials/publish-pypi.md:235
msgid ""
"This is a screenshot of the TestPyPI website. At the top in the search "
"bar, you can see the search for pyosPackage. The search return says there"
@@ -5292,18 +5329,18 @@ msgstr ""
"これはTestPyPIのウェブサイトのスクリーンショットです。 検索バーの一番上にpyosPackageの検索があります。pyosPackage "
"の検索結果はありませんでした。 probpackageのことですか?"
-#: ../../tutorials/publish-pypi.md:235
+#: ../../tutorials/publish-pypi.md:237
msgid ""
"Before you try to upload to TestPyPI, check to see if the name of your "
"package is already taken. You can do that using the search box at the top"
" of the TestPyPI website."
msgstr "TestPyPIにアップロードしようとする前に、あなたのパッケージの名前がすでに使われていないか確認してください。TestPyPIのウェブサイトの上部にある検索ボックスを使って検索することができます。"
-#: ../../tutorials/publish-pypi.md:239
+#: ../../tutorials/publish-pypi.md:241
msgid "Setup 2-factor (2FA) authentication"
msgstr "2ファクタ (2FA) 認証の設定"
-#: ../../tutorials/publish-pypi.md:241
+#: ../../tutorials/publish-pypi.md:243
msgid ""
"2-factor authentication is a secure login process that allows you to use "
"a backup device that only you can access to validate that the person "
@@ -5312,7 +5349,7 @@ msgid ""
"account."
msgstr "2要素認証とは、自分だけがアクセスできるバックアップデバイスを使用して、ログインする人が本当に自分であることを確認できる安全なログインプロセスです。他人がパスワードにアクセスし、あなたのアカウントにログインできるようにするパスワードフィッシングの問題に対処します。"
-#: ../../tutorials/publish-pypi.md:244
+#: ../../tutorials/publish-pypi.md:246
msgid ""
"This matters on PyPI because someone could login to your account and "
"upload a version of your package that has security issues. These issues "
@@ -5322,17 +5359,17 @@ msgstr ""
"なぜなら、誰かがあなたのアカウントにログインして、セキュリティ上の問題があるバージョンのパッケージをアップロードする可能性があるからです。 "
"これらの問題は、そのバージョンのパッケージをダウンロードしてインストールする際に、すべてのユーザーに影響を与えます。"
-#: ../../tutorials/publish-pypi.md:246
+#: ../../tutorials/publish-pypi.md:248
msgid ""
"2-factor authentication is required for PyPI authentication as of 1 "
"January 2024."
msgstr "2024年1月1日からPyPI認証に2要素認証が必要になりました。"
-#: ../../tutorials/publish-pypi.md:250
+#: ../../tutorials/publish-pypi.md:252
msgid "Step 4. Create a package upload token"
msgstr "ステップ4. パッケージアップロードトークンを作成する"
-#: ../../tutorials/publish-pypi.md:252
+#: ../../tutorials/publish-pypi.md:254
msgid ""
"To upload your package to TestPyPI (or PyPI), you will need to create a "
"token for your account first, and should then create a package-specific "
@@ -5342,11 +5379,11 @@ msgstr ""
"パッケージをTestPyPI (またはPyPI) にアップロードするには、まず自分のアカウントのトークンを作成する必要があります。 "
"(以前にこのステップを完了した場合は、パッケージを再度アップロードするときにトークンを再利用できます。)"
-#: ../../tutorials/publish-pypi.md:254
+#: ../../tutorials/publish-pypi.md:256
msgid "Why create package-specific tokens?"
msgstr "なぜパッケージ固有のトークンを作るのか?"
-#: ../../tutorials/publish-pypi.md:256
+#: ../../tutorials/publish-pypi.md:258
msgid ""
"It's ideal to create a package-specific token. When you create an "
"account-wide token this allows anyone with access to the account to then "
@@ -5359,61 +5396,61 @@ msgstr ""
" (またはPyPI) のすべてのプロジェクトにアクセスできるようになります。 "
"パッケージ固有のトークンを作成することで、トークンのスコープを特定のパッケージのみに限定することができます。これは、特にパッケージ開発で他の人と共同作業する場合に、安全な設定方法です。"
-#: ../../tutorials/publish-pypi.md:259
+#: ../../tutorials/publish-pypi.md:261
#, fuzzy
msgid "Follow the steps below to create your token"
msgstr "以下の手順に従ってトークンを作成してください。"
-#: ../../tutorials/publish-pypi.md:261
+#: ../../tutorials/publish-pypi.md:263
msgid "Login to TestPyPI and go to your account settings"
msgstr "TestPyPIにログインし、アカウント設定に進みます。"
-#: ../../tutorials/publish-pypi.md:262
+#: ../../tutorials/publish-pypi.md:264
msgid "Scroll down to the **API tokens** section"
msgstr "**APIトークン** のセクションまでスクロールダウンしてください"
-#: ../../tutorials/publish-pypi.md:263
+#: ../../tutorials/publish-pypi.md:265
msgid "Click on the **Add API Token** button"
msgstr "**APIトークンの追加** ボタンをクリックしてください"
-#: ../../tutorials/publish-pypi.md:264
+#: ../../tutorials/publish-pypi.md:266
msgid ""
"If you are new to using TestPyPI and don't have any packages there yet, "
"OR if you have other packages on TestPyPI but are uploading a new "
"package, you will need to create an account-wide token."
msgstr "TestPyPIを使うのが初めてで、まだパッケージを持っていない場合、またはTestPyPIに他のパッケージを持っていて、新しいパッケージをアップロードする場合、アカウントワイドトークンを作成する必要があります。"
-#: ../../tutorials/publish-pypi.md:265
+#: ../../tutorials/publish-pypi.md:267
msgid ""
"When you create your token, be sure to copy the token value and store it "
"in a secure place before closing that browser."
msgstr "トークンを作成したら、ブラウザを閉じる前に必ずトークンの値をコピーし、安全な場所に保管してください。"
-#: ../../tutorials/publish-pypi.md:267
+#: ../../tutorials/publish-pypi.md:269
msgid "Your token should look something like this:"
msgstr "あなたのトークンは次のようになるはずです:"
-#: ../../tutorials/publish-pypi.md:269
+#: ../../tutorials/publish-pypi.md:271
msgid "`pypi-abunchofrandomcharactershere...`"
msgstr "`pypi-abunchofrandomcharactershere...`"
-#: ../../tutorials/publish-pypi.md:271
+#: ../../tutorials/publish-pypi.md:273
msgid "It should start with `pypi` followed by a dash and a bunch of characters."
msgstr "`pypi` で始まり、ダッシュとたくさんの文字が続くはずです。"
-#: ../../tutorials/publish-pypi.md:273
+#: ../../tutorials/publish-pypi.md:275
msgid "Upload to TestPyPI using Hatch"
msgstr "Hatchを使用してTestPyPIにアップロードする"
-#: ../../tutorials/publish-pypi.md:275
+#: ../../tutorials/publish-pypi.md:277
msgid "Once you have your token, you are ready to publish to TestPyPI."
msgstr "トークンを取得したら、TestPyPIに公開する準備ができました。"
-#: ../../tutorials/publish-pypi.md:278
+#: ../../tutorials/publish-pypi.md:280
msgid "Run `hatch publish -r test`"
msgstr "`hatch publish -r test` を実行します"
-#: ../../tutorials/publish-pypi.md:280
+#: ../../tutorials/publish-pypi.md:282
msgid ""
"`-r` stands for repository. In this case because you are publishing to "
"TestPyPI you will use `-r test`. Hatch will then ask for a username and "
@@ -5422,17 +5459,17 @@ msgstr ""
"`-r` はリポジトリを意味します。この場合、TestPyPIに公開するため、 `-r test` を使用します。 "
"その後、Hatchはユーザー名と認証情報を要求します。"
-#: ../../tutorials/publish-pypi.md:282
+#: ../../tutorials/publish-pypi.md:284
msgid ""
"Add the word `__token__` for your username. This tells TestPyPI that you "
"are using a token value rather than a username."
msgstr "ユーザー名には `__token__` を追加してください。これはTestPyPIに、ユーザ名ではなくトークンの値を使用していることを伝えます。"
-#: ../../tutorials/publish-pypi.md:283
+#: ../../tutorials/publish-pypi.md:285
msgid "Paste your TestPyPI token value in at the `Enter your credentials` prompt:"
msgstr "`Enter your credentials` プロンプトで TestPyPI トークンの値を貼り付けます:"
-#: ../../tutorials/publish-pypi.md:294
+#: ../../tutorials/publish-pypi.md:296
msgid ""
"If your credentials are valid, and you have already run `hatch build` and"
" thus have your 2 distribution files in a `dist/` directory then Hatch "
@@ -5441,24 +5478,24 @@ msgstr ""
"あなたの認証情報が有効で、すでに `hatch build` を実行し、2つの配布ファイルが `dist/` ディレクトリにあれば、Hatch "
"はあなたのパッケージを TestPyPI に公開します。"
-#: ../../tutorials/publish-pypi.md:298
+#: ../../tutorials/publish-pypi.md:300
msgid ""
"Hatch also has a caching system so once you enter your credentials it "
"will remember them."
msgstr "Hatchにはキャッシュシステムもあり、一度入力した認証情報は記憶されます。"
-#: ../../tutorials/publish-pypi.md:301
+#: ../../tutorials/publish-pypi.md:303
msgid "Install your package from TestPyPI"
msgstr "TestPyPIからパッケージをインストールする"
-#: ../../tutorials/publish-pypi.md:303
+#: ../../tutorials/publish-pypi.md:305
msgid ""
"Once your package upload is complete, you can install it from TestPyPI. "
"You can find the installation instructions on the TestPyPI landing page "
"for your newly uploaded package."
msgstr "パッケージのアップロードが完了したら、TestPyPIからインストールできます。新しくアップロードしたパッケージのTestPyPIランディングページにインストール手順があります。"
-#: ../../tutorials/publish-pypi.md:308
+#: ../../tutorials/publish-pypi.md:310
msgid ""
"A screenshot of the TestPyPI page for pyosPackage. It says pyosPackage "
"0.1.0 at the top with the pip install instructions below. The landing "
@@ -5468,7 +5505,7 @@ msgstr ""
"0.1.0と書いてあり、その下にpipのインストール方法が書いてあります。 "
"パッケージのランディングページには、パッケージのREADMEファイルからの情報があります。"
-#: ../../tutorials/publish-pypi.md:310
+#: ../../tutorials/publish-pypi.md:312
msgid ""
"This is an example landing page for the pyosPackage that was just "
"uploaded. Notice at the top of the page there are instructions for how to"
@@ -5479,7 +5516,7 @@ msgstr ""
"ページの一番上に、TestPyPIからパッケージをインストールする方法の説明があります。 "
"そのコードをコピーし、それを使ってTestPyPIからパッケージをローカルにインストールするだけです。"
-#: ../../tutorials/publish-pypi.md:313
+#: ../../tutorials/publish-pypi.md:315
msgid ""
"As an example, [check out our pyOpenSci pyosPackage landing page on "
"TestPyPI](https://test.pypi.org/project/pyosPackage/). Notice that the "
@@ -5490,11 +5527,11 @@ msgstr ""
"pyosPackageランディングページをご覧ください](https://test.pypi.org/project/pyosPackage/) "
"。 このページには、現在のパッケージのバージョンに関する情報と、次のようなインストール手順が記載されていることに注意してください:"
-#: ../../tutorials/publish-pypi.md:317
+#: ../../tutorials/publish-pypi.md:319
msgid "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
msgstr "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
-#: ../../tutorials/publish-pypi.md:320
+#: ../../tutorials/publish-pypi.md:322
msgid ""
"Publishing to TestPyPI vs PyPI While you can install from TestPyPI it's "
"not recommended that you publish to TestPyPI as a permanent way to "
@@ -5507,17 +5544,17 @@ msgstr ""
"TestPyPIへの公開 vs PyPI "
"TestPyPIからインストールすることはできますが、パッケージをインストールする恒久的な方法としてTestPyPIに公開することはお勧めしません。なぜなら、TestPyPIは時間が経つとアカウントを削除するかもしれないからです。TestPyPIは、パッケージを公開し、インストールプロセスをテストする方法を学ぶのに最適な場所です。しかし、最終的なゴールは、ワークフローを把握し、パッケージがデプロイできる状態になったら、PyPIに公開することです。"
-#: ../../tutorials/publish-pypi.md:324
+#: ../../tutorials/publish-pypi.md:326
msgid "Time to install your package"
msgstr "パッケージのインストール"
-#: ../../tutorials/publish-pypi.md:326
+#: ../../tutorials/publish-pypi.md:328
msgid ""
"On your computer, activate the development environment that you wish to "
"install your newly published package in."
msgstr "お使いのコンピューターで、新しく公開するパッケージをインストールする開発環境をアクティブにします。"
-#: ../../tutorials/publish-pypi.md:328
+#: ../../tutorials/publish-pypi.md:330
msgid "Run the installation instructions for your package from TestPyPI."
msgstr "TestPyPIからパッケージのインストール手順を実行します。"
@@ -5529,11 +5566,11 @@ msgstr "Conda"
msgid "venv Mac / Linux"
msgstr "venv Mac / Linux"
-#: ../../tutorials/publish-pypi.md:352
+#: ../../tutorials/publish-pypi.md:354
msgid "The value of end-to-end tools like hatch, flit and poetry"
msgstr "hatch、flit、poetryといったエンドツーエンドツールの価値"
-#: ../../tutorials/publish-pypi.md:353
+#: ../../tutorials/publish-pypi.md:355
msgid ""
"In this lesson you are using Hatch and hatchling to create, build and "
"publish your Python package. [Click here to learn about other packaging "
@@ -5544,7 +5581,7 @@ msgstr ""
"[エコシステム内の他のパッケージングツールについては、こちらをクリックしてください。](../package-structure-code"
"/python-package-build-tools.md)"
-#: ../../tutorials/publish-pypi.md:357
+#: ../../tutorials/publish-pypi.md:359
msgid ""
"teach them to setup trusted publisher for actions... in the actions "
"lesson https://pypi.org/help/#twofa"
@@ -5552,7 +5589,7 @@ msgstr ""
"actionsのレッスン https://pypi.org/help/#twofa "
"で、信頼できるactionsのパブリッシャーを設定することを教えます..."
-#: ../../tutorials/publish-pypi.md:360
+#: ../../tutorials/publish-pypi.md:362
msgid ""
"from PyPI: https://pypi.org/help/#apitoken - You can create a token for "
"an entire PyPI account, in which case, the token will work for all "
@@ -5563,17 +5600,17 @@ msgstr ""
"PyPIアカウント全体に対してトークンを作成することができ、その場合、トークンはそのアカウントに関連付けられているすべてのプロジェクトで動作します。"
" また、トークンの範囲を特定のプロジェクトに限定することもできます。"
-#: ../../tutorials/publish-pypi.md:363
+#: ../../tutorials/publish-pypi.md:365
msgid "Package-specific token vs trusted publisher"
msgstr "パッケージ固有のトークンと信頼できるパブリッシャー"
-#: ../../tutorials/publish-pypi.md:365
+#: ../../tutorials/publish-pypi.md:367
msgid ""
"For long run maintenance of your package, you have two options related to"
" PyPI publication."
msgstr "パッケージの長期的なメンテナンスのために、PyPI公開に関する2つのオプションがあります。"
-#: ../../tutorials/publish-pypi.md:368
+#: ../../tutorials/publish-pypi.md:370
msgid ""
"You can create a package-specific token which you will use to publish "
"your package (manually) to PyPI. This is a great option if you don't wish"
@@ -5582,7 +5619,7 @@ msgstr ""
"PyPIにパッケージを (手動で) "
"公開する際に使用する、パッケージ固有のトークンを作成することができます。これはPyPI公開のワークフローを自動化したくない場合に最適なオプションです。"
-#: ../../tutorials/publish-pypi.md:369
+#: ../../tutorials/publish-pypi.md:371
msgid ""
"You can also create an automated publication workflow on GitHub using "
"GitHub Actions. This is a great way to make the publication process "
@@ -5596,26 +5633,26 @@ msgstr ""
"この場合、トークンのことは気にせず、リリース時にパッケージを公開する GitHub Actionsを設定することをお勧めします。 "
"その後、PyPIで \"trusted publisher\" ワークフローを作成することができます。"
-#: ../../tutorials/publish-pypi.md:371
+#: ../../tutorials/publish-pypi.md:373
#, fuzzy
msgid "Trusted Publishing"
msgstr "パッケージパブリッシング"
-#: ../../tutorials/publish-pypi.md:374
+#: ../../tutorials/publish-pypi.md:376
msgid ""
"While publishing from GitHub Action is possible using tokens, we "
"recommend the _Trusted Publishing_ approach as it also confers "
"significant security and usability benefits."
msgstr ""
-#: ../../tutorials/publish-pypi.md:376
+#: ../../tutorials/publish-pypi.md:378
msgid ""
"On the usability front, when Trusted Publishing is enabled, users no "
"longer need to manually create API tokens on PyPI and store them in the "
"GitHub release workflow."
msgstr ""
-#: ../../tutorials/publish-pypi.md:378
+#: ../../tutorials/publish-pypi.md:380
msgid ""
"On the security front, Trusted Publishing reduces a risk related to the "
"API token being long lived: with API tokens, as soon as an attacker gets "
@@ -5625,70 +5662,70 @@ msgid ""
"problem by minting very short lived tokens which expire automatically."
msgstr ""
-#: ../../tutorials/publish-pypi.md:380
+#: ../../tutorials/publish-pypi.md:382
msgid ""
"For these benefits, it is recommended that users use _only_ the GitHub "
"Actions release workflow to publish packages."
msgstr ""
-#: ../../tutorials/publish-pypi.md:383
+#: ../../tutorials/publish-pypi.md:385
msgid ""
"You will learn how to create the automated trusted publisher workflow in "
"a followup lesson."
msgstr "自動化された信頼できるパブリッシャーワークフローの作成方法については、次のレッスンで学びます。"
-#: ../../tutorials/publish-pypi.md:385
+#: ../../tutorials/publish-pypi.md:387
msgid "OPTIONAL: If you want to use a manual token-based publication workflow"
msgstr "オプション: 手動トークンベースの発行ワークフローを使用する場合"
-#: ../../tutorials/publish-pypi.md:387
+#: ../../tutorials/publish-pypi.md:389
msgid ""
"If you plan to use your token regularly to publish to PyPI, we strongly "
"recommend going through the above steps again to create a token specific "
"to your new package."
msgstr "トークンを定期的に使ってPyPIに公開する予定がある場合、新しいパッケージに固有のトークンを作成するために、上記の手順をもう一度行うことを強くお勧めします。"
-#: ../../tutorials/publish-pypi.md:390
+#: ../../tutorials/publish-pypi.md:392
msgid "To do this:"
msgstr "そのためには:"
-#: ../../tutorials/publish-pypi.md:391
+#: ../../tutorials/publish-pypi.md:393
msgid "Go to TestPyPI."
msgstr "TestPyPIに行きます。"
-#: ../../tutorials/publish-pypi.md:392
+#: ../../tutorials/publish-pypi.md:394
msgid "Navigate to the \"Your Projects\" section of your account"
msgstr "アカウントの \"Your Projects\" セクションに移動します"
-#: ../../tutorials/publish-pypi.md:393
+#: ../../tutorials/publish-pypi.md:395
msgid ""
"Click on the manage button for the project that you wish to add a token "
"for"
msgstr "トークンを追加したいプロジェクトの管理ボタンをクリックします"
-#: ../../tutorials/publish-pypi.md:394
+#: ../../tutorials/publish-pypi.md:396
msgid "Go to settings"
msgstr "設定に進む"
-#: ../../tutorials/publish-pypi.md:395
+#: ../../tutorials/publish-pypi.md:397
msgid "Click on \"Create a token for your-package-name-here\""
msgstr "\"パッケージ名のトークンを作成する\" をクリックします"
-#: ../../tutorials/publish-pypi.md:396
+#: ../../tutorials/publish-pypi.md:398
msgid ""
"Create the token and follow the steps above publish your package using "
"the repository specific token."
msgstr "トークンを作成し、上記の手順に従って、リポジトリ固有のトークンを使用してパッケージを公開します。"
-#: ../../tutorials/publish-pypi.md:398
+#: ../../tutorials/publish-pypi.md:400
msgid "And you're all done!"
msgstr "そして、すべて終わりました!"
-#: ../../tutorials/publish-pypi.md:400
+#: ../../tutorials/publish-pypi.md:402
msgid "Trusted Publishing instead of token-based publication"
msgstr ""
-#: ../../tutorials/publish-pypi.md:403
+#: ../../tutorials/publish-pypi.md:405
msgid ""
"Trusted Publishing will generate short lived tokens, scoped to the "
"project, on demand, only when a specific release workflows gets "
@@ -5696,11 +5733,11 @@ msgid ""
"with storing credentials in files/GitHub secrets."
msgstr ""
-#: ../../tutorials/publish-pypi.md:409
+#: ../../tutorials/publish-pypi.md:411
msgid "You have published your package to TestPyPI!"
msgstr "あなたはTestPyPIにパッケージを公開しました!"
-#: ../../tutorials/publish-pypi.md:411
+#: ../../tutorials/publish-pypi.md:413
msgid ""
"Congratulations. You have now successfully published your package to "
"TestPyPI. If you have a package that is ready for real-world use on the "
@@ -5710,7 +5747,7 @@ msgstr ""
"おめでとうございます。これで、TestPyPIへのパッケージの公開が成功しました。実際のPyPIで利用できる準備が整ったパッケージがあれば、同じ手順で"
" (上記の違いはありますが) PyPIに公開することができます。"
-#: ../../tutorials/publish-pypi.md:413
+#: ../../tutorials/publish-pypi.md:415
msgid ""
"Once you publish on PyPI, you can then easily add your package to the "
"conda-forge ecosystem using the [grayskull](https://conda-"
@@ -5720,11 +5757,11 @@ msgstr ""
"forge.org/blog/posts/2020-03-05-grayskull/) ツールを使って簡単にconda-"
"forgeエコシステムにパッケージを追加できます。"
-#: ../../tutorials/publish-pypi.md:415
+#: ../../tutorials/publish-pypi.md:417
msgid "You will learn how to do that in the next lesson."
msgstr "その方法は次のレッスンで学習します。"
-#: ../../tutorials/publish-pypi.md:419
+#: ../../tutorials/publish-pypi.md:421
msgid "https://docs.python.org/3/library/venv.html"
msgstr "https://docs.python.org/3/library/venv.html"
@@ -5733,37 +5770,38 @@ msgid "Make your Python package PyPI ready - pyproject.toml"
msgstr "PythonパッケージをPyPIに対応させる - pyproject.toml"
#: ../../tutorials/pyproject-toml.md:8
+#, fuzzy
msgid ""
"In [the installable code lesson](create-python-package), you learned how "
"to add the bare minimum information to a `pyproject.toml` file to make it"
-" installable. You then learned how to [publish a bare minimum version of "
-"your package to PyPI](publish-pypi.md)."
+" installable. You then learned how to publish a bare minimum version of "
+"your package to [PyPI](publish-pypi)."
msgstr ""
"[インストール可能なコードのレッスン](create-python-package) では、 `pyproject.toml` "
"ファイルに最低限の情報を追加してインストール可能にする方法を学びました。その後、 [PyPIにパッケージの最小限のバージョンを公開する"
"](publish-pypi.md) 方法を学びました。"
-#: ../../tutorials/pyproject-toml.md:10
+#: ../../tutorials/pyproject-toml.md:13
msgid "Following that you learned how to add a:"
msgstr "それに続いて、あなたは以下の追加方法を学びました:"
-#: ../../tutorials/pyproject-toml.md:11
+#: ../../tutorials/pyproject-toml.md:14
msgid "[README.md](add-readme)"
msgstr "[README.md](add-readme)"
-#: ../../tutorials/pyproject-toml.md:12
+#: ../../tutorials/pyproject-toml.md:15
msgid "[LICENSE](add-license-coc) and"
msgstr "[LICENSE](add-license-coc) と"
-#: ../../tutorials/pyproject-toml.md:13
+#: ../../tutorials/pyproject-toml.md:16
msgid "[CODE_OF_CONDUCT](add-coc)"
msgstr "[CODE_OF_CONDUCT](add-coc)"
-#: ../../tutorials/pyproject-toml.md:15
+#: ../../tutorials/pyproject-toml.md:18
msgid "to the root of your project directory."
msgstr "プロジェクトディレクトリのルートに。"
-#: ../../tutorials/pyproject-toml.md:17
+#: ../../tutorials/pyproject-toml.md:20
msgid ""
"To enhance the visibility of your package on PyPI and provide more "
"information about its compatibility with Python versions, project "
@@ -5775,19 +5813,19 @@ msgstr ""
"のバージョンとの互換性、プロジェクトの開発状況、プロジェクトのメンテナーについてより多くの情報を提供するために、 `pyproject.toml`"
" ファイルに追加のメタデータを追加する必要があります。このレッスンでは、そのプロセスについて説明します。"
-#: ../../tutorials/pyproject-toml.md:29
+#: ../../tutorials/pyproject-toml.md:32
msgid ""
"More about the `pyproject.toml` file and how it's used to store different"
" types of metadata about your package"
msgstr "`pyproject.toml` ファイルの詳細と、パッケージに関するさまざまな種類のメタデータを格納するためにどのように使用されるかについて"
-#: ../../tutorials/pyproject-toml.md:30
+#: ../../tutorials/pyproject-toml.md:33
msgid ""
"How to declare information (metadata) about your project to help users "
"find and understand it on PyPI."
msgstr "ユーザーがPyPIでプロジェクトを見つけ、理解しやすくするために、プロジェクトに関する情報 (メタデータ) を宣言する方法。"
-#: ../../tutorials/pyproject-toml.md:32
+#: ../../tutorials/pyproject-toml.md:35
msgid ""
"If you wish to learn more about the `pyproject.toml` format, [check out "
"this page. ](../package-structure-code/pyproject-toml-python-package-"
@@ -5800,25 +5838,25 @@ msgstr ""
msgid "Click for lesson takeaways"
msgstr "レッスンのポイントはこちら"
-#: ../../tutorials/pyproject-toml.md:39
+#: ../../tutorials/pyproject-toml.md:42
msgid "When creating your pyproject.toml file, consider the following:"
msgstr "pyproject.tomlファイルを作成する際、以下を考慮してください:"
-#: ../../tutorials/pyproject-toml.md:41
+#: ../../tutorials/pyproject-toml.md:44
msgid ""
"There are only two required metadata tables that you need to install and "
"publish your Python package:"
msgstr "Python パッケージをインストールして公開するために必要なメタデータテーブルは 2 つだけです:"
-#: ../../tutorials/pyproject-toml.md:42
+#: ../../tutorials/pyproject-toml.md:45
msgid "**[build-system]**"
msgstr "**[build-system]**"
-#: ../../tutorials/pyproject-toml.md:43
+#: ../../tutorials/pyproject-toml.md:46
msgid "**[project]**."
msgstr "**[project]**."
-#: ../../tutorials/pyproject-toml.md:44
+#: ../../tutorials/pyproject-toml.md:47
msgid ""
"The **[project]** table stores your package's metadata. Within the "
"**[project]** table, There are only two _required_ fields:"
@@ -5826,15 +5864,15 @@ msgstr ""
"**[project]** テーブルには、パッケージのメタデータが格納されます。 **[project]** テーブルの中で、 _必須_ "
"フィールドは2つだけです:"
-#: ../../tutorials/pyproject-toml.md:45
+#: ../../tutorials/pyproject-toml.md:48
msgid "**name=**"
msgstr "**name=**"
-#: ../../tutorials/pyproject-toml.md:46
+#: ../../tutorials/pyproject-toml.md:49
msgid "**version=**"
msgstr "**version=**"
-#: ../../tutorials/pyproject-toml.md:47
+#: ../../tutorials/pyproject-toml.md:50
msgid ""
"You should add more metadata to the `[project]` table as it will make it "
"easier for users to find your project on PyPI. And it will also make it "
@@ -5843,7 +5881,7 @@ msgstr ""
"ユーザーがPyPIであなたのプロジェクトを見つけやすくなるので、 `[project]` "
"テーブルにもっとメタデータを追加するべきです。また、インストーラがあなたのパッケージのインストール方法を理解しやすくなります。"
-#: ../../tutorials/pyproject-toml.md:48
+#: ../../tutorials/pyproject-toml.md:51
msgid ""
"When you are adding classifiers to the **[project]** table, only use "
"valid values from [PyPI's classifier "
@@ -5854,7 +5892,7 @@ msgstr ""
"[PyPIの分類ページ](https://PyPI.org/classifiers/) にある有効な値のみを使用してください。 "
"ここで無効な値を指定すると、パッケージをビルドするときやPyPIに公開するときにエラーが発生します。"
-#: ../../tutorials/pyproject-toml.md:49
+#: ../../tutorials/pyproject-toml.md:52
msgid ""
"There is no specific order for tables in the `pyproject.toml` file. "
"However, fields need to be placed within the correct tables. For example "
@@ -5863,36 +5901,35 @@ msgstr ""
"`pyproject.toml` ファイル内のテーブルには特定の順番はありません。 しかし、フィールドは正しいテーブルに配置する必要があります。 "
"例えば `requires =` は常に **[build-system]** テーブルにある必要があります。"
-#: ../../tutorials/pyproject-toml.md:50
+#: ../../tutorials/pyproject-toml.md:53
msgid ""
"We suggest that you include your **[build-system]** table at the top of "
"your `pyproject.toml` file."
msgstr "**[build-system]** テーブルを `pyproject.toml` ファイルの先頭に含めることをお勧めします。"
-#: ../../tutorials/pyproject-toml.md:55
+#: ../../tutorials/pyproject-toml.md:58
msgid ""
"The `pyproject.toml` file is a human and machine-readable file that "
"serves as the primary configuration file for your Python package."
msgstr "`pyproject.toml` ファイルは人間や機械が読めるファイルで、Pythonパッケージの主要な設定ファイルとして機能します。"
-#: ../../tutorials/pyproject-toml.md:59
+#: ../../tutorials/pyproject-toml.md:63
msgid ""
"[Building your package](build-package) is the step that created the "
"distribution files that are required for you to publish to PyPI."
msgstr "[パッケージのビルド](build-package) は、PyPIに公開するために必要な配布ファイルを作成するステップです。"
-#: ../../tutorials/pyproject-toml.md:63
+#: ../../tutorials/pyproject-toml.md:67
msgid "About the .toml format"
msgstr ".toml フォーマットについて"
-#: ../../tutorials/pyproject-toml.md:65
+#: ../../tutorials/pyproject-toml.md:69
+#, fuzzy, python-brace-format
msgid ""
-"The **pyproject.toml** file is written in [TOML (Tom's Obvious, Minimal "
-"Language) format](https://toml.io/en/). TOML is an easy-to-read structure"
-" that is based on key/value pairs. Each section in the **pyproject.toml**"
-" file contains a `[table identifier]`. The TOML format can be compared to"
-" other structured formats such as`.json`. However, the TOML format was "
-"designed to be easier to read for humans."
+"The **pyproject.toml** file is written in {term}`TOML` format. TOML is an"
+" easy-to-read structure that is based on key/value pairs. Each section in"
+" the **pyproject.toml** file contains a `[table identifier]`. The TOML "
+"format can be compared to other structured formats such as `.json`."
msgstr ""
"**pyproject.toml** ファイルは [TOML (Tom's Obvious, Minimal Language) "
"format](https://toml.io/en/) で書かれています。TOMLは、キーと値のペアに基づいた読みやすい構造です。 "
@@ -5900,13 +5937,13 @@ msgstr ""
"が含まれています。TOMLフォーマットは、 `.json` "
"などの他の構造化フォーマットと比較することができます。しかし、TOMLフォーマットは人間が読みやすいように設計されています。"
-#: ../../tutorials/pyproject-toml.md:67
+#: ../../tutorials/pyproject-toml.md:74
msgid ""
"Below you can see the `[build-system]` table. Within that table there are"
" two required key/value pairs."
msgstr "以下に `[build-system]` テーブルを示す。そのテーブルの中には、2つのキーと値のペアが必要です。"
-#: ../../tutorials/pyproject-toml.md:70
+#: ../../tutorials/pyproject-toml.md:77
msgid ""
"`requires =` is the key and the value is `[\"hatchling\"]` within the "
"`[build-system]` array specified by square brackets `[]`."
@@ -5914,46 +5951,48 @@ msgstr ""
"`requires =` がキーで、値は角括弧 `[]` で指定された `[build-system]` 配列内の "
"`[\"hatchling\"]` です。"
-#: ../../tutorials/pyproject-toml.md:80
+#: ../../tutorials/pyproject-toml.md:87
msgid "What is the pyproject.toml used for?"
msgstr "pyproject.tomlは何に使うのですか?"
-#: ../../tutorials/pyproject-toml.md:82
+#: ../../tutorials/pyproject-toml.md:89
msgid "The pyproject.toml file tells your build tool:"
msgstr "pyproject.tomlファイルは、ビルドツールに次のように指示します:"
-#: ../../tutorials/pyproject-toml.md:84
+#: ../../tutorials/pyproject-toml.md:91
+#, fuzzy, python-brace-format
msgid ""
-"What build backend to use to build your package (we are using `hatchling`"
-" in this tutorial but there are [many others to choose from](/package-"
-"structure-code/python-package-build-tools))."
+"What {term}`Build backend` to use to build your package (we are using "
+"{term}`Hatchling` in this tutorial but there are [many others to choose "
+"from](/package-structure-code/python-package-build-tools))."
msgstr ""
"パッケージのビルドに使用するビルドバックエンド (このチュートリアルでは `hatchling` を使用していますが、 [他にも多くの選択肢"
"](/package-structure-code/python-package-build-tools) があります)。"
-#: ../../tutorials/pyproject-toml.md:85
+#: ../../tutorials/pyproject-toml.md:94
msgid "How and where to retrieve your package's version:"
msgstr "パッケージのバージョンの取得方法と場所:"
-#: ../../tutorials/pyproject-toml.md:86
+#: ../../tutorials/pyproject-toml.md:95
msgid "**statically** where you declare the version `version = \"0.1.0\"` or"
msgstr "**静的** ここで、バージョン `version = \"0.1.0\"` または"
-#: ../../tutorials/pyproject-toml.md:87
+#: ../../tutorials/pyproject-toml.md:96
msgid ""
"**dynamically** where the tool looks to the most recent tag in your "
"history to determine the current version."
msgstr "**動的** このツールは、現在のバージョンを決定するために、履歴の最新のタグを検索します。"
-#: ../../tutorials/pyproject-toml.md:88
-msgid "What dependencies your package needs"
+#: ../../tutorials/pyproject-toml.md:97
+#, fuzzy, python-brace-format
+msgid "What {term}`Dependencies` your package needs"
msgstr "パッケージが必要とする依存関係"
-#: ../../tutorials/pyproject-toml.md:89
+#: ../../tutorials/pyproject-toml.md:98
msgid "What versions of Python your package supports (important for your users)."
msgstr "パッケージがサポートするPythonのバージョン (ユーザーにとって重要)。"
-#: ../../tutorials/pyproject-toml.md:91
+#: ../../tutorials/pyproject-toml.md:100
msgid ""
"The `pyproject.toml` file also makes it easy for anyone browsing your "
"GitHub repository to quickly understand your package's structure such as:"
@@ -5961,23 +6000,23 @@ msgstr ""
"また、 `pyproject.toml` ファイルを使うことで、GitHub "
"リポジトリを閲覧している人が次のようなパッケージの構造をすぐに理解できるようになります:"
-#: ../../tutorials/pyproject-toml.md:94
+#: ../../tutorials/pyproject-toml.md:103
msgid "How your package is built,"
msgstr "パッケージの作り方、"
-#: ../../tutorials/pyproject-toml.md:95
+#: ../../tutorials/pyproject-toml.md:104
msgid "What Python versions and operating systems it supports"
msgstr "サポートするPythonのバージョンとオペレーティングシステム"
-#: ../../tutorials/pyproject-toml.md:96
+#: ../../tutorials/pyproject-toml.md:105
msgid "What it does,"
msgstr "何をするのか?"
-#: ../../tutorials/pyproject-toml.md:97
+#: ../../tutorials/pyproject-toml.md:106
msgid "Who maintains it"
msgstr "誰がメンテナンスするのか"
-#: ../../tutorials/pyproject-toml.md:99
+#: ../../tutorials/pyproject-toml.md:108
msgid ""
"Finally, the pyproject.toml file is also often used to configure tools "
"such as static type checkers (e.g. mypy) and code formatters/linters "
@@ -5986,7 +6025,7 @@ msgstr ""
"最後に、pyproject.tomlファイルは、静的タイプチェッカー (mypyなど) やコードフォーマッタ/リンタ (blackやruffなど)"
" のようなツールを設定するためにもよく使われます。"
-#: ../../tutorials/pyproject-toml.md:102
+#: ../../tutorials/pyproject-toml.md:111
msgid ""
"Check out the [PyPA "
"documentation](https://packaging.python.org/en/latest/tutorials"
@@ -5997,7 +6036,7 @@ msgstr ""
"[PyPAのドキュメント](https://packaging.python.org/en/latest/tutorials/packaging-"
"projects/#choosing-a-build-backend) をチェックしてください。"
-#: ../../tutorials/pyproject-toml.md:104
+#: ../../tutorials/pyproject-toml.md:113
msgid ""
"Note that some build tools may deviate in how they store project "
"metadata. As such you may want to refer to their documentation if you "
@@ -6008,11 +6047,11 @@ msgstr ""
"ビルドツールによっては、プロジェクトのメタデータを保存する方法が異なる場合があります。そのため、Hatch "
"とhatchling以外のツールを使用する場合は、それらのドキュメントを参照することをお勧めします。このチュートリアルでは、PyPAのルールとガイドラインに準拠したツールであるhatchlingとhatchを選択しました。"
-#: ../../tutorials/pyproject-toml.md:108
+#: ../../tutorials/pyproject-toml.md:117
msgid "How is pyproject.toml metadata used?"
msgstr "pyproject.tomlのメタデータはどのように使用されますか?"
-#: ../../tutorials/pyproject-toml.md:110
+#: ../../tutorials/pyproject-toml.md:119
msgid ""
"The pyproject.toml file is the file that your build tool uses to populate"
" a `METADATA` that is included in your Python distribution files that get"
@@ -6024,7 +6063,7 @@ msgstr ""
"を生成するためにビルドツールが使用するファイルです。 この `METADATA` ファイルは、PyPI によってあなたのパッケージの PyPI "
"ランディングページに入力され、そこで公開されている何万ものパッケージの中からユーザをフィルタリングするのに使われます。"
-#: ../../tutorials/pyproject-toml.md:113
+#: ../../tutorials/pyproject-toml.md:122
msgid ""
"Image showing the left side bar of PyPI for the package xclim. The "
"section at the top says Classifier. Below there is a list of items "
@@ -6035,7 +6074,7 @@ msgstr ""
"xclimパッケージのPyPI左サイドバーの画像です。一番上のセクションにはClassifierとあります。その下に、開発状況、対象読者、ライセンス、自然言語、オペレーティングシステム、プログラミング言語、トピックなどの項目があります。"
" これらの各セクションの下には、さまざまな分類オプションがあります。 \" width=\"300px\">"
-#: ../../tutorials/pyproject-toml.md:118
+#: ../../tutorials/pyproject-toml.md:127
msgid ""
"When you add the classifier section to your pyproject.toml and your "
"package is built, the build tool organizes the metadata into a format "
@@ -6046,11 +6085,11 @@ msgstr ""
"pyproject.tomlにclassifierセクションを追加してパッケージがビルドされると、ビルドツールはメタデータをPyPIが理解できる形式に整理し、PyPIのランディングページに表示します。"
" これらの分類子により、ユーザはサポートするpythonのバージョンやカテゴリなどでパッケージをソートすることもできます。"
-#: ../../tutorials/pyproject-toml.md:124
+#: ../../tutorials/pyproject-toml.md:133
msgid "A more in-depth overview of pyproject.toml files"
msgstr "pyproject.tomlファイルのより詳細な概要"
-#: ../../tutorials/pyproject-toml.md:126
+#: ../../tutorials/pyproject-toml.md:135
msgid ""
"[Our guidebook page has a more in depth overview of this file"
"](../package-structure-code/pyproject-toml-python-package-metadata/)"
@@ -6058,31 +6097,31 @@ msgstr ""
"[ガイドブックページでは、このファイルについてより詳しく説明しています](../package-structure-code/pyproject-"
"toml-python-package-metadata/)"
-#: ../../tutorials/pyproject-toml.md:129
+#: ../../tutorials/pyproject-toml.md:138
msgid "How to update your pyproject.toml file"
msgstr "pyproject.tomlファイルを更新する方法"
-#: ../../tutorials/pyproject-toml.md:131
+#: ../../tutorials/pyproject-toml.md:140
msgid ""
"In the last lesson, you created a bare-bones pyproject.toml file that "
"contained the core elements needed to build your package:"
msgstr "最後のレッスンでは、パッケージのビルドに必要なコア要素を含む、素のpyproject.tomlファイルを作成しました:"
-#: ../../tutorials/pyproject-toml.md:135
+#: ../../tutorials/pyproject-toml.md:144
msgid ""
"A `[build-system]` table where you defined your project's backend build "
"tool (`hatchling`)"
msgstr "プロジェクトのバックエンドビルドツールを定義した `[build-system]` テーブル (`hatchling`)"
-#: ../../tutorials/pyproject-toml.md:136
+#: ../../tutorials/pyproject-toml.md:145
msgid "A `[project]` table where you defined your project's version and name."
msgstr "プロジェクトのバージョンと名前を定義した `[project]` テーブル。"
-#: ../../tutorials/pyproject-toml.md:138
+#: ../../tutorials/pyproject-toml.md:147
msgid "The `pyproject.toml` file that you created, looked like this:"
msgstr "あなたが作成した `pyproject.toml` ファイルは次のようなものです:"
-#: ../../tutorials/pyproject-toml.md:150
+#: ../../tutorials/pyproject-toml.md:159
msgid ""
"Your next step is to add additional recommended metadata fields that will"
" both help users find your package on PyPI and also better describe the "
@@ -6095,19 +6134,19 @@ msgstr ""
"一度このメタデータを追加すれば、もう二度と追加する必要はありません。 "
"これらのメタデータ・フィールドが定期的に更新されるのは、あなたが次のようなことをしたときだけです:"
-#: ../../tutorials/pyproject-toml.md:153
+#: ../../tutorials/pyproject-toml.md:162
msgid "drop a package dependency"
msgstr "パッケージ依存の削除"
-#: ../../tutorials/pyproject-toml.md:154
+#: ../../tutorials/pyproject-toml.md:163
msgid "modify what Python versions your package supports."
msgstr "パッケージがサポートしているPythonのバージョンを変更します。"
-#: ../../tutorials/pyproject-toml.md:156
+#: ../../tutorials/pyproject-toml.md:165
msgid "More on hatchling"
msgstr "Hatchlingの詳細"
-#: ../../tutorials/pyproject-toml.md:159
+#: ../../tutorials/pyproject-toml.md:168
msgid ""
"The documentation for the hatchling back-end is "
"[here](https://hatch.pypa.io/latest/config/metadata/)"
@@ -6115,11 +6154,11 @@ msgstr ""
"Hatchlingのバックエンドのドキュメントは "
"[こちら](https://hatch.pypa.io/latest/config/metadata/) です。"
-#: ../../tutorials/pyproject-toml.md:162
+#: ../../tutorials/pyproject-toml.md:171
msgid "Step 1: Add Author, maintainer and project description"
msgstr "ステップ1: 作者、メンテナ、プロジェクトの説明を追加する"
-#: ../../tutorials/pyproject-toml.md:164
+#: ../../tutorials/pyproject-toml.md:173
msgid ""
"After completing the [installable code tutorial](create-python-package), "
"you should have a pyproject.toml file with a project name and a version "
@@ -6128,40 +6167,40 @@ msgstr ""
"[インストール可能なコードのチュートリアル](create-python-package) を完了すると、 `[project]` "
"テーブルにプロジェクト名とバージョンを持つpyproject.tomlファイルができるはずです。"
-#: ../../tutorials/pyproject-toml.md:172
+#: ../../tutorials/pyproject-toml.md:181
msgid "Add the following to your table:"
msgstr "テーブルに以下を追加します:"
-#: ../../tutorials/pyproject-toml.md:174
+#: ../../tutorials/pyproject-toml.md:183
msgid ""
"A **description** of your package. This should be a single line and "
"should briefly describe the goal of your package using non technical "
"terms if as all possible!"
msgstr "パッケージの**説明** これは1行で、可能な限り専門用語を使わず、あなたのパッケージの目標を簡潔に記述してください!"
-#: ../../tutorials/pyproject-toml.md:175
+#: ../../tutorials/pyproject-toml.md:184
msgid "package **authors**"
msgstr "パッケージ **著者**"
-#: ../../tutorials/pyproject-toml.md:176
+#: ../../tutorials/pyproject-toml.md:185
msgid "package **maintainers**"
msgstr "パッケージ **メンテナー**"
-#: ../../tutorials/pyproject-toml.md:178
+#: ../../tutorials/pyproject-toml.md:187
msgid "The `description` is just a string like the other values you've set:"
msgstr "`description` は、設定した他の値と同じように単なる文字列です:"
-#: ../../tutorials/pyproject-toml.md:189
+#: ../../tutorials/pyproject-toml.md:198
msgid ""
"When you add authors and maintainers you need to use a format that will "
"look like a Python list with a dictionary within it:"
msgstr "作者とメンテナを追加するときは、Pythonのリストに辞書を追加したような書式を使う必要があります:"
-#: ../../tutorials/pyproject-toml.md:203
+#: ../../tutorials/pyproject-toml.md:212
msgid "Author names & emails"
msgstr "著者名とEメール"
-#: ../../tutorials/pyproject-toml.md:207
+#: ../../tutorials/pyproject-toml.md:216
msgid ""
"There is a quirk with PyPI for authors that have names but not emails in "
"the pyproject.toml. If you are missing the email for one or more authors "
@@ -6170,17 +6209,17 @@ msgstr ""
"PyPIには、pyproject.tomlに名前があってもメールがない作者のための癖があります。 "
"もし、1人以上の作者やメンテナのEメールが見つからない場合は、次のようにしてください:"
-#: ../../tutorials/pyproject-toml.md:216
+#: ../../tutorials/pyproject-toml.md:225
msgid ""
"Then we suggest that you only provide names in your list of names to "
"ensure that everything renders properly on your PyPI page - like this:"
msgstr "PyPIページですべてが正しく表示されるようにするために、名前のリストには名前のみを入力することをお勧めします - このように:"
-#: ../../tutorials/pyproject-toml.md:225
+#: ../../tutorials/pyproject-toml.md:234
msgid "don't have emails for everyone, we suggest that you only add names."
msgstr "全員のEメールを持っていない場合は、名前だけを追加することをお勧めします。"
-#: ../../tutorials/pyproject-toml.md:228
+#: ../../tutorials/pyproject-toml.md:237
msgid ""
"Your `pyproject.toml` file now should look like the example below. It is "
"OK if you only have 1 author and the same author is also maintainer of "
@@ -6195,25 +6234,25 @@ msgid ""
"source?"
msgstr "さらに詳しく: オープンソースにおける作者とメンテナの違いは?"
-#: ../../tutorials/pyproject-toml.md:256
+#: ../../tutorials/pyproject-toml.md:265
msgid ""
"When adding maintainers and authors, you may want to think about the "
"difference between the two."
msgstr "メンテナと著者を追加する際には、この2つの違いについて考えてみるとよいでしょう。"
-#: ../../tutorials/pyproject-toml.md:258
+#: ../../tutorials/pyproject-toml.md:267
msgid "Authors generally include people who:"
msgstr "著者には一般的に以下のような人々が含まれます:"
-#: ../../tutorials/pyproject-toml.md:259
+#: ../../tutorials/pyproject-toml.md:268
msgid "originally created / designed developed the package and"
msgstr "もともとパッケージを作成 / デザイン開発して"
-#: ../../tutorials/pyproject-toml.md:260
+#: ../../tutorials/pyproject-toml.md:269
msgid "people who add new functionality to the package."
msgstr "パッケージに新しい機能を追加する人たち。"
-#: ../../tutorials/pyproject-toml.md:262
+#: ../../tutorials/pyproject-toml.md:271
msgid ""
"Whereas maintainers are the people that are currently, actively working "
"on the project. It is often the case that there is overlap in authors and"
@@ -6222,7 +6261,7 @@ msgstr ""
"一方、メンテナーは、現在、積極的にプロジェクトに取り組んでいる人々です。 作者とメンテナーが重なることはよくあることです。 "
"そのため、これらのリストは似たり寄ったりかもしれません。"
-#: ../../tutorials/pyproject-toml.md:264
+#: ../../tutorials/pyproject-toml.md:273
msgid ""
"A good example of when the lists might diverge is sometimes you have a "
"package where an initial author developed it and then stepped down as a "
@@ -6230,24 +6269,24 @@ msgid ""
"considered an author but no longer actively maintains the package."
msgstr "リストが分岐する可能性のある良い例としては、最初の作者が開発したパッケージが、他のことに移るためにメンテナを降りる場合があります。この人物は引き続き作者とみなされるかもしれないが、もはやそのパッケージを積極的に保守することはありません。"
-#: ../../tutorials/pyproject-toml.md:266
+#: ../../tutorials/pyproject-toml.md:275
msgid ""
"It is important to note that there are many ways to define author vs "
"maintainer and we don't prescribe a single approach in this tutorial."
msgstr "重要なのは、作者とメンテナを定義する方法はたくさんあるということです、そして、このチュートリアルでは、単一のアプローチを推奨するものではありません。"
-#: ../../tutorials/pyproject-toml.md:268
+#: ../../tutorials/pyproject-toml.md:277
msgid ""
"However, we encourage you to consider carefully, for PyPI publication, "
"who you want to have listed as authors and maintainers on your PyPI "
"landing page."
msgstr "しかし、PyPIで公開する際には、PyPIのランディングページに作者やメンテナとして誰を掲載するか、慎重に検討することをお勧めします。"
-#: ../../tutorials/pyproject-toml.md:272
+#: ../../tutorials/pyproject-toml.md:281
msgid "Step 2: Add README and license"
msgstr "ステップ2: READMEとライセンスの追加"
-#: ../../tutorials/pyproject-toml.md:274
+#: ../../tutorials/pyproject-toml.md:283
#, fuzzy
msgid ""
"In the previous lessons, you added both a [README.md](add-readme) file "
@@ -6259,7 +6298,7 @@ msgstr ""
"前のレッスンでは、 [README.md](add-readme) ファイルと [LICENSE](add-license-coc) "
"の両方をパッケージリポジトリーに追加しました。これらのファイルを手に入れたら、以下の例に従ってpyproject.tomlファイルにリンクとして追加します。"
-#: ../../tutorials/pyproject-toml.md:303
+#: ../../tutorials/pyproject-toml.md:312
msgid ""
"The license entry in your pyproject.toml file must use the [license "
"expression syntax](https://packaging.python.org/en/latest/specifications"
@@ -6270,13 +6309,13 @@ msgid ""
"license-expressions/), either version 2.2 or a later compatible version."
msgstr ""
-#: ../../tutorials/pyproject-toml.md:305
+#: ../../tutorials/pyproject-toml.md:314
msgid ""
"If you have multiple licenses, or a custom license, you can also express "
"these using a license expression."
msgstr ""
-#: ../../tutorials/pyproject-toml.md:307
+#: ../../tutorials/pyproject-toml.md:316
msgid ""
"If you want to distribute license files, or other files containing legal "
"information, with your package, you can include these using the "
@@ -6284,11 +6323,11 @@ msgid ""
"pyproject-toml/#license-files) entry, but this is not required."
msgstr ""
-#: ../../tutorials/pyproject-toml.md:309
+#: ../../tutorials/pyproject-toml.md:318
msgid "Step 3: Specify Python version with `requires-python`"
msgstr "ステップ 3: `requires-python` でPythonのバージョンを指定します"
-#: ../../tutorials/pyproject-toml.md:311
+#: ../../tutorials/pyproject-toml.md:320
msgid ""
"Add the `requires-python` field to your `pyproject.toml` `[project]` "
"table. The `requires-python` field helps pip identify which Python "
@@ -6308,12 +6347,12 @@ msgstr ""
"metadata/#core-metadata-requires-python) では、 `requires-python` "
"をバージョン指定の文字列として定義している。ほとんどのプロジェクトは、そのパッケージがサポートする最も古いPythonのバージョンを指定します。いくつかの高度なケースでは、どの将来のPythonバージョンがサポートされるかを示す上限が設定されます。"
-#: ../../tutorials/pyproject-toml.md:316
+#: ../../tutorials/pyproject-toml.md:325
#, fuzzy
msgid "But how do I figure out which Python versions I should support?"
msgstr "パッケージがサポートしているPythonのバージョンを変更します。"
-#: ../../tutorials/pyproject-toml.md:318
+#: ../../tutorials/pyproject-toml.md:327
msgid ""
"Good question. The Python developer guide provides a [status "
"page](https://devguide.python.org/versions/) (and a handy visualization) "
@@ -6322,14 +6361,14 @@ msgid ""
"602](https://peps.python.org/pep-0602/)."
msgstr ""
-#: ../../tutorials/pyproject-toml.md:320
+#: ../../tutorials/pyproject-toml.md:329
msgid ""
"We recommend that you use the latest Python release in the **bugfix** "
"phase. If your Python release is in the **security** phase, we recommend "
"migrating to a newer version of Python."
msgstr ""
-#: ../../tutorials/pyproject-toml.md:322
+#: ../../tutorials/pyproject-toml.md:331
msgid ""
"[SPEC 0](https://scientific-python.org/specs/spec-0000/) of the "
"Scientific Python project suggests a common schedule for dependencies, "
@@ -6337,11 +6376,11 @@ msgid ""
" project."
msgstr ""
-#: ../../tutorials/pyproject-toml.md:351
+#: ../../tutorials/pyproject-toml.md:360
msgid "Step 4: Specify Dependencies"
msgstr "ステップ4: 依存関係の指定"
-#: ../../tutorials/pyproject-toml.md:353
+#: ../../tutorials/pyproject-toml.md:362
msgid ""
"Next add your dependencies table to the project table. The `dependencies "
"=` section contains a list (or array in the toml language) of the Python "
@@ -6353,11 +6392,11 @@ msgstr ""
"セクションには、あなたのパッケージがPython環境で正しく動作するために必要なPythonパッケージのリスト(toml言語では配列)を記述します。"
" 上記の `[build-system]` の表に記載されている要件と同様です:"
-#: ../../tutorials/pyproject-toml.md:361
+#: ../../tutorials/pyproject-toml.md:370
msgid "dependencies are added in an array (similar to a Python list) structure."
msgstr "依存関係は配列(Pythonのリストに似ている)構造で追加されます。"
-#: ../../tutorials/pyproject-toml.md:367
+#: ../../tutorials/pyproject-toml.md:376
msgid ""
"A dependency can be limited to specific versions using a **version "
"specifier.** If the dependency has no version specifier after the "
@@ -6372,7 +6411,7 @@ msgstr ""
"コードは時間の経過とともに変化し、バグが修正され、APIが変更されます。そのため、コードを書いた依存関係がどのバージョンと互換性があるのかを明確にしておくことは良いことです"
" - あなたが今年書いたパッケージは、おそらくnumpy v0.0.1とは互換性がありません!"
-#: ../../tutorials/pyproject-toml.md:371
+#: ../../tutorials/pyproject-toml.md:380
msgid ""
"[Learn more about various ways to specify ranges of package versions "
"here.](https://packaging.python.org/en/latest/specifications/version-"
@@ -6381,7 +6420,7 @@ msgstr ""
"[パッケージバージョンの範囲を指定する様々な方法については、こちらをご覧ください。](https://packaging.python.org/en/latest/specifications"
"/version-specifiers/#id5)"
-#: ../../tutorials/pyproject-toml.md:373
+#: ../../tutorials/pyproject-toml.md:382
msgid ""
"The most common version specifier is a **lower bound,** allowing any "
"version higher than the specified version. Ideally you should set this to"
@@ -6393,11 +6432,11 @@ msgstr ""
"で、指定されたバージョンより上位のバージョンを許可します。理想的には、あなたのパッケージとまだ互換性のある最も低いバージョンに設定すべきですが、実際には新しいパッケージの場合、パッケージが書かれた時点での最新バージョンに設定されることがよくあります"
" [^lowerbound] 。"
-#: ../../tutorials/pyproject-toml.md:378
+#: ../../tutorials/pyproject-toml.md:387
msgid "Lower bounds look like this:"
msgstr "下限は次のようになります:"
-#: ../../tutorials/pyproject-toml.md:384
+#: ../../tutorials/pyproject-toml.md:393
msgid ""
"Commas are used to separate individual dependencies, and each package in "
"your `dependencies` section can use different types of version "
@@ -6406,25 +6445,25 @@ msgstr ""
"カンマは、個々の依存関係を区切るために使用します、 そして、`dependencies` "
"セクションの各パッケージは異なるタイプのバージョン指定子を使うことができます:"
-#: ../../tutorials/pyproject-toml.md:395
+#: ../../tutorials/pyproject-toml.md:404
msgid "Your `pyproject.toml` file will now look like this:"
msgstr "これで `pyproject.toml` ファイルは次のようになります:"
-#: ../../tutorials/pyproject-toml.md:425
+#: ../../tutorials/pyproject-toml.md:434
msgid "Pin dependencies with caution"
msgstr "依存関係のピン止めは慎重に"
-#: ../../tutorials/pyproject-toml.md:426
+#: ../../tutorials/pyproject-toml.md:435
msgid ""
"\"Pinning\" a dependency means setting it to a specific version, like "
"this:"
msgstr "依存関係を \"Pinning\" することは、次のように特定のバージョンに設定することを意味します:"
-#: ../../tutorials/pyproject-toml.md:428
+#: ../../tutorials/pyproject-toml.md:437
msgid "`numpy == 1.0`."
msgstr "`numpy == 1.0` 。"
-#: ../../tutorials/pyproject-toml.md:430
+#: ../../tutorials/pyproject-toml.md:439
msgid ""
"If you are building a library package that other developers will depend "
"upon, you must be cautious before pinning to a precise dependency "
@@ -6440,13 +6479,13 @@ msgstr ""
"なぜなら、ユーザーはあなたのパッケージをさまざまな環境にインストールするからです。特定のバージョンに固定された依存関係は、Python環境の解決をより困難にします。"
" そのため、依存関係を特定のバージョンに固定するのは、どうしても必要な場合に限られます。"
-#: ../../tutorials/pyproject-toml.md:438
+#: ../../tutorials/pyproject-toml.md:447
msgid ""
"Similarly, you should be cautious when specifying an upper bound on a "
"package. These two specifications are equivalent:"
msgstr "同様に、パッケージの上限を指定する場合にも注意が必要です。これら2つの仕様は同等です:"
-#: ../../tutorials/pyproject-toml.md:446
+#: ../../tutorials/pyproject-toml.md:455
msgid ""
"One build tool that you should be aware of that pins dependencies to an "
"upper bound by default is Poetry. [Read more about how to safely add "
@@ -6455,11 +6494,11 @@ msgstr ""
"依存関係をデフォルトで上限値に固定するビルドツールとして知っておくべきもののひとつに、Poetryがあります。 "
"[Poetryで依存関係を安全に追加する方法については、こちらをお読みください。](challenges-with-poetry)"
-#: ../../tutorials/pyproject-toml.md:449
+#: ../../tutorials/pyproject-toml.md:458
msgid "Step 5: Add PyPI classifiers"
msgstr "ステップ5: PyPI classifiersを追加する"
-#: ../../tutorials/pyproject-toml.md:451
+#: ../../tutorials/pyproject-toml.md:460
msgid ""
"Next you will add classifiers to your `pyproject.toml` file. The value "
"for each classifier that you add to your `pyproject.toml` file must come "
@@ -6471,11 +6510,11 @@ msgstr ""
"[ここにあるPyPIで認められている分類子](https://PyPI.org/classifiers/) "
"の一覧から選ぶ必要があります。スペルや書式に逸脱があると、PyPIに公開するときに問題が発生します。"
-#: ../../tutorials/pyproject-toml.md:453
+#: ../../tutorials/pyproject-toml.md:462
msgid "What happens when you use incorrect classifiers?"
msgstr "間違った分類子を使うとどうなりますか?"
-#: ../../tutorials/pyproject-toml.md:456
+#: ../../tutorials/pyproject-toml.md:465
msgid ""
"If you do not [use standard classifier "
"values](https://PyPI.org/classifiers/), when you try to publish your "
@@ -6486,33 +6525,33 @@ msgstr ""
"PyPIでパッケージを公開しようとすると拒否されます。 最初のトライでPyPIに拒否されても心配しないでください! "
"それは私たち全員に起こったことです。"
-#: ../../tutorials/pyproject-toml.md:459
+#: ../../tutorials/pyproject-toml.md:468
msgid "Review that list and add items below to your `pyproject.toml` file:"
msgstr "そのリストを見て、以下の項目を `pyproject.toml` ファイルに追加します:"
-#: ../../tutorials/pyproject-toml.md:461
+#: ../../tutorials/pyproject-toml.md:470
msgid "development status"
msgstr "開発状況"
-#: ../../tutorials/pyproject-toml.md:462
+#: ../../tutorials/pyproject-toml.md:471
msgid "intended audiences"
msgstr "対象読者"
-#: ../../tutorials/pyproject-toml.md:463
+#: ../../tutorials/pyproject-toml.md:472
msgid "topic"
msgstr "トピック"
-#: ../../tutorials/pyproject-toml.md:464
+#: ../../tutorials/pyproject-toml.md:473
msgid "programming language support"
msgstr "プログラミング言語サポート"
-#: ../../tutorials/pyproject-toml.md:466
+#: ../../tutorials/pyproject-toml.md:475
msgid ""
"The classifier key should look something like the example below. A few "
"notes:"
msgstr "classifierのキーは、下の例のようになるはずです。 いくつか注意点があります:"
-#: ../../tutorials/pyproject-toml.md:468
+#: ../../tutorials/pyproject-toml.md:477
#, fuzzy
msgid ""
"Your classifier values might be different depending upon your intended "
@@ -6522,13 +6561,13 @@ msgstr ""
"分類器の値は、パッケージに選択したライセンスによって異なる場合があります、 あなたの意図する読者、パッケージの開発状況とサポートしている "
"Python のバージョンです。"
-#: ../../tutorials/pyproject-toml.md:469
+#: ../../tutorials/pyproject-toml.md:478
msgid ""
"You can add as many classifiers as you wish as long as you use the "
"[designated PyPI classifier values](https://PyPI.org/classifiers/)."
msgstr "[指定されたPyPIの分類子の値](https://PyPI.org/classifiers/) を使う限り、好きなだけ分類子を追加できます。"
-#: ../../tutorials/pyproject-toml.md:508
+#: ../../tutorials/pyproject-toml.md:517
msgid ""
"Note that while classifiers are not required in your `pyproject.toml` "
"file, they will help users find your package. As such we strongly "
@@ -6537,21 +6576,21 @@ msgstr ""
"分類子は `pyproject.toml` "
"ファイルでは必須ではありませんが、ユーザーがあなたのパッケージを見つけるのに役立つことに注意してください。そのため、追加することを強くお勧めします。"
-#: ../../tutorials/pyproject-toml.md:510
+#: ../../tutorials/pyproject-toml.md:519
msgid "Step 6: Add the `[project.urls]` table"
msgstr "ステップ 6: `[project.urls]` テーブルを追加する"
-#: ../../tutorials/pyproject-toml.md:512
+#: ../../tutorials/pyproject-toml.md:521
msgid "Finally, add the project.urls table to your pyproject.toml file."
msgstr "最後に、pyproject.tomlファイルにproject.urlsテーブルを追加します。"
-#: ../../tutorials/pyproject-toml.md:514
+#: ../../tutorials/pyproject-toml.md:523
msgid ""
"`project.urls` contains links that are relevant for your project. You "
"might want to include:"
msgstr "`project.urls` には、プロジェクトに関連するリンクが含まれています。以下を含めるとよいでしょう:"
-#: ../../tutorials/pyproject-toml.md:516
+#: ../../tutorials/pyproject-toml.md:525
msgid ""
"**Homepage:** A link to your published documentation for your project. If"
" you are working through this tutorial, then you may not have this link "
@@ -6560,18 +6599,18 @@ msgstr ""
"**ホームページ:** プロジェクトの公開ドキュメントへのリンク。 "
"このチュートリアルを進めているのであれば、このリンクはまだ持っていないかもしれません。 大丈夫、当分は飛ばしてもいいです。"
-#: ../../tutorials/pyproject-toml.md:517
+#: ../../tutorials/pyproject-toml.md:526
#, fuzzy
msgid ""
"**Bug reports:** a link to your issues/discussions or wherever you want "
"users to report bugs."
msgstr "**バグ報告:** 課題 / ディスカッションへのリンク、またはユーザーがバグを報告できる場所です。"
-#: ../../tutorials/pyproject-toml.md:518
+#: ../../tutorials/pyproject-toml.md:527
msgid "**Source:** the GitHub / GitLab link for your project."
msgstr "**ソース:** プロジェクトのGitHub / GitLabリンク。"
-#: ../../tutorials/pyproject-toml.md:563
+#: ../../tutorials/pyproject-toml.md:572
msgid ""
"There are many other urls that you can add here. Check out the [README "
"file here for an overview](https://github.com/patrick91/links-demo)."
@@ -6580,11 +6619,11 @@ msgstr ""
"[概要についてはこちらのREADMEファイル](https://github.com/patrick91/links-demo) "
"をチェックしてください。"
-#: ../../tutorials/pyproject-toml.md:566
+#: ../../tutorials/pyproject-toml.md:575
msgid "Putting it all together - your completed pyproject.toml file"
msgstr "すべてをまとめます - 完成したpyproject.tomlファイル"
-#: ../../tutorials/pyproject-toml.md:568
+#: ../../tutorials/pyproject-toml.md:577
msgid ""
"Below is an example of a complete `pyproject.toml` file that is commented"
" with all of the sections we discussed above."
@@ -6594,48 +6633,48 @@ msgstr "以下は、上で説明したすべてのセクションがコメント
msgid "Appendix - Click for a fully commented pyproject.toml file"
msgstr "付録 - 完全にコメントされたpyproject.tomlファイルを見るにはクリックしてください"
-#: ../../tutorials/pyproject-toml.md:617
+#: ../../tutorials/pyproject-toml.md:626
msgid ""
"Below is a fully commented pyproject.toml file if you want to use it for "
"reference."
msgstr "参考にしたいのであれば、以下は、完全にコメントされたpyproject.tomlファイルです。"
-#: ../../tutorials/pyproject-toml.md:683
+#: ../../tutorials/pyproject-toml.md:692
msgid "Example `pyproject.toml` files"
msgstr "例 `pyproject.toml` ファイル"
-#: ../../tutorials/pyproject-toml.md:685
+#: ../../tutorials/pyproject-toml.md:694
msgid ""
"Below are some examples of `pyproject.toml` files from various packages "
"in the scientific and pyOpenSci ecosystem."
msgstr "以下は、scientificとpyOpenSciエコシステムの様々なパッケージの `pyproject.toml` ファイルの例です。"
-#: ../../tutorials/pyproject-toml.md:686
+#: ../../tutorials/pyproject-toml.md:695
msgid ""
"[PyPA's fully documented example pyproject.toml "
"file](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
msgstr "[PyPAの完全に文書化されたサンプルpyproject.tomlファイル](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
-#: ../../tutorials/pyproject-toml.md:687
+#: ../../tutorials/pyproject-toml.md:696
msgid ""
"[taxpasta has a nicely organized pyproject.toml file and is a pyOpenSci "
"approved "
"package](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a53dd49ad77e4cf143573/pyproject.toml)"
msgstr "[taxpastaはきれいに整理されたpyproject.tomlファイルを持っており、pyOpenSci承認パッケージです](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a53dd49ad77e4cf143573/pyproject.toml)"
-#: ../../tutorials/pyproject-toml.md:693
+#: ../../tutorials/pyproject-toml.md:702
msgid "At this point you've created:"
msgstr "この時点であなたは以下を作成しました:"
-#: ../../tutorials/pyproject-toml.md:695
+#: ../../tutorials/pyproject-toml.md:704
msgid "A [README.md](add-readme) file for your package"
msgstr "パッケージの [README.md](add-readme) ファイル"
-#: ../../tutorials/pyproject-toml.md:696
+#: ../../tutorials/pyproject-toml.md:705
msgid "A [CODE_OF_CONDUCT.md](add-coc) file to support your user community"
msgstr "ユーザーコミュニティをサポートする [CODE_OF_CONDUCT.md](add-coc) ファイル"
-#: ../../tutorials/pyproject-toml.md:697
+#: ../../tutorials/pyproject-toml.md:706
msgid ""
"And a [LICENSE](add-license-coc) file which provides legal boundaries "
"around how people can and can't use your software"
@@ -6643,17 +6682,17 @@ msgstr ""
"[LICENSE](add-license-coc) "
"ファイルは、人々があなたのソフトウェアをどのように使用できるか、また使用できないかに関する法的な境界線を提供します。"
-#: ../../tutorials/pyproject-toml.md:699
+#: ../../tutorials/pyproject-toml.md:708
msgid ""
"You also learned [how to publish your package to (test)PyPI](publish-"
"pypi)."
msgstr "また、 [パッケージを(test)PyPIに公開する方法](publish-pypi) も学びました。"
-#: ../../tutorials/pyproject-toml.md:701
+#: ../../tutorials/pyproject-toml.md:710
msgid "Publish a new version of your package to PyPI"
msgstr "新しいバージョンのパッケージをPyPIに公開する"
-#: ../../tutorials/pyproject-toml.md:703
+#: ../../tutorials/pyproject-toml.md:712
msgid ""
"You are now ready to publish a new version of your Python package to "
"(test) PyPI. When you do this you will see that the landing page for your"
@@ -6662,11 +6701,11 @@ msgstr ""
"これで、Pythonパッケージの新しいバージョンを(test)PyPIに公開する準備ができました。 "
"そうすると、パッケージのランディングページに、より多くの情報が掲載されていることがわかります。"
-#: ../../tutorials/pyproject-toml.md:705
+#: ../../tutorials/pyproject-toml.md:714
msgid "Try to republish now."
msgstr "今すぐ再公開を試みます。"
-#: ../../tutorials/pyproject-toml.md:707
+#: ../../tutorials/pyproject-toml.md:716
msgid ""
"First, update the version of your package in your pyproject toml file. "
"Below version is updated from `0.1` to `0.1.1`."
@@ -6674,28 +6713,28 @@ msgstr ""
"まず、pyprojectのtomlファイルでパッケージのバージョンを更新します。以下のバージョンが `0.1` から `0.1.1` "
"に更新されました。"
-#: ../../tutorials/pyproject-toml.md:720
+#: ../../tutorials/pyproject-toml.md:729
msgid "Now use hatch to publish the new version of your package to test.PyPI.org."
msgstr "次に hatch を使って、新しいバージョンのパッケージを test.PyPI.org に公開します。"
-#: ../../tutorials/pyproject-toml.md:727
+#: ../../tutorials/pyproject-toml.md:736
msgid "Next (optional) step - publishing to conda-forge"
msgstr "次のステップ(オプション) - conda-forgeに公開します。"
-#: ../../tutorials/pyproject-toml.md:729
+#: ../../tutorials/pyproject-toml.md:738
msgid ""
"You now have all of the skills that you need to publish your package to "
"PyPI."
msgstr "これであなたのパッケージをPyPIに公開するために必要なスキルはすべて揃いました。"
-#: ../../tutorials/pyproject-toml.md:732
+#: ../../tutorials/pyproject-toml.md:741
msgid ""
"If you also want to publish your package on conda-forge (which is a "
"channel within the conda ecosystem), you will learn how to do that in the"
" next lesson."
msgstr "あなたのパッケージを(condaエコシステム内のチャンネルである)conda-forgeで公開したい場合 、 その方法は次のレッスンで学びます。"
-#: ../../tutorials/pyproject-toml.md:736
+#: ../../tutorials/pyproject-toml.md:745
msgid ""
"Really good resources from jeremiah "
"https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet "
@@ -6704,7 +6743,7 @@ msgstr ""
"jeremiah からの本当に良い情報源 https://daniel.feldroy.com/posts/2023-08-pypi-"
"project-urls-cheatsheet が役に立ちます (リンク先のデモはなおさら)。"
-#: ../../tutorials/pyproject-toml.md:376
+#: ../../tutorials/pyproject-toml.md:385
msgid ""
"Some packaging tools will do this for you when you add a dependency using"
" their cli interface. For example [`poetry add`](https://python-"
@@ -6718,6 +6757,226 @@ msgstr ""
"指定子で最新バージョンを追加し、 [`pdm add`](https://pdm-"
"project.org/latest/reference/cli/#add) は `>=` 指定子で最新バージョンを追加します。"
+#: ../../tutorials/run-python-scripts-hatch.md:10
+msgid ""
+"Python supports inline metadata for scripts (a feature added in 2024). "
+"This makes it possible to run standalone scripts with dependencies and "
+"Python versions managed automatically."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:14
+#, python-brace-format
+msgid ""
+"Many tools support this workflow, including PDM, [Hatch](get-to-know-"
+"hatch), and {term}`uv`. In this tutorial, we focus on Hatch and UV. The "
+"same metadata format can also be used with other tools."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:22
+msgid ""
+"[Hatch: How to run Python scripts](https://hatch.pypa.io/latest/how-"
+"to/run/python-scripts/)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:23
+msgid ""
+"[uv: Running "
+"scripts](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-"
+"script)"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:26
+msgid "How to create a reproducible script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:28
+#, python-brace-format
+msgid ""
+"Sometimes you want to share or run a single script without creating a "
+"full {term}`Python package`. To do this, you can use inline script "
+"metadata. This format lets you specify dependencies and Python versions "
+"at the top of your script in a comment block."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:34
+msgid ""
+"When you add metadata at the top of a script, Hatch (or PDM or uv) will "
+"use that metadata to:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:37
+#, fuzzy
+msgid "Create an isolated virtual Python environment for that script."
+msgstr "使用したいPython環境をアクティブにします。"
+
+#: ../../tutorials/run-python-scripts-hatch.md:38
+#, python-brace-format
+msgid ""
+"Install the {term}`Dependencies` listed in the script into that "
+"environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:39
+msgid "Use the required Python version that you specify in the metadata."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:41
+msgid ""
+"This approach is useful for workflows that you want to make reproducible,"
+" but that do not need to become full Python packages."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:44
+#, fuzzy
+msgid "Why use Hatch for scripts?"
+msgstr "Hatchスクリプト"
+
+#: ../../tutorials/run-python-scripts-hatch.md:46
+msgid ""
+"Inline metadata helps you make scripts reproducible. Anyone can run your "
+"script without manually creating a new environment or guessing which "
+"dependencies it needs. Hatch takes care of installing dependencies and "
+"using the correct Python version."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:51
+msgid "How to add inline metadata to your script"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:53
+msgid ""
+"You will use Hatch in this example, but you can also use uv if that is "
+"your preferred tool."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:56
+#, python-brace-format
+msgid ""
+"First, create a new file named `script.py` with the block below at the "
+"top. The metadata block starts with `# /// script` and ends with `# ///`."
+" Everything in between must be {term}`TOML` metadata written as comments."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:60
+msgid ""
+"In the example below, the script requires Python 3.11 or newer, and NumPy"
+" is declared as a dependency."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:81
+msgid "Run the script with Hatch"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:83
+msgid ""
+"Open your terminal and change to the directory where `script.py` lives. "
+"Then run:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:90
+msgid ""
+"On first run, Hatch will create an environment and install dependencies. "
+"On later runs, Hatch will reuse that environment so startup is faster."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:94
+msgid ""
+"The environment name is based on the script path. If you move the script "
+"to a new location, Hatch will treat it as a new script environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:98
+msgid "Optional: configure script environment behavior"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:100
+msgid ""
+"You can control script-specific Hatch behavior in the same metadata "
+"block. For example, to use `pip` instead of `uv` as the installer:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:113
+msgid "Run the same script with uv"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:115
+msgid "If you prefer uv, you can run the same inline-metadata script with:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:121
+msgid ""
+"The same `# /// script` metadata block works with uv, including "
+"`requires-python` and `dependencies`."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:124
+msgid ""
+"For more on using uv to run scripts, see the guide: [Running scripts with"
+" uv](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:128
+msgid "When to use scripts vs. packages"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:130
+msgid "You may be wondering when to use scripts versus creating a package."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:132
+msgid "This depends on your use case. Scripts are often useful when:"
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:134
+msgid "You have one small task, or a specific workflow that is not generalizable."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:135
+msgid ""
+"Your workflow is still evolving, but you want to run it in a reproducible"
+" environment."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:137
+msgid "You want reproducible dependencies quickly."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:138
+msgid "You are sharing a single file with collaborators."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:140
+#, fuzzy
+msgid "Create a full package when:"
+msgstr "なぜPythonパッケージを作るのか?"
+
+#: ../../tutorials/run-python-scripts-hatch.md:142
+msgid "You are building reusable modules for multiple projects."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:143
+msgid "You need tests, documentation, releases, and long-term maintenance."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:144
+msgid "Your codebase is growing beyond one or two scripts."
+msgstr ""
+
+#: ../../tutorials/run-python-scripts-hatch.md:148
+#, fuzzy
+msgid "[Get to know Hatch](get-to-know-hatch.md)"
+msgstr "詳しくは [Hatch](get-to-know-hatch.md) を知るをご覧ください。"
+
+#: ../../tutorials/run-python-scripts-hatch.md:149
+#, fuzzy
+msgid "[Create a Python package](create-python-package.md)"
+msgstr "[コードをインストール可能にする](create-python-package)"
+
+#: ../../tutorials/run-python-scripts-hatch.md:150
+#, fuzzy
+msgid "[Command line reference guide](command-line-reference.md)"
+msgstr "コマンドラインリファレンスガイド"
+
#: ../../tutorials/setup-py-to-pyproject-toml.md:7
msgid "Using Hatch to Migrate setup.py to a pyproject.toml"
msgstr "Hatchを使ってsetup.pyをpyproject.tomlに移行する"
@@ -6725,22 +6984,23 @@ msgstr "Hatchを使ってsetup.pyをpyproject.tomlに移行する"
#: ../../tutorials/setup-py-to-pyproject-toml.md:9
#, fuzzy
msgid ""
-"Hatch can be useful for generating your project's `pyproject.toml` file "
-"if your project already has a `setup.py` file."
+"[Hatch](get-to-know-hatch) can be useful for generating your project's "
+"[pyproject.toml](pyproject-toml) file if your project already has a "
+"`setup.py` file."
msgstr "プロジェクトに既に `setup.py` がある場合、Hatchはプロジェクトの `pyproject.toml` を生成するのに便利です。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:11
+#: ../../tutorials/setup-py-to-pyproject-toml.md:13
msgid "Note"
msgstr "注釈"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:14
+#: ../../tutorials/setup-py-to-pyproject-toml.md:16
#, fuzzy
msgid ""
"This step is not necessary and is only helpful if your project already "
"has a `setup.py` file defined."
msgstr "このステップは必要なく、プロジェクトに既に `setup.py` ファイルが定義されている場合にのみ有用です。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:15
+#: ../../tutorials/setup-py-to-pyproject-toml.md:17
#, fuzzy
msgid ""
"If your project does not already define a `setup.py` see [Make your "
@@ -6749,7 +7009,7 @@ msgstr ""
"プロジェクトで `setup.py` が定義されていない場合は、 [Python コードをインストール可能にする](installable-"
"code.md) を参照してください。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:23
+#: ../../tutorials/setup-py-to-pyproject-toml.md:25
msgid ""
"The process of using Hatch to transition to using `pyproject.toml` for "
"projects that already have a `setup.py` defined."
@@ -6757,56 +7017,57 @@ msgstr ""
"すでに `setup.py` が定義されているプロジェクトで `pyproject.toml` を使用するように移行するために Hatch "
"を使用するプロセスです。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:26
+#: ../../tutorials/setup-py-to-pyproject-toml.md:28
msgid "What is Hatch?"
msgstr "Hatchとは何か?"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:28
+#: ../../tutorials/setup-py-to-pyproject-toml.md:30
+#, fuzzy, python-brace-format
msgid ""
"Hatch is a Python package manager designed to streamline the process of "
"creating, managing, and distributing Python packages. It provides a "
"convenient CLI (Command-Line Interface) for tasks such as creating new "
-"projects, managing dependencies, building distributions, and publishing "
-"packages to repositories like PyPI."
+"projects, managing {term}`Dependencies`, building distributions, and "
+"publishing packages to repositories like [PyPI](publish-pypi)."
msgstr ""
"HatchはPythonパッケージマネージャで、Pythonパッケージの作成、管理、配布のプロセスを効率化するように設計されています。 "
"新しいプロジェクトの作成、依存関係の管理、ディストリビューションのビルド、PyPI "
"のようなリポジトリへのパッケージの公開といったタスクのための便利な CLI (Command-Line Interface) を提供します。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:34
+#: ../../tutorials/setup-py-to-pyproject-toml.md:40
#, fuzzy
msgid "See [Get to know Hatch](get-to-know-hatch) for more information."
msgstr "詳しくは [Hatch](get-to-know-hatch.md) を知るをご覧ください。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:37
+#: ../../tutorials/setup-py-to-pyproject-toml.md:43
msgid "Prerequisites"
msgstr "前提条件"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:39
+#: ../../tutorials/setup-py-to-pyproject-toml.md:45
msgid ""
"Before we begin, ensure that you have Hatch installed on your system. You"
" can install it via pip:"
msgstr "始める前に、システムにHatchがインストールされていることを確認してください。pipでインストールできます:"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:45
+#: ../../tutorials/setup-py-to-pyproject-toml.md:51
msgid "Sample Directory Tree"
msgstr "サンプルディレクトリツリー"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:47
+#: ../../tutorials/setup-py-to-pyproject-toml.md:53
msgid ""
"Let's take a look at a sample directory tree structure before and after "
"using `hatch init`:"
msgstr "それでは、 `hatch init` を使う前と後のディレクトリツリー構造のサンプルを見てみましょう: "
-#: ../../tutorials/setup-py-to-pyproject-toml.md:49
+#: ../../tutorials/setup-py-to-pyproject-toml.md:55
msgid "Before `hatch init`"
msgstr "`hatch init` 前"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:65
+#: ../../tutorials/setup-py-to-pyproject-toml.md:71
msgid "After `hatch init`"
msgstr "`hatch init` 後"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:83
+#: ../../tutorials/setup-py-to-pyproject-toml.md:89
msgid ""
"As you can see, the main change after running `hatch init` is the "
"addition of the `pyproject.toml` file in the project directory."
@@ -6814,30 +7075,30 @@ msgstr ""
"ご覧のように、 `hatch init` を実行した後の主な変化は、プロジェクトディレクトリに `pyproject.toml` "
"ファイルが追加されたことです。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:85
+#: ../../tutorials/setup-py-to-pyproject-toml.md:91
msgid "Step-by-Step Guide"
msgstr "ステップバイステップガイド"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:87
+#: ../../tutorials/setup-py-to-pyproject-toml.md:93
msgid ""
"Now, let's walk through the steps to use Hatch to create a "
"`pyproject.toml` file for your project."
msgstr "では、Hatchを使ってプロジェクトの `pyproject.toml` ファイルを作成する手順を説明しましょう。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:89
+#: ../../tutorials/setup-py-to-pyproject-toml.md:95
msgid ""
"**Navigate to Your Project Directory**: Open your terminal or command "
"prompt and navigate to the directory where your Python project is "
"located."
msgstr "**プロジェクトディレクトリに移動する**: ターミナルかコマンドプロンプトを開き、Pythonプロジェクトがあるディレクトリに移動します。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:91
+#: ../../tutorials/setup-py-to-pyproject-toml.md:97
msgid ""
"**Initialize Hatch**: Run the following command to initialize Hatch in "
"your project directory:"
msgstr "**Hatchの初期化**: 以下のコマンドを実行し、プロジェクトディレクトリのHatchを初期化します:"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:97
+#: ../../tutorials/setup-py-to-pyproject-toml.md:103
#, fuzzy
msgid ""
"**Review and Customize**: After running the previous command, Hatch will "
@@ -6854,7 +7115,7 @@ msgstr ""
"`pyproject.toml` の詳細については [pyproject.toml](pyproject-toml.md) "
"チュートリアルを参照してください)。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:99
+#: ../../tutorials/setup-py-to-pyproject-toml.md:105
#, fuzzy
msgid ""
"**Verify**: Verify that the `pyproject.toml` file accurately reflects "
@@ -6864,7 +7125,7 @@ msgstr ""
"**検証**: `pyproject.toml` ファイルがプロジェクト構成と依存関係を正確に反映していることを確認します。 "
"必要であればファイルを手動で編集することもできますが、慎重を期して構文が正しいことを確認してください。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:101
+#: ../../tutorials/setup-py-to-pyproject-toml.md:107
msgid ""
"**Delete setup.py**: Since we're migrating to using `pyproject.toml` "
"exclusively, the `setup.py` file becomes unnecessary. You can safely "
@@ -6873,7 +7134,7 @@ msgstr ""
"**setup.py を削除する**: `pyproject.toml` のみを使用するように移行するので、 `setup.py` "
"ファイルは不要になります。 プロジェクトディレクトリから安全に削除できます。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:103
+#: ../../tutorials/setup-py-to-pyproject-toml.md:109
msgid ""
"**Test Build**: Before proceeding further, it's essential to ensure that "
"your project builds successfully using only the `pyproject.toml` file. "
@@ -6882,7 +7143,7 @@ msgstr ""
"**テストビルド**: 先に進む前に、 `pyproject.toml` "
"ファイルだけを使ってプロジェクトが正常にビルドされることを確認する必要がある。 以下のコマンドを実行してプロジェクトをビルドします:"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:109
+#: ../../tutorials/setup-py-to-pyproject-toml.md:115
msgid ""
"This command will build your project based on the specifications in the "
"`pyproject.toml` file. Make sure to check for any errors or warnings "
@@ -6891,7 +7152,7 @@ msgstr ""
"このコマンドは `pyproject.toml` ファイルの仕様に基づいてプロジェクトをビルドします。 "
"ビルドの過程でエラーや警告がないか、必ず確認してください。"
-#: ../../tutorials/setup-py-to-pyproject-toml.md:111
+#: ../../tutorials/setup-py-to-pyproject-toml.md:117
msgid ""
"**Test Existing Functionality**: After successfully building your project"
" with `pyproject.toml`, it's crucial to ensure that your project's "
@@ -6934,7 +7195,8 @@ msgid "Automate building and publishing the package on GitHub Actions"
msgstr ""
#: ../../tutorials/trusted-publishing.md:19
-msgid "Configure PyPI Trusted Publishing for the project"
+#, python-brace-format
+msgid "Configure {term}`Trusted publishing` for the project"
msgstr ""
#: ../../tutorials/trusted-publishing.md:20
@@ -6961,14 +7223,14 @@ msgid ""
"publishing of documentation, automate creation of web pages for the "
"project, and even automate the release process. For this lesson, we will "
"focus on using actions to release and publish your Python package "
-"securely to PyPI."
+"securely to [PyPI](publish-pypi)."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:35
+#: ../../tutorials/trusted-publishing.md:36
msgid "Why Trusted Publishing Matters"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:37
+#: ../../tutorials/trusted-publishing.md:38
msgid ""
"If you are wondering why trusted publishing is so important, [check out "
"this blog post:](https://www.pyopensci.org/blog/python-packaging-"
@@ -6976,12 +7238,12 @@ msgid ""
"you don't lock down your publishing workflows."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:40
+#: ../../tutorials/trusted-publishing.md:41
#, fuzzy
msgid "Step 0: Create a release workflow"
msgstr "ステップ0: READMEファイルの作成"
-#: ../../tutorials/trusted-publishing.md:42
+#: ../../tutorials/trusted-publishing.md:43
msgid ""
"To get started, create a file named `release.yaml` under the "
"`.github/workflows` directory of your project. If the `.github/workflows`"
@@ -6990,11 +7252,11 @@ msgid ""
"`.github/workflows` directory."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:47
+#: ../../tutorials/trusted-publishing.md:48
msgid "Naming your workflow file"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:50
+#: ../../tutorials/trusted-publishing.md:51
msgid ""
"You can name the workflow file whatever you wish. We suggest using "
"something simple and expressive like `release.yaml` so you, your future "
@@ -7002,23 +7264,23 @@ msgid ""
"workflow does."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:55
+#: ../../tutorials/trusted-publishing.md:56
msgid "Step 1: Name the workflow"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:57
+#: ../../tutorials/trusted-publishing.md:58
#, fuzzy
msgid "At the top of the `release.yaml` file, type the following:"
msgstr "`README.md` ファイルの先頭に、パッケージ名を追加します。"
-#: ../../tutorials/trusted-publishing.md:63
+#: ../../tutorials/trusted-publishing.md:64
msgid ""
"This provides a name to the workflow that you can use to quickly find all"
" runs of this GitHub Action on the \"Actions\" tab in the GitHub "
"repository."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:67
+#: ../../tutorials/trusted-publishing.md:68
msgid ""
"Graphic showing an example of a configured workflow for the release. On "
"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
@@ -7029,7 +7291,7 @@ msgid ""
"package."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:69
+#: ../../tutorials/trusted-publishing.md:70
msgid ""
"This image shows an example of a configured workflow for the release. On "
"the top, in the red box labeled \"1\" you see the \"Actions\" tab of the "
@@ -7039,11 +7301,11 @@ msgid ""
"workflow, for the \"1.0\" and \"1.0.1\" releases of the package."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:72
+#: ../../tutorials/trusted-publishing.md:73
msgid "Step 2: Add triggers to the workflow"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:74
+#: ../../tutorials/trusted-publishing.md:75
msgid ""
"Every GitHub Actions workflow runs when [certain "
"conditions](https://docs.github.com/en/actions/reference/events-that-"
@@ -7055,11 +7317,11 @@ msgid ""
"and publish a release:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:86
+#: ../../tutorials/trusted-publishing.md:87
msgid "Step 3: Configure the jobs in the workflow"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:88
+#: ../../tutorials/trusted-publishing.md:89
msgid ""
"A GitHub Actions *workflow* file can contain multiple *jobs* that run "
"independently; each job can also have multiple *steps.* When triggered, "
@@ -7067,7 +7329,7 @@ msgid ""
"that have conditional requirements)."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:92
+#: ../../tutorials/trusted-publishing.md:93
msgid ""
"Jobs and steps can also have [conditional "
"logic](https://docs.github.com/en/actions/reference/workflow-syntax-for-"
@@ -7077,24 +7339,24 @@ msgid ""
" to test building the package every time you merge a new pull request."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:95
+#: ../../tutorials/trusted-publishing.md:96
msgid ""
"For a release job, you need to clone or check out the repository. You can"
" use the `actions/checkout` action to check out the code. You then "
-"install and use `hatch` to build your package."
+"install and use [Hatch](get-to-know-hatch) to build your package."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:98
+#: ../../tutorials/trusted-publishing.md:101
msgid ""
"You also need to make sure to set up Hatch on the machine GitHub is using"
" to run the workflow."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:101
+#: ../../tutorials/trusted-publishing.md:104
msgid "A minimal job definition would look like this:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:121
+#: ../../tutorials/trusted-publishing.md:124
msgid ""
"Notice that above, you provide a version for each action step. "
"`action/checkout@v5` tells GitHub to use version 5 of the checkout "
@@ -7102,30 +7364,30 @@ msgid ""
"this case, the code will be used to build your package."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:123
+#: ../../tutorials/trusted-publishing.md:126
msgid ""
"Next, you will learn about a better way to secure (or \"harden\") your "
"workflow"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:125
+#: ../../tutorials/trusted-publishing.md:128
msgid "Step 4: Secure the GitHub Actions workflow"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:127
+#: ../../tutorials/trusted-publishing.md:130
msgid ""
"There are several improvements you can make to the GitHub Actions "
"workflow you just configured to improve security and readability."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:130
+#: ../../tutorials/trusted-publishing.md:133
msgid ""
"First, we can give names to relevant steps in the process to increase the"
" readability of the logs generated during the workflow run. This can be "
"achieved using `name: ` lines."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:134
+#: ../../tutorials/trusted-publishing.md:137
msgid ""
"More importantly, each time you use an existing action (via `uses`) you "
"should pin that action to a commit hash. Pinning your action ensures that"
@@ -7135,24 +7397,24 @@ msgid ""
"supply-chain-attack])."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:141
+#: ../../tutorials/trusted-publishing.md:144
msgid ""
"Enabling Dependabot[^dependabot] in the repository will ensure that your "
"actions stay up to date. The dependabot tool will open pull requests that"
" update your action versions at whatever frequency you want."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:146
+#: ../../tutorials/trusted-publishing.md:149
msgid "Thus, the workflow that you should use should be similar to:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:154
+#: ../../tutorials/trusted-publishing.md:157
msgid ""
"Now, you can commit the `.github/workflows/release.yaml` file to the "
"repository and push to GitHub."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:156
+#: ../../tutorials/trusted-publishing.md:159
msgid ""
"At this point, if you create a new release for your project on GitHub, "
"the configured workflow should run and build a wheel for you. "
@@ -7160,29 +7422,29 @@ msgid ""
"deleted at the end of the workflow run."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:160
+#: ../../tutorials/trusted-publishing.md:163
msgid "Step 5: Upload the built artifact to GitHub Artifacts"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:162
+#: ../../tutorials/trusted-publishing.md:165
msgid ""
"You need to add one more step to the job definition to be able to access "
"the wheel. You will upload it to the artifacts temporary area[^github-"
"artifacts]. Add the following to the `release.yaml` file:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:172
+#: ../../tutorials/trusted-publishing.md:175
msgid "Upload artifacts parameters"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:175
+#: ../../tutorials/trusted-publishing.md:178
msgid ""
"Above, you have configured the artifact to be deleted after 1 day. The "
"artifacts storage on GitHub actions is temporary; users should not "
"download your package from the GitHub artifacts."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:178
+#: ../../tutorials/trusted-publishing.md:181
msgid ""
"You have also configured the release job to error if the `dist/` "
"directory does not exist. This means that `hatch build` (from the "
@@ -7190,68 +7452,68 @@ msgid ""
"release."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:183
+#: ../../tutorials/trusted-publishing.md:186
msgid ""
"At this point, if you push the `release.yaml` to GitHub and create a new "
"release, the GitHub Actions job will:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:186
+#: ../../tutorials/trusted-publishing.md:189
msgid "run,"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:187
+#: ../../tutorials/trusted-publishing.md:190
msgid "clone your repository,"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:188
+#: ../../tutorials/trusted-publishing.md:191
#, fuzzy
msgid "install and set up Hatch,"
msgstr "Hatchのインストール"
-#: ../../tutorials/trusted-publishing.md:189
+#: ../../tutorials/trusted-publishing.md:192
#, fuzzy
msgid "build your package and"
msgstr "パッケージをビルドするには `hatch build` を実行します:"
-#: ../../tutorials/trusted-publishing.md:190
+#: ../../tutorials/trusted-publishing.md:193
msgid "upload your package as an archive to the artifacts storage."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:193
+#: ../../tutorials/trusted-publishing.md:196
msgid ""
"Graphic showing an example of a release workflow that has just finished "
"running. Each step in the log is matched to one step in the workflow "
"definition."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:195
+#: ../../tutorials/trusted-publishing.md:198
msgid ""
"This figure shows an example of a release workflow that has just finished"
" running. Each step in the log is matched to one step in the workflow "
"definition."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:198
+#: ../../tutorials/trusted-publishing.md:201
msgid ""
"At the bottom of the workflow run page on GitHub, you should see a "
"section for the artifacts produced during runtime and uploaded to this "
"storage area:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:202
+#: ../../tutorials/trusted-publishing.md:205
msgid ""
"Graphic showing an example of an artifact produced by the release "
"workflow."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:204
+#: ../../tutorials/trusted-publishing.md:207
msgid ""
"This figure shows the artifact produced by the above release workflow. It"
" is now marked as expired since the workflow ran more than a day ago."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:207
+#: ../../tutorials/trusted-publishing.md:210
msgid ""
"You can download the artifact (before it expires), unzip it, and install "
"the wheel contained within. However, this should only be done if you want"
@@ -7259,11 +7521,11 @@ msgid ""
"using trusted publishing."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:212
+#: ../../tutorials/trusted-publishing.md:215
msgid "Configure automatic publishing to PyPI"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:214
+#: ../../tutorials/trusted-publishing.md:217
msgid ""
"The job you configured above using GitHub Actions builds your package "
"using your code. You still need to upload it to PyPI. You could upload "
@@ -7272,56 +7534,56 @@ msgid ""
"we uploaded the artifact to the temporary storage."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:220
+#: ../../tutorials/trusted-publishing.md:223
msgid ""
"In the new job, you will download the package from there and upload it to"
" PyPI. Since the `build` job does nothing else, there is no possibility "
"that the package could get compromised before the release."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:224
+#: ../../tutorials/trusted-publishing.md:227
msgid "Step 1: Add the upload job"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:226
+#: ../../tutorials/trusted-publishing.md:229
msgid ""
"In the `release.yaml` file, add the following new job, after the job "
"defined in the previous section:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:235
+#: ../../tutorials/trusted-publishing.md:238
msgid "Make sure to change the URL"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:237
+#: ../../tutorials/trusted-publishing.md:240
msgid "Remember to change the `url:` value to the URL for your package on PyPI!"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:240
+#: ../../tutorials/trusted-publishing.md:243
msgid "This job has two steps:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:242
+#: ../../tutorials/trusted-publishing.md:245
msgid ""
"It uses `download-artifact` to download the artifacts built in the "
"previous job"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:244
+#: ../../tutorials/trusted-publishing.md:247
msgid "It uses `gh-action-pypi-publish` to publish the package to PyPI."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:246
+#: ../../tutorials/trusted-publishing.md:249
msgid ""
"You are almost there!! Now, you just need to enable trusted publishing "
"for your project on PyPI. And then, your work is done!"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:249
+#: ../../tutorials/trusted-publishing.md:252
msgid "Step 2: Enable trusted publishing on PyPI"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:253
+#: ../../tutorials/trusted-publishing.md:256
msgid ""
"Diagram showing PyPI's trusted publisher workflow: Step 1 builds "
"distribution files via GitHub, Step 2 uses a trusted environment (PyPI), "
@@ -7329,7 +7591,7 @@ msgid ""
"connecting GitHub Action to Python Package Index."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:258
+#: ../../tutorials/trusted-publishing.md:261
msgid ""
"Before trusted publishing was created, in order to upload to PyPI from "
"GitHub actions you would have needed to add the username and password as "
@@ -7342,7 +7604,7 @@ msgid ""
"credentials."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:266
+#: ../../tutorials/trusted-publishing.md:269
msgid ""
"To prevent these incidents and improve supply chain security, developers "
"created [Trusted Publishing](https://docs.pypi.org/trusted-publishers/). "
@@ -7351,17 +7613,17 @@ msgid ""
"Actions) that is allowed to publish the package."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:271
+#: ../../tutorials/trusted-publishing.md:274
msgid ""
"You do not need to enter a token or password value in a trusted publisher"
" workflow. It's a secure connection between your"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:274
+#: ../../tutorials/trusted-publishing.md:277
msgid "Trusted Publishing outside of GitHub Actions"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:277
+#: ../../tutorials/trusted-publishing.md:280
msgid ""
"Trusted Publishing supports other automation platforms, beyond GitHub "
"Actions. It is also possible to configure a trusted publisher for "
@@ -7369,7 +7631,7 @@ msgid ""
" advanced uses, out of scope for this lesson."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:283
+#: ../../tutorials/trusted-publishing.md:286
msgid ""
"For this lesson, we will focus on configuring a trusted publisher for a "
"project that already exists on PyPI. If you completed the [lesson about "
@@ -7377,90 +7639,90 @@ msgid ""
"already created."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:285
+#: ../../tutorials/trusted-publishing.md:288
msgid ""
"This setup step needs to be performed only once for the project. Future "
"releases will only run the GitHub Actions workflow we are configuring in "
"`release.yaml`."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:288
+#: ../../tutorials/trusted-publishing.md:291
msgid ""
"On the [\"Your projects\" page on "
"PyPI](https://pypi.org/manage/projects/), click \"Manage\" on any project"
" you want to configure."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:292
+#: ../../tutorials/trusted-publishing.md:295
msgid ""
"Graphic showing a screenshot of the \"Your projects\" page on PyPI. The "
"\"Manage\" button for one of the projects is highlighted."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:294
+#: ../../tutorials/trusted-publishing.md:297
msgid ""
"This image shows several projects. The \"Manage\" button is highlighted "
"for one of the projects, the one we want to configure trusted publishing "
"for."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:297
+#: ../../tutorials/trusted-publishing.md:300
msgid "Then click \"Publishing\" in the project's sidebar."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:300
+#: ../../tutorials/trusted-publishing.md:303
msgid ""
"Graphic showing the management page for one project. The \"Publishing\" "
"link in the sidebar is highlighted."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:302
+#: ../../tutorials/trusted-publishing.md:305
msgid ""
"Once clicking on the \"Manage\" button we got to the project's page. In "
"the sidebar, we have the \"publishing\" option, as highlighted here."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:306
+#: ../../tutorials/trusted-publishing.md:309
msgid ""
"This will take you to the publisher configuration page for the project. "
"Trusted publishers can be configured via the forms here. Fill in the "
"GitHub form with the following information:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:310
+#: ../../tutorials/trusted-publishing.md:313
msgid ""
"Owner: the GitHub organization name for the organization that owns the "
"project. If this is your personal project, then use your GitHub username "
"here."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:312
+#: ../../tutorials/trusted-publishing.md:315
msgid "Repository name: the name of the repository that contains the project."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:313
+#: ../../tutorials/trusted-publishing.md:316
msgid ""
"Workflow name: Should be `release.yaml` if you followed this guide, it is"
" the workflow we just configured."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:315
+#: ../../tutorials/trusted-publishing.md:318
msgid ""
"Environment name: Should be `pypi`, as that is what we configured in "
"`release.yaml`."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:318
+#: ../../tutorials/trusted-publishing.md:321
msgid ""
"Once you fill in this form and click \"Add\" the publisher is configured "
"and can be used to publish new releases of your package."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:321
+#: ../../tutorials/trusted-publishing.md:324
msgid "Fully hardened GitHub Actions release workflow"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:323
+#: ../../tutorials/trusted-publishing.md:326
msgid ""
"For better security, it is also recommended to control the permissions of"
" the GitHub token used within each job of the workflow. The permissions "
@@ -7468,24 +7730,24 @@ msgid ""
"that configures trusted publishing and also does this is the following:"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:333
+#: ../../tutorials/trusted-publishing.md:336
msgid ""
"You can copy the above into your `release.yaml` file. You only need to "
"update the `url:` field and configure trusted publishing on PyPI."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:337
+#: ../../tutorials/trusted-publishing.md:340
msgid ""
"The workflow above should be up to date with the current versions of "
"GitHub actions. However, it's good to turn on Dependabot to update the "
"action versions in the future."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:340
+#: ../../tutorials/trusted-publishing.md:343
msgid "You have enabled trusted publishing for your project"
msgstr ""
-#: ../../tutorials/trusted-publishing.md:342
+#: ../../tutorials/trusted-publishing.md:345
msgid ""
"Congratulations!! You have now configured your project to do secure "
"releases when a new version is being tagged on GitHub. The workflow we "
@@ -7498,23 +7760,23 @@ msgid ""
" it securely."
msgstr ""
-#: ../../tutorials/trusted-publishing.md:346
+#: ../../tutorials/trusted-publishing.md:349
msgid ""
msgstr ""
-#: ../../tutorials/trusted-publishing.md:347
+#: ../../tutorials/trusted-publishing.md:350
msgid ""
""
msgstr ""
-#: ../../tutorials/trusted-publishing.md:348
+#: ../../tutorials/trusted-publishing.md:351
msgid ""
""
msgstr ""
-#: ../../tutorials/trusted-publishing.md:349
+#: ../../tutorials/trusted-publishing.md:352
msgid ""
msgstr ""
@@ -7817,3 +8079,141 @@ msgstr ""
#~ msgid "license and"
#~ msgstr "ライセンスと"
+
+#~ msgid ""
+#~ "This lesson uses the pyOpenSci Python"
+#~ " package copier template to create a"
+#~ " Python package quickly. Your package "
+#~ "will be installable both locally and "
+#~ "remotely from a website such as "
+#~ "GitHub (or GitLab) into a Python "
+#~ "environment."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The template will then begin to "
+#~ "copy files into the directory that "
+#~ "used above. (`.` means current working"
+#~ " directory"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "If you use the \"bells and "
+#~ "whistles\" default option when working "
+#~ "through the template prompts, our "
+#~ "template will create a complete package"
+#~ " setup with GitHub CI actions, "
+#~ "typing, tests, environments , and more"
+#~ " using Hatch. If you customize the"
+#~ " entire package, then you can select"
+#~ " what platform you wish to host "
+#~ "it on (GitHub vs GitLab), whether "
+#~ "you want typing, what documentation "
+#~ "engine you want to use, and more."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "[Sphinx](https://www.pyopensci.org/python-package-"
+#~ "guide/documentation/hosting-tools/sphinx-python-"
+#~ "package-documentation-tools.html) with the "
+#~ "pydata_sphinx_theme for documentation"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "A `pyproject.toml` file stores metadata "
+#~ "that provides instructions to various "
+#~ "tools interacting with it, including "
+#~ "Hatch, which will build your package."
+#~ " You can also specify metadata for"
+#~ " your package."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The metadata in your generated "
+#~ "pyproject.toml is already setup for you"
+#~ " using the information you provided "
+#~ "the copier template above."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Welcome to your shiny new package! "
+#~ "This page will help you get "
+#~ "started with using Hatch to run "
+#~ "tests, build and check your package, "
+#~ "and build your documentation."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "To begin, have a look at the "
+#~ "`pyproject.toml` file in your package "
+#~ "directory. This file contains the "
+#~ "configuration for your package. This "
+#~ "file is written using a .toml "
+#~ "format. [You can learn more about "
+#~ "toml here.](https://www.pyopensci.org/python-package-"
+#~ "guide/package-structure-code/pyproject-toml-"
+#~ "python-package-metadata.html) Here's the "
+#~ "TL&DR:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "In the pyOpenSci Python package "
+#~ "template, we have set up Hatch "
+#~ "environments. You will notice at the "
+#~ "bottom of the file, a [hatch "
+#~ "environment](https://hatch.pypa.io/1.13/environment/) section,"
+#~ " that looks like this:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Below is a Hatch environment definition"
+#~ " that you will find in your "
+#~ "[new project's pyproject.toml file](create-"
+#~ "python-package). It is set up to "
+#~ "[build your package's](build-package) "
+#~ "distribution files ([source distribution](python-"
+#~ "source-distribution) and [wheel](python-"
+#~ "wheel))."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Notice that the environment definition "
+#~ "declares two dependencies: `pip` and "
+#~ "`twine`, which the environment needs to"
+#~ " run successfully. This declaration is "
+#~ "similar to declaring dependencies for "
+#~ "your package at the top of your"
+#~ " `pyproject.toml`. This section tells Hatch"
+#~ " to create a new VENV with pip"
+#~ " and twine installed."
+#~ msgstr ""
+
+#~ msgid "Build your package's source (sdist) and wheel distributions"
+#~ msgstr "パッケージのソース (sdist) とwheelディストリビューションをビルドします。"
+
+#~ msgid "Configure PyPI Trusted Publishing for the project"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "GitHub Actions[^gha] is an infrastructure "
+#~ "provided by GitHub to automate software"
+#~ " workflows, straight from the GitHub "
+#~ "repository of the project. You can "
+#~ "configure automated testing for every "
+#~ "pull request, automate publishing of "
+#~ "documentation, automate creation of web "
+#~ "pages for the project, and even "
+#~ "automate the release process. For this"
+#~ " lesson, we will focus on using "
+#~ "actions to release and publish your "
+#~ "Python package securely to PyPI."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "For a release job, you need to "
+#~ "clone or check out the repository. "
+#~ "You can use the `actions/checkout` "
+#~ "action to check out the code. You"
+#~ " then install and use `hatch` to "
+#~ "build your package."
+#~ msgstr ""
diff --git a/locales/pt/LC_MESSAGES/CONTRIBUTING.po b/locales/pt/LC_MESSAGES/CONTRIBUTING.po
index 29863f4de..362f082db 100644
--- a/locales/pt/LC_MESSAGES/CONTRIBUTING.po
+++ b/locales/pt/LC_MESSAGES/CONTRIBUTING.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-05-18 10:26-0700\n"
+"POT-Creation-Date: 2026-07-29 09:02-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language: pt\n"
@@ -22,19 +22,19 @@ msgstr ""
#: ../../CONTRIBUTING.md:4
msgid "Contributing to the Python Packaging Guide"
-msgstr ""
+msgstr "Contribuindo para o Guia de Empacotamento Python"
#: ../../CONTRIBUTING.md:6
msgid "The guide is a community resource."
-msgstr ""
+msgstr "O guia é um recurso da comunidade."
#: ../../CONTRIBUTING.md:8
msgid "TL;DR"
-msgstr ""
+msgstr "TL;DR"
#: ../../CONTRIBUTING.md:10
msgid "We welcome contributions in the form of issues and pull requests:"
-msgstr ""
+msgstr "Recebemos contribuições na forma de issues e pull requests:"
#: ../../CONTRIBUTING.md:12
msgid ""
@@ -42,6 +42,9 @@ msgid ""
"[please open an issue here](https://github.com/pyOpenSci/python-package-"
"guide/issues)."
msgstr ""
+"Se você tem uma ideia de algo que deveria ser incluído no guia, [por "
+"favor abra uma issue aqui](https://github.com/pyOpenSci/python-package-"
+"guide/issues)."
#: ../../CONTRIBUTING.md:13
msgid ""
@@ -50,28 +53,38 @@ msgid ""
"modify the text directly. Or, if you are less comfortable with pull "
"requests, feel free to open an issue."
msgstr ""
+"Se você encontrar um erro de digitação, sinta-se à vontade para [enviar "
+"um pull request](https://github.com/pyOpenSci/python-package-guide/pulls)"
+" para modificar o texto diretamente. Ou, se você não se sentir tão "
+"confortável com pull requests, sinta-se à vontade para abrir uma issue."
#: ../../CONTRIBUTING.md:14
msgid ""
"If you are interested in helping translate the guide into other "
"languages, take a look at the [translation guide](./TRANSLATING.md)."
msgstr ""
+"Se você tem interesse em ajudar a traduzir o guia para outros idiomas, dê"
+" uma olhada no [guia de tradução](./TRANSLATING.md)."
#: ../../CONTRIBUTING.md:15
msgid ""
"If you want to see a larger change to the content of the guide book, "
"please submit an issue first!"
msgstr ""
+"Se você quiser propor uma mudança maior no conteúdo do guia, por favor "
+"abra uma issue primeiro!"
#: ../../CONTRIBUTING.md:17
msgid ""
"If you are unsure about how to contribute or are not familiar with git "
"and github, this guide will help you through the process."
msgstr ""
+"Se você não tem certeza de como contribuir ou não está familiarizado com "
+"git e github, este guia vai te ajudar durante todo o processo."
#: ../../CONTRIBUTING.md:19
msgid "How the Python Packaging Guide is structured"
-msgstr ""
+msgstr "Como o Guia de Empacotamento Python é estruturado"
#: ../../CONTRIBUTING.md:21
msgid ""
@@ -79,18 +92,23 @@ msgid ""
"rST) and we use **Sphinx**, a documentation engine built in `Python` to "
"build the HTML version you see online."
msgstr ""
+"O Guia de Empacotamento Python é escrito em myST (uma variante de "
+"MarkDown e rST) e usamos o **Sphinx**, um mecanismo de documentação "
+"construído em `Python` para gerar a versão em HTML que você vê online."
#: ../../CONTRIBUTING.md:23
msgid "We use a tool called Nox to manage the process of building the guide."
msgstr ""
+"Usamos uma ferramenta chamada Nox para gerenciar o processo de construção"
+" do guia."
#: ../../CONTRIBUTING.md:25
msgid "Two approaches to contributing"
-msgstr ""
+msgstr "Duas formas de contribuir"
#: ../../CONTRIBUTING.md:27
msgid "You can contribute to the guide using two approaches."
-msgstr ""
+msgstr "Você pode contribuir com o guia usando duas abordagens."
#: ../../CONTRIBUTING.md:29
msgid ""
@@ -100,6 +118,12 @@ msgid ""
"before submitting a pull request. It is the recommended approach for "
"larger contribution, like writing a whole new section."
msgstr ""
+"A primeira abordagem é usar uma cópia local do guia no seu computador. "
+"Essa opção exige uma configuração mais elaborada, mas permite que você "
+"construa o guia localmente para verificar se sua contribuição não "
+"introduziu nenhum bug antes de enviar um pull request. É a abordagem "
+"recomendada para contribuições maiores, como escrever uma seção "
+"inteiramente nova."
#: ../../CONTRIBUTING.md:31
msgid ""
@@ -111,10 +135,18 @@ msgid ""
"fixing typos, or if this is your first contribution to open source and "
"the first approach feels too intimidating."
msgstr ""
+"A segunda abordagem é fazer sua contribuição diretamente no site do "
+"GitHub. Essa opção não exige nenhuma configuração no seu computador e, "
+"embora sua contribuição ainda seja testada quando você enviar um PR "
+"(integração contínua), vai demorar mais para você receber algum feedback "
+"caso haja algum problema. É a melhor forma de fazer pequenas "
+"contribuições, como corrigir erros de digitação, ou se essa for sua "
+"primeira contribuição para open source e a primeira abordagem parecer "
+"intimidadora demais."
#: ../../CONTRIBUTING.md:33
msgid "Forking the repository"
-msgstr ""
+msgstr "Fazendo um fork do repositório"
#: ../../CONTRIBUTING.md:35
msgid ""
@@ -123,6 +155,10 @@ msgid ""
"can do this by clicking the \"Fork\" button in the top right corner of "
"the repository page."
msgstr ""
+"Independentemente da abordagem que você escolher, o primeiro passo é "
+"fazer um fork do repositório do Guia de Empacotamento Python para o seu "
+"espaço pessoal no GitHub. Você pode fazer isso clicando no botão \"Fork\""
+" no canto superior direito da página do repositório."
#: ../../CONTRIBUTING.md:38
msgid ""
@@ -130,20 +166,26 @@ msgid ""
"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
"clone/) is a good resource to learn more about forking."
msgstr ""
+"[Saiba mais: Fork and Clone GitHub "
+"Repos](https://datascienceskills.org/lessons/git-github/git-intro/3-fork-"
+"clone/) é um bom recurso para aprender mais sobre fork."
#: ../../CONTRIBUTING.md:40
msgid "To fork a repo,"
-msgstr ""
+msgstr "Para fazer um fork de um repositório,"
#: ../../CONTRIBUTING.md:42
msgid "Make sure you are logged into GitHub."
-msgstr ""
+msgstr "Certifique-se de que você está logado no GitHub."
#: ../../CONTRIBUTING.md:44
msgid ""
"Go to the repo you would like to fork, in this case the [Python Packaging"
" Guide](https://github.com/pyopensci/python-package-guide) repo."
msgstr ""
+"Vá até o repositório do qual você gostaria de fazer um fork, nesse caso o"
+" [Python Packaging Guide](https://github.com/pyopensci/python-package-"
+"guide)."
#: ../../CONTRIBUTING.md:46
msgid ""
@@ -154,14 +196,20 @@ msgid ""
"`https://github.com//python-package-guide`, where `` "
"is your GitHub username."
msgstr ""
+"No canto superior direito da página há um botão 'Fork'. Clique nesse "
+"botão. Você será levado a uma nova página onde vai 'Create a new fork'. "
+"Sinta-se à vontade para manter todas as opções padrão e clicar em 'Create"
+" fork'. Isso vai criar uma cópia do repositório em "
+"`https://github.com//python-package-guide`, onde `` é"
+" o seu nome de usuário do GitHub."
#: ../../CONTRIBUTING.md:51
msgid "Contributing via the GitHub website"
-msgstr ""
+msgstr "Contribuindo pelo site do GitHub"
#: ../../CONTRIBUTING.md:53
msgid "How to edit a MarkDown file"
-msgstr ""
+msgstr "Como editar um arquivo MarkDown"
#: ../../CONTRIBUTING.md:55
msgid ""
@@ -170,34 +218,42 @@ msgid ""
" the file you want to edit and click the pencil icon in the top right "
"corner of the file."
msgstr ""
+"O Guia de Empacotamento Python é escrito em myST, uma variante de "
+"MarkDown. Você pode editar os arquivos diretamente no site do GitHub. "
+"Para fazer isso, navegue até o arquivo que deseja editar e clique no "
+"ícone de lápis no canto superior direito do arquivo."
#: ../../CONTRIBUTING.md:58
msgid "Edit button in GitHub"
-msgstr ""
+msgstr "Botão de editar no GitHub"
#: ../../CONTRIBUTING.md:64
msgid ""
"An image showing how to edit a file in GitHub. The pencil icon is "
"highlighted with a red rectangle."
msgstr ""
+"Uma imagem mostrando como editar um arquivo no GitHub. O ícone de lápis "
+"está destacado com um retângulo vermelho."
#: ../../CONTRIBUTING.md:66
msgid "Edit file in GitHub"
-msgstr ""
+msgstr "Editar arquivo no GitHub"
#: ../../CONTRIBUTING.md:72
msgid ""
"An image showing when a file is being edited in GitHub. The file content "
"is displayed in a text editor."
msgstr ""
+"Uma imagem mostrando um arquivo sendo editado no GitHub. O conteúdo do "
+"arquivo é exibido em um editor de texto."
#: ../../CONTRIBUTING.md:75
msgid "To preview your changes, click the \"Preview changes\" tab."
-msgstr ""
+msgstr "Para pré-visualizar suas alterações, clique na aba \"Preview changes\"."
#: ../../CONTRIBUTING.md:77
msgid "Preview changes in GitHub"
-msgstr ""
+msgstr "Pré-visualizar alterações no GitHub"
#: ../../CONTRIBUTING.md:83
msgid ""
@@ -205,10 +261,13 @@ msgid ""
"displayed in a text editor. The preview changes tab is highlighted with a"
" red rectangle."
msgstr ""
+"Uma imagem mostrando como pré-visualizar alterações no GitHub. O conteúdo"
+" do arquivo é exibido em um editor de texto. A aba de preview changes "
+"está destacada com um retângulo vermelho."
#: ../../CONTRIBUTING.md:86
msgid "How to commit your changes"
-msgstr ""
+msgstr "Como fazer commit das suas alterações"
#: ../../CONTRIBUTING.md:88
msgid ""
@@ -217,10 +276,15 @@ msgid ""
"write a title and a description for your changes. Make sure to write a "
"clear and concise title that describes the changes you made."
msgstr ""
+"Quando você terminar de editar o arquivo, role a página até o final. Você"
+" vai ver uma seção chamada \"Commit changes\". Aqui você pode escrever um"
+" título e uma descrição para as suas alterações. Certifique-se de "
+"escrever um título claro e conciso que descreva as alterações que você "
+"fez."
#: ../../CONTRIBUTING.md:91
msgid "Commit changes in GitHub"
-msgstr ""
+msgstr "Fazer commit das alterações no GitHub"
#: ../../CONTRIBUTING.md:97
msgid ""
@@ -228,20 +292,25 @@ msgid ""
"displayed in a text editor. The commit changes section is highlighted "
"with a red rectangle."
msgstr ""
+"Uma imagem mostrando como fazer commit de alterações no GitHub. A "
+"mensagem de commit é exibida em um editor de texto. A seção de commit "
+"changes está destacada com um retângulo vermelho."
#: ../../CONTRIBUTING.md:100
msgid ""
"After writing your commit message, click the \"Commit changes\" button to"
" save your changes."
msgstr ""
+"Depois de escrever sua mensagem de commit, clique no botão \"Commit "
+"changes\" para salvar suas alterações."
#: ../../CONTRIBUTING.md:102
msgid "Contributing locally on your computer"
-msgstr ""
+msgstr "Contribuindo localmente no seu computador"
#: ../../CONTRIBUTING.md:104
msgid "Clone your forked repository"
-msgstr ""
+msgstr "Clone o seu repositório com fork"
#: ../../CONTRIBUTING.md:106
msgid ""
@@ -249,16 +318,22 @@ msgid ""
"URL of your forked repository and run the following command in your "
"terminal:"
msgstr ""
+"Para clonar o seu repositório com fork no seu computador, você precisa "
+"copiar a URL do seu repositório com fork e executar o seguinte comando no"
+" seu terminal:"
#: ../../CONTRIBUTING.md:111
msgid ""
"Replace `` with the URL of your forked repository. You can find the "
"URL by clicking the green \"Code\" button on your forked repository page."
msgstr ""
+"Substitua `` pela URL do seu repositório com fork. Você pode "
+"encontrar a URL clicando no botão verde \"Code\" na página do seu "
+"repositório com fork."
#: ../../CONTRIBUTING.md:113
msgid "Clone repository in GitHub"
-msgstr ""
+msgstr "Clonar repositório no GitHub"
#: ../../CONTRIBUTING.md:119
msgid ""
@@ -266,10 +341,13 @@ msgid ""
"repository is displayed in a text editor. The code button is highlighted "
"with a red rectangle."
msgstr ""
+"Uma imagem mostrando como clonar um repositório no GitHub. A URL do "
+"repositório é exibida em um editor de texto. O botão code está destacado "
+"com um retângulo vermelho."
#: ../../CONTRIBUTING.md:122
msgid "Create a new branch"
-msgstr ""
+msgstr "Crie uma nova branch"
#: ../../CONTRIBUTING.md:124
msgid ""
@@ -277,14 +355,17 @@ msgid ""
"This will help keep your changes separate from the main branch and make "
"it easier to submit a pull request."
msgstr ""
+"Antes de fazer qualquer alteração, você deve criar uma nova branch para "
+"trabalhar. Isso vai ajudar a manter suas alterações separadas da branch "
+"principal e vai facilitar o envio de um pull request."
#: ../../CONTRIBUTING.md:126
msgid "To create a new branch, run the following command in your terminal:"
-msgstr ""
+msgstr "Para criar uma nova branch, execute o seguinte comando no seu terminal:"
#: ../../CONTRIBUTING.md:132
msgid "Create a virtual environment"
-msgstr ""
+msgstr "Crie um ambiente virtual"
#: ../../CONTRIBUTING.md:134
msgid ""
@@ -292,337 +373,443 @@ msgid ""
"install the dependencies. You can do this by running the following "
"commands in your terminal:"
msgstr ""
+"Para construir o guia localmente, você precisa criar um ambiente virtual "
+"e instalar as dependências. Você pode fazer isso executando os seguintes "
+"comandos no seu terminal:"
#: ../../CONTRIBUTING.md:136
msgid "**On Windows**:"
-msgstr ""
+msgstr "**No Windows**:"
#: ../../CONTRIBUTING.md:142
msgid "**On MacOS and Linux**:"
-msgstr ""
+msgstr "**No MacOS e Linux**:"
#: ../../CONTRIBUTING.md:148
msgid "Install the development dependencies"
-msgstr ""
+msgstr "Instale as dependências de desenvolvimento"
#: ../../CONTRIBUTING.md:150
msgid ""
"To install the development dependencies, run the following command in "
"your terminal:"
msgstr ""
+"Para instalar as dependências de desenvolvimento, execute o seguinte "
+"comando no seu terminal:"
#: ../../CONTRIBUTING.md:156
-msgid "Commit your changes"
+msgid ""
+"The quotes around `'.[dev]'` matter if you use zsh, the default shell on "
+"macOS. Without them, zsh treats the square brackets as a filename pattern"
+" and fails with `no matches found`."
msgstr ""
#: ../../CONTRIBUTING.md:158
msgid ""
-"After making your changes, you need to commit them to your local "
-"repository. To do this, run the following commands in your terminal:"
+"On Windows they are harmless in PowerShell, but if you use the older "
+"`cmd.exe` prompt you need to remove them and run `python -m pip install "
+"-e .[dev]` instead, because `cmd.exe` does not strip single quotes."
msgstr ""
#: ../../CONTRIBUTING.md:160
-msgid "To see the changes you made:"
+msgid "Commit your changes"
+msgstr "Faça commit das suas alterações"
+
+#: ../../CONTRIBUTING.md:162
+msgid ""
+"After making your changes, you need to commit them to your local "
+"repository. To do this, run the following commands in your terminal:"
msgstr ""
+"Depois de fazer suas alterações, você precisa fazer commit delas no seu "
+"repositório local. Para fazer isso, execute os seguintes comandos no seu "
+"terminal:"
#: ../../CONTRIBUTING.md:164
-msgid "To add the changes to the staging area:"
-msgstr ""
+msgid "To see the changes you made:"
+msgstr "Para ver as alterações que você fez:"
#: ../../CONTRIBUTING.md:168
-msgid "To commit the changes:"
-msgstr ""
+msgid "To add the changes to the staging area:"
+msgstr "Para adicionar as alterações à staging area:"
#: ../../CONTRIBUTING.md:172
+msgid "To commit the changes:"
+msgstr "Para fazer commit das alterações:"
+
+#: ../../CONTRIBUTING.md:176
msgid ""
"Replace `\"Your commit message here\"` with a clear and concise message "
"that describes the changes you made."
msgstr ""
+"Substitua `\"Your commit message here\"` por uma mensagem clara e concisa"
+" que descreva as alterações que você fez."
-#: ../../CONTRIBUTING.md:174
+#: ../../CONTRIBUTING.md:178
msgid "How to build the guide locally"
-msgstr ""
+msgstr "Como construir o guia localmente"
-#: ../../CONTRIBUTING.md:176
+#: ../../CONTRIBUTING.md:180
msgid ""
"To build the guide locally, you can use the `nox` command. This will run "
"the default `nox` session, which builds the guide and opens it in your "
"browser."
msgstr ""
+"Para construir o guia localmente, você pode usar o comando `nox`. Isso "
+"vai executar a sessão padrão do `nox`, que constrói o guia e abre ele no "
+"seu navegador."
-#: ../../CONTRIBUTING.md:178
+#: ../../CONTRIBUTING.md:182
msgid ""
"To see the different sessions available, you can run the following "
"command in your terminal:"
msgstr ""
+"Para ver as diferentes sessões disponíveis, você pode executar o seguinte"
+" comando no seu terminal:"
-#: ../../CONTRIBUTING.md:183
+#: ../../CONTRIBUTING.md:187
msgid ""
"There are different sessions in nox related to building the docs: `docs`,"
" `docs-test`, `docs-live`. You can run them by specifying the session "
"name after the `nox` command."
msgstr ""
+"Existem diferentes sessões no nox relacionadas à construção dos docs: "
+"`docs`, `docs-test`, `docs-live`. Você pode executá-las especificando o "
+"nome da sessão depois do comando `nox`."
-#: ../../CONTRIBUTING.md:185
+#: ../../CONTRIBUTING.md:189
msgid "`docs`: this session builds the guide and opens it in your browser."
-msgstr ""
+msgstr "`docs`: essa sessão constrói o guia e abre ele no seu navegador."
-#: ../../CONTRIBUTING.md:189
+#: ../../CONTRIBUTING.md:193
msgid ""
"To see the guide built locally, open the file `_build/html/index.html` in"
" your browser."
msgstr ""
+"Para ver o guia construído localmente, abra o arquivo "
+"`_build/html/index.html` no seu navegador."
-#: ../../CONTRIBUTING.md:191
+#: ../../CONTRIBUTING.md:195
msgid "`docs-linkcheck`: this session checks that links in documentation work"
msgstr ""
+"`docs-linkcheck`: essa sessão verifica se os links na documentação "
+"funcionam"
-#: ../../CONTRIBUTING.md:195
+#: ../../CONTRIBUTING.md:199
msgid ""
"If the tests fail, you will see logs in the terminal and in "
"`_build/linkcheck_output/output.txt`."
msgstr ""
+"Se os testes falharem, você vai ver logs no terminal e em "
+"`_build/linkcheck_output/output.txt`."
-#: ../../CONTRIBUTING.md:197
+#: ../../CONTRIBUTING.md:201
msgid "`docs-test`: this session runs the tests for the guide."
-msgstr ""
+msgstr "`docs-test`: essa sessão executa os testes do guia."
-#: ../../CONTRIBUTING.md:201
+#: ../../CONTRIBUTING.md:205
msgid ""
"If the tests fail, you will see an error message in your terminal. You "
"need to fix the errors before submitting your pull request."
msgstr ""
+"Se os testes falharem, você vai ver uma mensagem de erro no seu terminal."
+" Você precisa corrigir os erros antes de enviar o seu pull request."
-#: ../../CONTRIBUTING.md:203
+#: ../../CONTRIBUTING.md:207
msgid ""
"`docs-live`: this session builds the guide and opens it in your browser "
"with live reloading."
msgstr ""
+"`docs-live`: essa sessão constrói o guia e abre ele no seu navegador com "
+"live reloading."
-#: ../../CONTRIBUTING.md:207
+#: ../../CONTRIBUTING.md:211
msgid ""
"open the local version of the guide in your browser at ``localhost`` "
"shown in the terminal."
msgstr ""
+"abra a versão local do guia no seu navegador em ``localhost`` mostrado no"
+" terminal."
-#: ../../CONTRIBUTING.md:209
+#: ../../CONTRIBUTING.md:213
msgid "Before you submit your pull request"
-msgstr ""
+msgstr "Antes de enviar o seu pull request"
-#: ../../CONTRIBUTING.md:211
+#: ../../CONTRIBUTING.md:215
msgid ""
"Before submitting your pull request, make sure to run the tests and check"
" the formatting of your code."
msgstr ""
+"Antes de enviar o seu pull request, certifique-se de executar os testes e"
+" verificar a formatação do seu código."
-#: ../../CONTRIBUTING.md:216
+#: ../../CONTRIBUTING.md:220
msgid ""
"If the tests fail, you will see an error message in your terminal. You "
"need to fix the errors before submitting your pull request. Also make "
"sure to check the formatting of your documentation by building the docs "
"locally and checking that your changes look correct."
msgstr ""
+"Se os testes falharem, você vai ver uma mensagem de erro no seu terminal."
+" Você precisa corrigir os erros antes de enviar o seu pull request. "
+"Certifique-se também de verificar a formatação da sua documentação "
+"construindo os docs localmente e conferindo se as suas alterações estão "
+"corretas."
-#: ../../CONTRIBUTING.md:220
+#: ../../CONTRIBUTING.md:224
msgid "Submitting a pull request with your contribution"
-msgstr ""
+msgstr "Enviando um pull request com a sua contribuição"
-#: ../../CONTRIBUTING.md:222
+#: ../../CONTRIBUTING.md:226
msgid "How to make a pull request"
-msgstr ""
+msgstr "Como fazer um pull request"
-#: ../../CONTRIBUTING.md:224
+#: ../../CONTRIBUTING.md:228
msgid ""
"To open a pull request on GitHub, navigate to the main page of your "
"forked repository and click on the \"Pull requests\" tab."
msgstr ""
+"Para abrir um pull request no GitHub, navegue até a página principal do "
+"seu repositório com fork e clique na aba \"Pull requests\"."
-#: ../../CONTRIBUTING.md:226
+#: ../../CONTRIBUTING.md:230
msgid "Pull requests tab in GitHub"
-msgstr ""
+msgstr "Aba de pull requests no GitHub"
-#: ../../CONTRIBUTING.md:232
+#: ../../CONTRIBUTING.md:236
msgid ""
"An image showing how to navigate to the pull requests tab in GitHub. The "
"pull requests tab is highlighted with a red rectangle."
msgstr ""
+"Uma imagem mostrando como navegar até a aba de pull requests no GitHub. A"
+" aba de pull requests está destacada com um retângulo vermelho."
-#: ../../CONTRIBUTING.md:235
+#: ../../CONTRIBUTING.md:239
msgid "Click on the \"New pull request\" button."
-msgstr ""
+msgstr "Clique no botão \"New pull request\"."
-#: ../../CONTRIBUTING.md:237
+#: ../../CONTRIBUTING.md:241
msgid "New pull request button in GitHub"
-msgstr ""
+msgstr "Botão de novo pull request no GitHub"
-#: ../../CONTRIBUTING.md:243
+#: ../../CONTRIBUTING.md:247
msgid ""
"An image showing how to create a new pull request in GitHub. The new pull"
" request button is highlighted with a red rectangle."
msgstr ""
+"Uma imagem mostrando como criar um novo pull request no GitHub. O botão "
+"de novo pull request está destacado com um retângulo vermelho."
-#: ../../CONTRIBUTING.md:246
+#: ../../CONTRIBUTING.md:250
msgid ""
"Write a clear and concise title and description for your pull request. "
"Make sure to describe the changes you made and why they are necessary."
msgstr ""
+"Escreva um título e uma descrição claros e concisos para o seu pull "
+"request. Certifique-se de descrever as alterações que você fez e por que "
+"elas são necessárias."
-#: ../../CONTRIBUTING.md:248
+#: ../../CONTRIBUTING.md:252
msgid "What happens when you submit a pull request (CI/CD)"
-msgstr ""
+msgstr "O que acontece quando você envia um pull request (CI/CD)"
-#: ../../CONTRIBUTING.md:250
+#: ../../CONTRIBUTING.md:254
msgid ""
"Once you submit a pull request, a series of checks will be run to ensure "
"that your changes do not introduce any bugs or errors. These checks "
"include:"
msgstr ""
+"Assim que você envia um pull request, uma série de verificações vai ser "
+"executada para garantir que as suas alterações não introduzam nenhum bug "
+"ou erro. Essas verificações incluem:"
-#: ../../CONTRIBUTING.md:252
+#: ../../CONTRIBUTING.md:256
msgid ""
"**Code formatting and styles**: checks that your code is formatted "
"correctly, by `pre-commit.ci - pr check`."
msgstr ""
+"**Formatação e estilo do código**: verifica se o seu código está "
+"formatado corretamente, por meio do `pre-commit.ci - pr check`."
-#: ../../CONTRIBUTING.md:253
+#: ../../CONTRIBUTING.md:257
msgid ""
"**docs build**: checks that the documentation builds correctly, using "
"`circleci`."
msgstr ""
+"**docs build**: verifica se a documentação é construída corretamente, "
+"usando `circleci`."
-#: ../../CONTRIBUTING.md:255
+#: ../../CONTRIBUTING.md:259
msgid "You will see the status of these checks in your pull request."
-msgstr ""
+msgstr "Você vai ver o status dessas verificações no seu pull request."
-#: ../../CONTRIBUTING.md:257
+#: ../../CONTRIBUTING.md:261
msgid "Pull request checks in GitHub"
msgstr ""
-#: ../../CONTRIBUTING.md:263
+#: ../../CONTRIBUTING.md:267
msgid ""
"An image showing the status of the checks in a pull request in GitHub. "
"The checks are displayed in a table with a status icon next to each "
"check. The checks are highlighted with a red rectangle."
msgstr ""
+"Uma imagem mostrando o status das verificações em um pull request no "
+"GitHub. As verificações são exibidas em uma tabela com um ícone de status"
+" ao lado de cada verificação. As verificações estão destacadas com um "
+"retângulo vermelho."
-#: ../../CONTRIBUTING.md:265
+#: ../../CONTRIBUTING.md:269
msgid ""
"If any of these checks fail, you will see an error message in your pull "
"request. You need to fix the errors before your changes can be merged."
msgstr ""
+"Se alguma dessas verificações falhar, você vai ver uma mensagem de erro "
+"no seu pull request. Você precisa corrigir os erros antes que as suas "
+"alterações possam ser mescladas."
-#: ../../CONTRIBUTING.md:267
+#: ../../CONTRIBUTING.md:271
msgid "Pull request checks failed in GitHub"
-msgstr ""
+msgstr "Verificações de pull request com falha no GitHub"
-#: ../../CONTRIBUTING.md:273
+#: ../../CONTRIBUTING.md:277
msgid ""
"An image showing the status of the checks in a pull request in GitHub. "
"The checks are displayed in a table with a status icon next to each "
"check. The checks that failed and the details link are highlighted with a"
" red rectangle."
msgstr ""
+"Uma imagem mostrando o status das verificações em um pull request no "
+"GitHub. As verificações são exibidas em uma tabela com um ícone de status"
+" ao lado de cada verificação. As verificações que falharam e o link de "
+"detalhes estão destacados com um retângulo vermelho."
-#: ../../CONTRIBUTING.md:276
+#: ../../CONTRIBUTING.md:280
msgid ""
"To get more information about the errors, you can click on the "
"\"Details\" link next to the failed check."
msgstr ""
+"Para obter mais informações sobre os erros, você pode clicar no link "
+"\"Details\" ao lado da verificação que falhou."
-#: ../../CONTRIBUTING.md:278
+#: ../../CONTRIBUTING.md:282
msgid "What to expect from the review process"
-msgstr ""
+msgstr "O que esperar do processo de revisão"
-#: ../../CONTRIBUTING.md:280
+#: ../../CONTRIBUTING.md:284
msgid ""
"Once you submit a pull request, a maintainer of the repository will "
"review your changes and provide feedback. The review process may involve:"
msgstr ""
+"Assim que você envia um pull request, um mantenedor do repositório vai "
+"revisar as suas alterações e dar um feedback. O processo de revisão pode "
+"envolver:"
-#: ../../CONTRIBUTING.md:282
+#: ../../CONTRIBUTING.md:286
msgid ""
"**Comments**: the reviewer may leave comments on your pull request to ask"
" questions or provide feedback."
msgstr ""
+"**Comentários**: quem está revisando pode deixar comentários no seu pull "
+"request para fazer perguntas ou dar feedback."
-#: ../../CONTRIBUTING.md:283
+#: ../../CONTRIBUTING.md:287
msgid ""
"**Suggestions**: the reviewer may suggest changes to your code or "
"documentation."
msgstr ""
+"**Sugestões**: quem está revisando pode sugerir alterações no seu código "
+"ou na sua documentação."
-#: ../../CONTRIBUTING.md:284
+#: ../../CONTRIBUTING.md:288
msgid ""
"**Approvals**: once the reviewer is satisfied with your changes, they "
"will approve the pull request."
msgstr ""
+"**Aprovações**: assim que quem está revisando estiver satisfeito com as "
+"suas alterações, ele vai aprovar o pull request."
-#: ../../CONTRIBUTING.md:286
+#: ../../CONTRIBUTING.md:290
msgid ""
"You can make changes to your pull request by pushing new commits to the "
"branch. The pull request will be updated automatically with your new "
"changes."
msgstr ""
+"Você pode fazer alterações no seu pull request enviando novos commits "
+"para a branch. O pull request vai ser atualizado automaticamente com as "
+"suas novas alterações."
-#: ../../CONTRIBUTING.md:288
+#: ../../CONTRIBUTING.md:292
msgid ""
"Once your pull request is approved, it will be merged into the main "
"branch and your changes will be included in the guide."
msgstr ""
+"Assim que o seu pull request for aprovado, ele vai ser mesclado na branch"
+" principal e as suas alterações vão ser incluídas no guia."
-#: ../../CONTRIBUTING.md:290
+#: ../../CONTRIBUTING.md:294
msgid "Additional help"
-msgstr ""
+msgstr "Ajuda adicional"
-#: ../../CONTRIBUTING.md:292
+#: ../../CONTRIBUTING.md:296
msgid "How to get help"
-msgstr ""
+msgstr "Como conseguir ajuda"
-#: ../../CONTRIBUTING.md:294
+#: ../../CONTRIBUTING.md:298
msgid ""
"*__TODO__: This section should describe the options for finding more help"
" in case beginner contributors need more help (e.g., create an issue, "
"post in a forum, etc).*"
msgstr ""
+"*__TODO__: Essa seção deve descrever as opções para encontrar mais ajuda "
+"caso contribuidores iniciantes precisem de mais suporte (por exemplo, "
+"criar uma issue, postar em um fórum, etc).*"
-#: ../../CONTRIBUTING.md:296
+#: ../../CONTRIBUTING.md:300
msgid "Additional resources"
-msgstr ""
+msgstr "Recursos adicionais"
-#: ../../CONTRIBUTING.md:298
+#: ../../CONTRIBUTING.md:302
msgid ""
"*__TODO__: It should also include links to beginner documentation, like "
"the GitHub docs.*"
msgstr ""
+"*__TODO__: Também deve incluir links para documentação para iniciantes, "
+"como os docs do GitHub.*"
-#: ../../CONTRIBUTING.md:300
+#: ../../CONTRIBUTING.md:304
msgid "Annex"
-msgstr ""
+msgstr "Anexo"
-#: ../../CONTRIBUTING.md:302
+#: ../../CONTRIBUTING.md:306
msgid "Code examples"
-msgstr ""
+msgstr "Exemplos de código"
-#: ../../CONTRIBUTING.md:304
+#: ../../CONTRIBUTING.md:308
msgid ""
"This guide uses the [literalinclude Sphinx directive](https://www.sphinx-"
"doc.org/en/master/usage/restructuredtext/directives.html#directive-"
"literalinclude) whenever possible to keep code and prose separate. Code "
"for use in the documentation is kept in the `examples/` folder."
msgstr ""
+"Este guia usa a [diretiva literalinclude do Sphinx](https://www.sphinx-"
+"doc.org/en/master/usage/restructuredtext/directives.html#directive-"
+"literalinclude) sempre que possível para manter o código e o texto "
+"separados. O código usado na documentação fica na pasta `examples/`."
-#: ../../CONTRIBUTING.md:308
+#: ../../CONTRIBUTING.md:312
msgid "Referencing code in documentation"
-msgstr ""
+msgstr "Referenciando código na documentação"
-#: ../../CONTRIBUTING.md:310
+#: ../../CONTRIBUTING.md:314
msgid ""
"If an example is present elsewhere in the documentation that you want to "
"use, you can copy the `literalinclude` directive verbatim and the "
"examples will stay in sync."
msgstr ""
+"Se já existe um exemplo em outro lugar da documentação que você queira "
+"usar, você pode copiar a diretiva `literalinclude` exatamente como está e"
+" os exemplos vão se manter sincronizados."
-#: ../../CONTRIBUTING.md:313
+#: ../../CONTRIBUTING.md:317
msgid ""
"If you already see code in the examples folder that you can use for new "
"documentation, a new `literalinclude` can be made to extract it into the "
@@ -631,26 +818,41 @@ msgid ""
"`:language:` and `:lines:`. The former makes code examples prettier, and "
"the later can protect your example from future modifications to the code."
msgstr ""
+"Se você já vê código na pasta examples que pode usar para uma nova "
+"documentação, um novo `literalinclude` pode ser criado para extraí-lo "
+"para o site. Basta um caminho relativo para o código para um "
+"`literalinclude` funcionar, mas você deveria, em quase todos os casos, "
+"também fornecer um `:language:` e `:lines:`. O primeiro deixa os exemplos"
+" de código mais bonitos, e o segundo pode proteger o seu exemplo de "
+"futuras modificações no código."
-#: ../../CONTRIBUTING.md:318
+#: ../../CONTRIBUTING.md:322
msgid ""
"**Pro tip**: As an alternative to `:lines:` there are also the `:start-"
"after:`, `:start-at:`, `:end-before:`, and `:end-at:` options. And if the"
" example code is Python, `:pyobject:` can be an even more future-proof "
"way to keep the same documentation content even through code refactors."
msgstr ""
+"**Dica**: como alternativa a `:lines:`, existem também as opções `:start-"
+"after:`, `:start-at:`, `:end-before:` e `:end-at:`. E se o código de "
+"exemplo for Python, `:pyobject:` pode ser uma forma ainda mais durável de"
+" manter o mesmo conteúdo de documentação mesmo depois de refatorações no "
+"código."
-#: ../../CONTRIBUTING.md:322
+#: ../../CONTRIBUTING.md:326
msgid ""
"If you need example code that doesn't yet exist in `examples/` see "
"[creating code for documentation](#creating-code-for-documentation)."
msgstr ""
+"Se você precisar de um código de exemplo que ainda não existe em "
+"`examples/`, veja [criando código para documentação](#creating-code-for-"
+"documentation)."
-#: ../../CONTRIBUTING.md:325
+#: ../../CONTRIBUTING.md:329
msgid "Creating code for documentation"
-msgstr ""
+msgstr "Criando código para documentação"
-#: ../../CONTRIBUTING.md:327
+#: ../../CONTRIBUTING.md:331
msgid ""
"Whenever you come across a place that could benefit from a code block, "
"instead of writing it in-line with a code fence (`` ``` `` blocked text) "
@@ -658,8 +860,13 @@ msgid ""
"already exist; [see referencing code in documentation ](#referencing-"
"code-in-documentation)."
msgstr ""
+"Sempre que você encontrar um lugar que poderia se beneficiar de um bloco "
+"de código, em vez de escrevê-lo em linha com um code fence (bloco de "
+"texto `` ``` ``) você pode escrevê-lo como um arquivo no seu próprio "
+"formato. Seu exemplo pode até já existir; [veja referenciando código na "
+"documentação](#referencing-code-in-documentation)."
-#: ../../CONTRIBUTING.md:331
+#: ../../CONTRIBUTING.md:335
msgid ""
"If you want to add a new example that doesn't fit into any of the "
"existing example files, you can create a new file and reference it in a "
@@ -667,8 +874,14 @@ msgid ""
"one of the existing example projects please add it there; otherwise "
"create a new folder in the `examples` directory."
msgstr ""
+"Se você quiser adicionar um novo exemplo que não se encaixa em nenhum dos"
+" arquivos de exemplo existentes, você pode criar um novo arquivo e "
+"referenciá-lo em um bloco `literalinclude`. Se fizer sentido esse arquivo"
+" ficar dentro de um dos projetos de exemplo existentes, por favor "
+"adicione ele lá; caso contrário, crie uma nova pasta no diretório "
+"`examples`."
-#: ../../CONTRIBUTING.md:335
+#: ../../CONTRIBUTING.md:339
msgid ""
"If an existing example is incomplete or a new example makes sense to be "
"added to an existing file, go ahead and add it, but take care to not "
@@ -676,15 +889,24 @@ msgid ""
" that rewrite it. So for instance, add new functions to the end of the "
"file, new methods after all existing ones in a class."
msgstr ""
+"Se um exemplo existente estiver incompleto ou fizer sentido adicionar um "
+"novo exemplo a um arquivo já existente, vá em frente e adicione, mas tome"
+" cuidado para não quebrar o resto do guia. Sempre que possível, estenda o"
+" exemplo em vez de reescrevê-lo. Por exemplo, adicione novas funções no "
+"final do arquivo, novos métodos depois de todos os já existentes em uma "
+"classe."
-#: ../../CONTRIBUTING.md:339
+#: ../../CONTRIBUTING.md:343
msgid ""
"Example code is checked for correctness, so adding a new example may "
"require adding additional tests for coverage, and will require fixing any"
" failing tests."
msgstr ""
+"O código de exemplo é verificado quanto à correção, então adicionar um "
+"novo exemplo pode exigir a adição de testes extras para cobertura, e vai "
+"exigir a correção de qualquer teste que falhar."
-#: ../../CONTRIBUTING.md:342
+#: ../../CONTRIBUTING.md:346
msgid ""
"***⚠️ WARNING***: great care should be taken when modifying existing "
"example code, especially any modification beyond appending to the end of "
@@ -694,30 +916,41 @@ msgid ""
" you find yourself modifying existing examples try running this command "
"and then checking those pages in a new build."
msgstr ""
+"***⚠️ AVISO***: um cuidado especial deve ser tomado ao modificar código "
+"de exemplo já existente, principalmente qualquer modificação além de "
+"adicionar ao final do arquivo. Todos os exemplos de código são "
+"(potencialmente) exemplos compartilhados. Isso torna os exemplos no guia "
+"mais consistentes, mas pode gerar efeitos à distância ao modificar os "
+"exemplos para um caso de uso específico. Se você se pegar modificando "
+"exemplos existentes, tente executar este comando e depois conferir essas "
+"páginas em um novo build."
-#: ../../CONTRIBUTING.md:350
+#: ../../CONTRIBUTING.md:354
msgid "Example:"
-msgstr ""
+msgstr "Exemplo"
-#: ../../CONTRIBUTING.md:352
+#: ../../CONTRIBUTING.md:356
msgid "Instead of writing example code in markdown like this"
-msgstr ""
+msgstr "Em vez de escrever o código de exemplo em markdown assim"
-#: ../../CONTRIBUTING.md:363
+#: ../../CONTRIBUTING.md:367
msgid "The python can be extracted into a `.py` file"
-msgstr ""
+msgstr "O python pode ser extraído para um arquivo `.py`"
-#: ../../CONTRIBUTING.md:377
+#: ../../CONTRIBUTING.md:381
msgid ""
"As another example, if you only need to show part of a `pyproject.toml`, "
"we already have complete project definitions, you need only to find the "
"relevant part."
msgstr ""
+"Como outro exemplo, se você só precisa mostrar parte de um "
+"`pyproject.toml`, já temos definições completas de projeto, você só "
+"precisa encontrar a parte relevante."
-#: ../../CONTRIBUTING.md:380
+#: ../../CONTRIBUTING.md:384
msgid "Instead of writing this"
-msgstr ""
+msgstr "Em vez de escrever isso"
-#: ../../CONTRIBUTING.md:391
+#: ../../CONTRIBUTING.md:395
msgid "an example could be extracted from an existing toml file"
-msgstr ""
+msgstr "um exemplo poderia ser extraído de um arquivo toml já existente"
diff --git a/locales/pt/LC_MESSAGES/TRANSLATING.po b/locales/pt/LC_MESSAGES/TRANSLATING.po
index 796edfa23..c04b4af2b 100644
--- a/locales/pt/LC_MESSAGES/TRANSLATING.po
+++ b/locales/pt/LC_MESSAGES/TRANSLATING.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-05-18 10:26-0700\n"
+"POT-Creation-Date: 2026-07-29 09:02-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language: pt\n"
@@ -43,10 +43,17 @@ msgid "Translation Status"
msgstr ""
#: ../../TRANSLATING.md:16
-msgid "Overview of the Translation Process"
+msgid ""
+"The translation status graph updates every time the book is build with "
+"translations. You can see the status of the translations by going to "
+"[this link](https://www.pyopensci.org/python-package-guide/TRANSLATING)"
msgstr ""
#: ../../TRANSLATING.md:18
+msgid "Overview of the Translation Process"
+msgstr ""
+
+#: ../../TRANSLATING.md:20
msgid ""
"The process of adapting software to different languages is called "
"internationalization, or i18n for short. Internationalization makes sure "
@@ -54,50 +61,50 @@ msgid ""
"in our case, the original English source files of the guide."
msgstr ""
-#: ../../TRANSLATING.md:20
+#: ../../TRANSLATING.md:22
msgid ""
"Sphinx, the documentation engine we use to build the Python Package "
"Guide, has built-in support for internationalization, so the workflow is "
"very straightforward."
msgstr ""
-#: ../../TRANSLATING.md:22
+#: ../../TRANSLATING.md:24
msgid ""
"The process of actually translating the guide into different languages is"
" called localization, or l10n for short. This is the step you will be "
"helping with your contribution."
msgstr ""
-#: ../../TRANSLATING.md:24
+#: ../../TRANSLATING.md:26
msgid "Here is a quick overview of how the translation process works:"
msgstr ""
-#: ../../TRANSLATING.md:26
+#: ../../TRANSLATING.md:28
msgid ""
"The guide is originally written in English and stored in a set of "
"MarkDown files."
msgstr ""
-#: ../../TRANSLATING.md:27
+#: ../../TRANSLATING.md:29
msgid ""
"The source files are processed by Sphinx to generate a set of translation"
" files stored in a folder for each target language."
msgstr ""
-#: ../../TRANSLATING.md:28
+#: ../../TRANSLATING.md:30
msgid ""
"Contributors (like you!) translate these files into the different "
"languages."
msgstr ""
-#: ../../TRANSLATING.md:29
+#: ../../TRANSLATING.md:31
msgid ""
"When the guide is built, Sphinx creates a version of the guide in the "
"original language (English) and the translated versions for the languages"
" defined in the configuration."
msgstr ""
-#: ../../TRANSLATING.md:32
+#: ../../TRANSLATING.md:34
msgid ""
"You don't need to understand the technical details to contribute, but if "
"you are interested in learning how Sphinx handles internationalization "
@@ -105,80 +112,135 @@ msgid ""
".sphinx-doc.org/en/master/usage/advanced/intl.html)."
msgstr ""
-#: ../../TRANSLATING.md:35
-msgid "Setting up Your Local Environment"
-msgstr ""
-
#: ../../TRANSLATING.md:37
-msgid "Before you start, you will need to set up your local work environment."
+msgid "Two Ways to Contribute a Translation"
msgstr ""
#: ../../TRANSLATING.md:39
msgid ""
-"First, fork the guide repository into your personal GitHub account and "
-"clone the forked repository to your local computer."
+"There are two ways to contribute a translation, and the first one does "
+"not require you to install anything on your computer."
msgstr ""
#: ../../TRANSLATING.md:41
msgid ""
-"To create a virtual environment and install the development dependencies "
-"for the guide, run the following commands:"
+"**From the GitHub website.** Translation files are plain text, so you can"
+" edit them right in your browser. Fork the repository, edit a `.po` file "
+"in your fork, and open a pull request. This is the best place to start if"
+" this is your first open source contribution. The contributing guide "
+"walks through the browser workflow in [Contributing via the GitHub "
+"website](CONTRIBUTING.md#contributing-via-the-github-website). Once you "
+"have a fork, you can skip ahead to [Editing the Translation Files"
+"](#editing-the-translation-files)."
+msgstr ""
+
+#: ../../TRANSLATING.md:43
+msgid ""
+"**From a local copy on your computer.** This takes more setup, but it "
+"lets you check how much of a file is translated with `sphinx-intl stat` "
+"and preview the translated guide in your browser before you open a pull "
+"request. Choose this if you plan to translate a lot of strings or want to"
+" see your work in context."
+msgstr ""
+
+#: ../../TRANSLATING.md:45
+msgid "Setting up Your Local Environment"
msgstr ""
-#: ../../TRANSLATING.md:50
+#: ../../TRANSLATING.md:47
+msgid "You only need this if you chose the second approach above."
+msgstr ""
+
+#: ../../TRANSLATING.md:49
msgid ""
-"TODO: This section needs more work or to be replaced with a reference to "
-"the CONTRIBUTING guide."
+"Setting up to translate is no different from setting up to contribute "
+"anything else to the guide, so rather than repeat the steps here, follow "
+"these sections of the contributing guide in order:"
+msgstr ""
+
+#: ../../TRANSLATING.md:51
+msgid "[Forking the repository](CONTRIBUTING.md#forking-the-repository)"
msgstr ""
#: ../../TRANSLATING.md:52
-msgid "Starting a New Language Translation"
+msgid ""
+"[Clone your forked repository](CONTRIBUTING.md#clone-your-forked-"
+"repository)"
+msgstr ""
+
+#: ../../TRANSLATING.md:53
+msgid "[Create a new branch](CONTRIBUTING.md#create-a-new-branch)"
msgstr ""
#: ../../TRANSLATING.md:54
msgid ""
+"[Create a virtual environment](CONTRIBUTING.md#create-a-virtual-"
+"environment), which gives the commands for both Windows and macOS/Linux"
+msgstr ""
+
+#: ../../TRANSLATING.md:55
+msgid ""
+"[Install the development dependencies](CONTRIBUTING.md#install-the-"
+"development-dependencies)"
+msgstr ""
+
+#: ../../TRANSLATING.md:58
+msgid ""
+"Installing the development dependencies is what makes `sphinx-intl` and "
+"`nox` available in your environment. Both are used later in this guide: "
+"`sphinx-intl` reports how much of each file has been translated, and "
+"`nox` builds the guide so you can preview your work."
+msgstr ""
+
+#: ../../TRANSLATING.md:61
+msgid "Starting a New Language Translation"
+msgstr ""
+
+#: ../../TRANSLATING.md:63
+msgid ""
"If you plan to work on an existing translation, you can skip this step "
"and go directly to the next section."
msgstr ""
-#: ../../TRANSLATING.md:56 ../../TRANSLATING.md:222
+#: ../../TRANSLATING.md:65 ../../TRANSLATING.md:237
msgid "Important"
msgstr ""
-#: ../../TRANSLATING.md:57
+#: ../../TRANSLATING.md:66
msgid ""
"If you would like to start the translation of the guide into a new "
"language, start by [creating an issue](https://github.com/pyOpenSci"
"/python-package-guide/issues) in the repository."
msgstr ""
-#: ../../TRANSLATING.md:60
+#: ../../TRANSLATING.md:69
msgid ""
"To generate the translation files for a new language, add the language to"
-" the `LANGUAGES` list in the `noxfile.py` configuration file. "
+" the `languages` list in the `conf.py` configuration file. "
"[Nox](https://nox.thea.codes/en/stable/index.html) is the tool we use to "
-"manage the building of the guide and its translations."
+"manage the building of the guide and its translations, and it reads this "
+"list from `conf.py`."
msgstr ""
-#: ../../TRANSLATING.md:62
+#: ../../TRANSLATING.md:71
msgid ""
-"Inside `noxfile.py`, find the `LANGUAGES` list and add the corresponding "
+"Inside `conf.py`, find the `languages` list and add the corresponding "
"two-letter code. For example, if you want to start the translation of the"
" guide into French, you would add `'fr'`:"
msgstr ""
-#: ../../TRANSLATING.md:73
+#: ../../TRANSLATING.md:80
msgid ""
"You can find a list of the two-letter Sphinx language option "
"[here](https://www.sphinx-doc.org/en/master/usage/configuration.html"
"#confval-language)."
msgstr ""
-#: ../../TRANSLATING.md:76
+#: ../../TRANSLATING.md:83
msgid "Preparing the Translation Files"
msgstr ""
-#: ../../TRANSLATING.md:78
+#: ../../TRANSLATING.md:85
msgid ""
"The translation files contain the original English text and a space for "
"you to enter the translated text. Before starting to translate, you need "
@@ -186,34 +248,34 @@ msgid ""
" to the guide."
msgstr ""
-#: ../../TRANSLATING.md:80
+#: ../../TRANSLATING.md:87
msgid ""
"You can do this by running the following command, replacing LANG by the "
"language code you plan to work on (e.g., `es` for Spanish):"
msgstr ""
-#: ../../TRANSLATING.md:86
+#: ../../TRANSLATING.md:93
msgid ""
"This command will create the translation files if they don't exist yet, "
"or update them with the latest changes if they already exist."
msgstr ""
-#: ../../TRANSLATING.md:88
+#: ../../TRANSLATING.md:95
msgid ""
"The translation files are text files with the `.po` extension stored in "
-"the `./locales`, in folders corresponding to each language. For example, "
-"the translation files for Spanish are stored in the "
-"`locale/es/LC_MESSAGES` directory."
+"`./locales`, in folders corresponding to each language. For example, the "
+"translation files for Spanish are stored in the `locales/es/LC_MESSAGES` "
+"directory."
msgstr ""
-#: ../../TRANSLATING.md:90
+#: ../../TRANSLATING.md:97
msgid ""
"Because the translation files map the original English text to translated"
" text, they are sometimes referred to as \"catalog\" files or \"portable "
"object\" files."
msgstr ""
-#: ../../TRANSLATING.md:93
+#: ../../TRANSLATING.md:100
msgid ""
"You don't need to know all the details about the PO format in order to "
"translate. If you are interested in learning more, you can find "
@@ -222,24 +284,24 @@ msgid ""
"Files.html)."
msgstr ""
-#: ../../TRANSLATING.md:96
+#: ../../TRANSLATING.md:103
msgid "Working on a Translation"
msgstr ""
-#: ../../TRANSLATING.md:98
+#: ../../TRANSLATING.md:105
msgid ""
"In order to start translating, go to the folder inside `./locales` "
"corresponding to the target language you want to translate to (for "
-"example, `./locale/es/LC_MESSAGES/` for the Spanish translation)."
+"example, `./locales/es/LC_MESSAGES/` for the Spanish translation)."
msgstr ""
-#: ../../TRANSLATING.md:100
+#: ../../TRANSLATING.md:107
msgid ""
"In this folder you will find a set of `.po` files, corresponding to the "
"different sections of the guide:"
msgstr ""
-#: ../../TRANSLATING.md:116
+#: ../../TRANSLATING.md:125
msgid ""
"You may also see some `.mo` files in the same folder. These are compiled "
"versions of the `.po` files create by Sphinx during the build process, "
@@ -248,47 +310,66 @@ msgid ""
"the repository."
msgstr ""
-#: ../../TRANSLATING.md:119
+#: ../../TRANSLATING.md:128
msgid ""
"If you are working on a new translation, choose one of the `.po` files to"
" start with. If you are working on an existing translation, you can start"
" with the `.po` files that need the most work."
msgstr ""
-#: ../../TRANSLATING.md:121
+#: ../../TRANSLATING.md:131
+msgid ""
+"**Not sure which file to pick? Start with `index.po`.** It holds the "
+"strings for the guide's landing page, and a language can be published on "
+"the website once its landing page is translated. Finishing `index.po` is "
+"therefore what makes a new translation visible to readers, which makes it"
+" the most useful file to work on."
+msgstr ""
+
+#: ../../TRANSLATING.md:133
+msgid ""
+"This is a great place for a first contribution, and you do not have to "
+"translate the whole file on your own. Each language has a translation "
+"issue on the [issue tracker](https://github.com/pyOpenSci/python-package-"
+"guide/issues?q=is%3Aissue+is%3Aopen+label%3Atranslations) with one sub-"
+"issue per `.po` file, where you can claim a range of lines and work "
+"alongside other contributors."
+msgstr ""
+
+#: ../../TRANSLATING.md:136
msgid ""
"To see how much of each file has been translated, use the `sphinx-intl "
"stat`. You will be able to see the number of translated, fuzzy, and "
"untranslated strings in each `.po` file."
msgstr ""
-#: ../../TRANSLATING.md:123
+#: ../../TRANSLATING.md:138
msgid ""
"For example, to see the statistics for the Spanish translation, you would"
" run:"
msgstr ""
-#: ../../TRANSLATING.md:137
+#: ../../TRANSLATING.md:152
msgid "What do these categories mean:"
msgstr ""
-#: ../../TRANSLATING.md:139
+#: ../../TRANSLATING.md:154
msgid ""
"Translated strings are strings that have been translated into the target "
"language."
msgstr ""
-#: ../../TRANSLATING.md:140
+#: ../../TRANSLATING.md:155
msgid ""
"Fuzzy strings are strings that have been translated but need to be "
"reviewed because the original English string in the guide changed."
msgstr ""
-#: ../../TRANSLATING.md:141
+#: ../../TRANSLATING.md:156
msgid "Untranslated strings are strings that have not been translated yet."
msgstr ""
-#: ../../TRANSLATING.md:144
+#: ../../TRANSLATING.md:159
msgid ""
"When Sphinx is building the guide in another language, it will look into "
"the corresponding folder in `./locales/` for translated strings. If the "
@@ -297,18 +378,18 @@ msgid ""
"available, Sphinx will use the original English strings."
msgstr ""
-#: ../../TRANSLATING.md:147
+#: ../../TRANSLATING.md:162
msgid "Editing the Translation Files"
msgstr ""
-#: ../../TRANSLATING.md:149
+#: ../../TRANSLATING.md:164
msgid ""
"You can use any text editor to edit the `.po` file. But if you prefer, "
"there are also tools like [Poedit](https://poedit.net/) that provide a "
"graphic use interface."
msgstr ""
-#: ../../TRANSLATING.md:151
+#: ../../TRANSLATING.md:166
msgid ""
"Depending on your editor of choice, you may be able to install a plugin "
"or extension that can provide syntax highlighting and other features for "
@@ -317,13 +398,13 @@ msgid ""
".language-gettext) extension for Visual Studio Code."
msgstr ""
-#: ../../TRANSLATING.md:153
+#: ../../TRANSLATING.md:168
msgid ""
"When you open a `.po` file, you will see a series of entries that look "
"like this:"
msgstr ""
-#: ../../TRANSLATING.md:163
+#: ../../TRANSLATING.md:178
msgid ""
"The first line of an entry starts with `#:` and is a reference to the "
"original source file and line number from which the text was extracted. "
@@ -331,7 +412,7 @@ msgid ""
"guide."
msgstr ""
-#: ../../TRANSLATING.md:165
+#: ../../TRANSLATING.md:180
msgid ""
"The `msgid` field contains the original English text that needs to be "
"translated. The `msgstr` field is where you will enter the translated "
@@ -339,7 +420,7 @@ msgid ""
"the entry."
msgstr ""
-#: ../../TRANSLATING.md:175
+#: ../../TRANSLATING.md:190
msgid ""
"Sometimes the original English text may be too long for a single line, "
"and it may be split into multiple lines. In this case, you can keep the "
@@ -348,21 +429,21 @@ msgid ""
"indicating that the text continues in the next line."
msgstr ""
-#: ../../TRANSLATING.md:191
+#: ../../TRANSLATING.md:206
msgid ""
"The English text will sometimes contain Markdown formatting, such as bold"
" or italic text. You should keep the formatting in the translated text, "
"making sure to translate the text inside the formatting tags."
msgstr ""
-#: ../../TRANSLATING.md:193
+#: ../../TRANSLATING.md:208
msgid ""
"The English text may also contain links to other sections of the guide or"
" external resources. You should keep the links in the translated text, "
"making sure to update the link text when appropriate."
msgstr ""
-#: ../../TRANSLATING.md:201
+#: ../../TRANSLATING.md:216
msgid ""
"An entry may be marked as `fuzzy`, which means that the original English "
"text has changed since the translation was made, and the translation may "
@@ -370,13 +451,13 @@ msgid ""
" in the entry, starting with `#,`:"
msgstr ""
-#: ../../TRANSLATING.md:218
+#: ../../TRANSLATING.md:233
msgid ""
"You can review the translation and make any necessary changes, removing "
"the `fuzzy` tag once you are satisfied with the translation."
msgstr ""
-#: ../../TRANSLATING.md:220
+#: ../../TRANSLATING.md:235
msgid ""
"You can also add comments to the translation file, by adding lines that "
"start with a `#` character to the entry. This can be helpful to add "
@@ -384,7 +465,7 @@ msgid ""
" this might be only necessary in special circumstances."
msgstr ""
-#: ../../TRANSLATING.md:223
+#: ../../TRANSLATING.md:238
msgid ""
"When working on a translation, you **should not** modify the original "
"English text in the `msgid` field. If you see a typo or an error in the "
@@ -393,11 +474,11 @@ msgid ""
"request."
msgstr ""
-#: ../../TRANSLATING.md:226
+#: ../../TRANSLATING.md:241
msgid "Building the Translated Documentation"
msgstr ""
-#: ../../TRANSLATING.md:228
+#: ../../TRANSLATING.md:243
msgid ""
"Once you finished translating or when you want to check the translation "
"in context, you can build the guide locally on your computer, using the "
@@ -405,22 +486,22 @@ msgid ""
" for Spanish)"
msgstr ""
-#: ../../TRANSLATING.md:234
+#: ../../TRANSLATING.md:249
msgid ""
-"This command will build all the translated versions of the guide defined "
-"in the `LANGUAGES` list in `noxfile.py`. These translations will be "
-"stored in the `_build/html`, in folders named after the language code "
-"(e.g., `es`, `fr`, etc.)."
+"This command builds a single translated version of the guide: the one for"
+" LANG. The result is stored in `_build/html`, in a folder named after the"
+" language code (e.g., `es`). If you want to build every language at once "
+"instead, use `nox -s build-all-languages`."
msgstr ""
-#: ../../TRANSLATING.md:236
+#: ../../TRANSLATING.md:251
msgid ""
"To view the translated version of the guide in your browser, open the "
"corresponding `index.html` file. For example, to view the Spanish "
"translation, you would open `_build/html/es/index.html`."
msgstr ""
-#: ../../TRANSLATING.md:238
+#: ../../TRANSLATING.md:253
msgid ""
"You can also build a live version of the guide that updates automatically"
" as you make changes to the translation files. To do this, use the `nox "
@@ -429,7 +510,7 @@ msgid ""
"Spanish translation, you would run:"
msgstr ""
-#: ../../TRANSLATING.md:244
+#: ../../TRANSLATING.md:259
msgid ""
"Note the `--` before the language code, it indicates that the following "
"arguments should be passed into the nox session and not be interpreted "
@@ -437,24 +518,24 @@ msgid ""
"session named 'es' and raise an error that it does not exist."
msgstr ""
-#: ../../TRANSLATING.md:246
+#: ../../TRANSLATING.md:261
msgid ""
"This command will use `sphinx-autobuild` to launch a local web server "
"where you can access the translated version of the guide. You can open "
"the guide in your browser by navigating to `http://localhost:8000`."
msgstr ""
-#: ../../TRANSLATING.md:248
+#: ../../TRANSLATING.md:263
msgid ""
"This is a great way to see how the translated version of the guide looks "
"as you make changes to the translation files."
msgstr ""
-#: ../../TRANSLATING.md:250
+#: ../../TRANSLATING.md:265
msgid "Submitting a PR for Your Contribution"
msgstr ""
-#: ../../TRANSLATING.md:252
+#: ../../TRANSLATING.md:267
msgid ""
"Once you are finished translating and before you submit a pull request "
"(PR) for your translation, you need to make sure that the translated "
@@ -462,52 +543,52 @@ msgid ""
"correctly in the browser."
msgstr ""
-#: ../../TRANSLATING.md:254
+#: ../../TRANSLATING.md:269
msgid "You can follow these steps:"
msgstr ""
-#: ../../TRANSLATING.md:256
+#: ../../TRANSLATING.md:271
msgid ""
"Build the translations of the guide with same parameters that will be "
"used during the release:"
msgstr ""
-#: ../../TRANSLATING.md:262
+#: ../../TRANSLATING.md:277
msgid ""
"Make sure there are no warnings or errors in the output. If there are, "
"you will need to fix them before submitting the PR."
msgstr ""
-#: ../../TRANSLATING.md:263
+#: ../../TRANSLATING.md:278
msgid ""
"Make sure the translated version of the guide looks good in the browser "
"by opening the `_build/html//index.html` file, where `` is "
"the language you have been working on."
msgstr ""
-#: ../../TRANSLATING.md:265
+#: ../../TRANSLATING.md:280
msgid "If everything looks good, you can submit a PR with your changes."
msgstr ""
-#: ../../TRANSLATING.md:268
+#: ../../TRANSLATING.md:283
msgid ""
"When you submit a PR for a translation, you should only include changes "
"to one language. If you worked in multiple languages, please submit a "
"separate PR for each language."
msgstr ""
-#: ../../TRANSLATING.md:271
+#: ../../TRANSLATING.md:286
msgid ""
"Translations PRs will be tagged with a label indicating the language to "
"make them easier to identify and review. For example, contributions to "
"the Spanish translation will be tagged with 'lang-es'."
msgstr ""
-#: ../../TRANSLATING.md:273
+#: ../../TRANSLATING.md:288
msgid "TODO: This tagging could be automated with a GitHub Actions."
msgstr ""
-#: ../../TRANSLATING.md:275
+#: ../../TRANSLATING.md:290
msgid ""
"When you submit the PR, make sure to include a short description of the "
"changes you made and any context that might be helpful for the reviewer "
@@ -515,17 +596,17 @@ msgid ""
"typos, etc.)"
msgstr ""
-#: ../../TRANSLATING.md:277
+#: ../../TRANSLATING.md:292
msgid "The Review Process"
msgstr ""
-#: ../../TRANSLATING.md:279
+#: ../../TRANSLATING.md:294
msgid ""
"The review process for a translation contribution is similar to the "
"review process for any other contribution to the guide."
msgstr ""
-#: ../../TRANSLATING.md:281
+#: ../../TRANSLATING.md:296
msgid ""
"TODO: This section needs more work, depending on the review workflow we "
"decide to adopt. Other projects usually assign a coordinator/editor for "
@@ -533,7 +614,7 @@ msgid ""
"contributions."
msgstr ""
-#: ../../TRANSLATING.md:283
+#: ../../TRANSLATING.md:298
msgid ""
"Each language has an assigned editor who is responsible for reviewing and"
" merging translation contributions. The editor will review the changes to"
@@ -541,7 +622,7 @@ msgid ""
"the guide."
msgstr ""
-#: ../../TRANSLATING.md:285
+#: ../../TRANSLATING.md:300
msgid ""
"Sometimes the editor may ask for clarification or suggest changes to "
"improve the translation. If this happens, you can make the requested "
@@ -549,32 +630,31 @@ msgid ""
" PR."
msgstr ""
-#: ../../TRANSLATING.md:287
+#: ../../TRANSLATING.md:302
msgid ""
"When the editor is satisfied with the translation, they will merge the "
"PR. The translated version of the guide will be available on the "
"pyOpenSci website once the language is released."
msgstr ""
-#: ../../TRANSLATING.md:289
+#: ../../TRANSLATING.md:304
msgid "The Release Process"
msgstr ""
-#: ../../TRANSLATING.md:291
+#: ../../TRANSLATING.md:306
msgid ""
"If a language is ready to go live, the maintainers will add the language "
-"code to the `RELEASE_LANGUAGES` list in the `noxfile.py` configuration "
-"file."
+"code to the `release_languages` list in the `conf.py` configuration file."
msgstr ""
-#: ../../TRANSLATING.md:293
+#: ../../TRANSLATING.md:308
msgid ""
"When the guide is built for release in CI, Sphinx will also generate the "
"translated versions of the guide for the languages in the "
-"`RELEASE_LANGUAGES` list."
+"`release_languages` list."
msgstr ""
-#: ../../TRANSLATING.md:295
+#: ../../TRANSLATING.md:310
msgid ""
"Translations are released in the same way as the English version of the "
"guide, and the translated versions will be available in folders named "
@@ -583,40 +663,40 @@ msgid ""
"it is published online."
msgstr ""
-#: ../../TRANSLATING.md:297
+#: ../../TRANSLATING.md:312
msgid "Frequently Asked Questions (FAQ)"
msgstr ""
-#: ../../TRANSLATING.md:299
+#: ../../TRANSLATING.md:314
msgid "How do I know which strings need to be translated?"
msgstr ""
-#: ../../TRANSLATING.md:301
+#: ../../TRANSLATING.md:316
msgid ""
"When you run the `sphinx-intl stat` command, you will see a list of `.po`"
" files with the number of translated, fuzzy, and untranslated strings. "
"You can start by working on the files with the most untranslated strings."
msgstr ""
-#: ../../TRANSLATING.md:303
+#: ../../TRANSLATING.md:318
msgid "What happens when a string has changed in the original English text?"
msgstr ""
-#: ../../TRANSLATING.md:305
+#: ../../TRANSLATING.md:320
msgid ""
"If a string has changed in the original English version, it will be "
"marked as `fuzzy` in the translation file the next time it is updated "
-"(`update-language`, `update-all-languages`, or `update-all-release-"
-"languages`). Contributors working on the translation can then review the "
-"fuzzy entries and make the necessary changes to ensure it is accurate, "
-"before removing the `fuzzy` tag."
+"(`update-language` or `update-release-languages`). Contributors working "
+"on the translation can then review the fuzzy entries and make the "
+"necessary changes to ensure it is accurate, before removing the `fuzzy` "
+"tag."
msgstr ""
-#: ../../TRANSLATING.md:307
+#: ../../TRANSLATING.md:322
msgid "How do I handle links in the translated text?"
msgstr ""
-#: ../../TRANSLATING.md:309
+#: ../../TRANSLATING.md:324
msgid ""
"You should keep the links in the translated text, but make sure to update"
" the link text if necessary. For example, if the original English text "
@@ -625,11 +705,11 @@ msgid ""
"`[¿Que es un paquete de Python?](/tutorials/intro)`."
msgstr ""
-#: ../../TRANSLATING.md:311
+#: ../../TRANSLATING.md:326
msgid "How do I handle formatting in the translated text?"
msgstr ""
-#: ../../TRANSLATING.md:313
+#: ../../TRANSLATING.md:328
msgid ""
"You should keep the formatting in the translated text, but make sure to "
"translate the text inside the formatting tags as well. For example, if "
@@ -638,11 +718,11 @@ msgid ""
" formatting tags to `**Prueba casos especiales:**`."
msgstr ""
-#: ../../TRANSLATING.md:315
+#: ../../TRANSLATING.md:330
msgid "How do I handle strings that are too long for a single line?"
msgstr ""
-#: ../../TRANSLATING.md:317
+#: ../../TRANSLATING.md:332
msgid ""
"If the original English text is too long for a single line, it may be "
"split into multiple lines. Multiline strings in the `.po` file are "
@@ -650,11 +730,11 @@ msgid ""
" by the continuation of the text in the next line. For example:"
msgstr ""
-#: ../../TRANSLATING.md:330
+#: ../../TRANSLATING.md:345
msgid "How do I translate images?"
msgstr ""
-#: ../../TRANSLATING.md:332
+#: ../../TRANSLATING.md:347
msgid ""
"You should not translate images in the guide. Producing translated "
"versions of images is a complex process that requires additional tools "
@@ -663,20 +743,20 @@ msgid ""
"the image is modified to include any necessary translations."
msgstr ""
-#: ../../TRANSLATING.md:334
+#: ../../TRANSLATING.md:349
msgid ""
"In some special cases, an image might be critical to the understanding of"
" the content. In those cases, the translations will be handled by the "
"maintainers and editors outside this workflow."
msgstr ""
-#: ../../TRANSLATING.md:336
+#: ../../TRANSLATING.md:351
msgid ""
"I am interested in translating the guide into a language that is not "
"listed. How can I get started?"
msgstr ""
-#: ../../TRANSLATING.md:338
+#: ../../TRANSLATING.md:353
msgid ""
"If you want to start a new translation of the guide into a language that "
"is not listed, you should [create an issue](https://github.com/pyOpenSci"
@@ -686,32 +766,35 @@ msgid ""
"contribution when you are done."
msgstr ""
-#: ../../TRANSLATING.md:340
+#: ../../TRANSLATING.md:355
msgid "How do I know when a translation is ready to be released?"
msgstr ""
-#: ../../TRANSLATING.md:342
+#: ../../TRANSLATING.md:357
msgid ""
"When a translation is ready to be included in the next release of the "
"guide, the maintainers will add the language code to the "
-"`RELEASE_LANGUAGES` list in the `noxfile.py` configuration file. This "
-"will trigger the build of the translation during the release process, and"
-" the translated version of the guide will be available on the pyOpenSci "
+"`release_languages` list in the `conf.py` configuration file. This will "
+"trigger the build of the translation during the release process, and the "
+"translated version of the guide will be available on the pyOpenSci "
"website."
msgstr ""
-#: ../../TRANSLATING.md:344
+#: ../../TRANSLATING.md:359
msgid ""
-"TODO: There are many approaches here, some projects release a translation"
-" as soon as some strings are translated, others wait until a certain "
-"percentage of the content is translated."
+"A translation becomes a candidate for release once `index.po` is fully "
+"translated. With the landing page in place, a reader arriving in that "
+"language lands on a page in their own language rather than an English "
+"one. The remaining files can keep improving after that, because Sphinx "
+"falls back to the English text for any string that has not been "
+"translated yet."
msgstr ""
-#: ../../TRANSLATING.md:346
+#: ../../TRANSLATING.md:361
msgid "How can I get help with my translation?"
msgstr ""
-#: ../../TRANSLATING.md:348
+#: ../../TRANSLATING.md:363
msgid ""
"If you have any questions or need help with your translation, you can "
"create an [issue](https://github.com/pyOpenSci/python-package-"
@@ -719,7 +802,7 @@ msgid ""
"repository](https://github.com/pyOpenSci/python-package-guide)"
msgstr ""
-#: ../../TRANSLATING.md:350
+#: ../../TRANSLATING.md:365
msgid ""
"You can also ask in the PyOpenSci Discord server ([click "
"here](https://discord.gg/NQtTTqtv) to join), you will find a general "
@@ -727,3 +810,136 @@ msgid ""
"(translation-general) and channels for each of the languages we are "
"working on (spanish-translation, japanese-translation, etc)."
msgstr ""
+
+#~ msgid ""
+#~ "To generate the translation files for"
+#~ " a new language, add the language "
+#~ "to the `LANGUAGES` list in the "
+#~ "`noxfile.py` configuration file. "
+#~ "[Nox](https://nox.thea.codes/en/stable/index.html) is the"
+#~ " tool we use to manage the "
+#~ "building of the guide and its "
+#~ "translations."
+#~ msgstr ""
+
+#~ msgid "Before you start, you will need to set up your local work environment."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "First, fork the guide repository into"
+#~ " your personal GitHub account and "
+#~ "clone the forked repository to your "
+#~ "local computer."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "To create a virtual environment and "
+#~ "install the development dependencies for "
+#~ "the guide, run the following commands:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TODO: This section needs more work "
+#~ "or to be replaced with a reference"
+#~ " to the CONTRIBUTING guide."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "To generate the translation files for"
+#~ " a new language, add the language "
+#~ "to the `LANGUAGES` list in the "
+#~ "`conf.py` configuration file. "
+#~ "[Nox](https://nox.thea.codes/en/stable/index.html) is the"
+#~ " tool we use to manage the "
+#~ "building of the guide and its "
+#~ "translations."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Inside `noxfile.py`, find the `LANGUAGES` "
+#~ "list and add the corresponding two-"
+#~ "letter code. For example, if you "
+#~ "want to start the translation of "
+#~ "the guide into French, you would "
+#~ "add `'fr'`:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The translation files are text files "
+#~ "with the `.po` extension stored in "
+#~ "the `./locales`, in folders corresponding "
+#~ "to each language. For example, the "
+#~ "translation files for Spanish are stored"
+#~ " in the `locale/es/LC_MESSAGES` directory."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "In order to start translating, go "
+#~ "to the folder inside `./locales` "
+#~ "corresponding to the target language you"
+#~ " want to translate to (for example,"
+#~ " `./locale/es/LC_MESSAGES/` for the Spanish "
+#~ "translation)."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This command will build all the "
+#~ "translated versions of the guide defined"
+#~ " in the `LANGUAGES` list in "
+#~ "`noxfile.py`. These translations will be "
+#~ "stored in the `_build/html`, in folders"
+#~ " named after the language code (e.g.,"
+#~ " `es`, `fr`, etc.)."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "If a language is ready to go "
+#~ "live, the maintainers will add the "
+#~ "language code to the `RELEASE_LANGUAGES` "
+#~ "list in the `noxfile.py` configuration "
+#~ "file."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "When the guide is built for "
+#~ "release in CI, Sphinx will also "
+#~ "generate the translated versions of the"
+#~ " guide for the languages in the "
+#~ "`RELEASE_LANGUAGES` list."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "If a string has changed in the "
+#~ "original English version, it will be "
+#~ "marked as `fuzzy` in the translation "
+#~ "file the next time it is updated"
+#~ " (`update-language`, `update-all-"
+#~ "languages`, or `update-all-release-"
+#~ "languages`). Contributors working on the "
+#~ "translation can then review the fuzzy"
+#~ " entries and make the necessary "
+#~ "changes to ensure it is accurate, "
+#~ "before removing the `fuzzy` tag."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "When a translation is ready to be"
+#~ " included in the next release of "
+#~ "the guide, the maintainers will add "
+#~ "the language code to the "
+#~ "`RELEASE_LANGUAGES` list in the `noxfile.py`"
+#~ " configuration file. This will trigger "
+#~ "the build of the translation during "
+#~ "the release process, and the translated"
+#~ " version of the guide will be "
+#~ "available on the pyOpenSci website."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TODO: There are many approaches here,"
+#~ " some projects release a translation "
+#~ "as soon as some strings are "
+#~ "translated, others wait until a certain"
+#~ " percentage of the content is "
+#~ "translated."
+#~ msgstr ""
diff --git a/locales/pt/LC_MESSAGES/continuous-integration.po b/locales/pt/LC_MESSAGES/continuous-integration.po
index a213ffc2f..baab3a318 100644
--- a/locales/pt/LC_MESSAGES/continuous-integration.po
+++ b/locales/pt/LC_MESSAGES/continuous-integration.po
@@ -24,7 +24,7 @@ msgstr ""
msgid ""
"Continuous Integration and Continuous Deployment (CI/CD) For Python "
"Packages"
-msgstr ""
+msgstr "Integração Contínua e Implantação Contínua (CI/CD) para Pacotes Python"
#: ../../continuous-integration/ci.md:4
msgid ""
@@ -35,18 +35,32 @@ msgid ""
"Deployment (CD)** to run tests and checks on your code every time someone"
" suggests a change online in a platform like GitHub or GitLab."
msgstr ""
+"Quando você desenvolve, trabalha e contribui para software, há mais coisas "
+"a considerar do que apenas escrever código. Ter testes e verificações "
+"garante que seu código funcione de forma confiável e siga um formato "
+"consistente também é importante. Você pode usar Integração Contínua "
+"(CI) e Implantação Contínua (CD) para executar testes e verificações "
+"no seu código sempre que alguém sugerir uma alteração online em uma "
+"plataforma como GitHub ou GitLab."
#: ../../continuous-integration/ci.md:11
msgid ""
"**Continuous Integration (CI):** Automates the process of running tests, "
"code checks, and other workflows each time code is updated."
msgstr ""
+"**Integração Contínua (CI):** Automatiza o processo de execução de testes, "
+"verificações de código e outros fluxos de trabalho sempre que o código é "
+"atualizado."
#: ../../continuous-integration/ci.md:13
msgid ""
"**Continuous Deployment (CD):** Extends CI by allowing you to automate "
"publishing your package to PyPI, publishing your documentation, and more."
msgstr ""
+"**Implantação Contínua (CD):** Estende a CI ao permitir automatizar a "
+"publicação do seu pacote no PyPI, a publicação da sua documentação e muito "
+"mais.
+"
#: ../../continuous-integration/ci.md:15
msgid ""
@@ -55,10 +69,15 @@ msgid ""
"easier for new contributors to contribute to your code base without "
"setting up all your test suites and other local checks."
msgstr ""
+"A CI e CD simplificam o desenvolvimento de software ao automatizar tarefas "
+"repetitivas e garantir a qualidade e consistência do código. Ter CI "
+"configurada também facilita a contribuição de novos colaboradores para sua "
+"base de código sem precisar configurar localmente todas as suítes de "
+"testes e outras verificações."
#: ../../continuous-integration/ci.md:20
msgid "What is continuous integration?"
-msgstr ""
+msgstr "O que é integração contínua?"
#: ../../continuous-integration/ci.md:22
msgid ""
@@ -66,36 +85,42 @@ msgid ""
"Integration (CI). CI is a platform that allows you to specify and run "
"jobs or workflows you define. These workflows include:"
msgstr ""
+"Quando você estiver pronto para publicar seu código online, poderá configurar "
+"a Integração Contínua (CI). A CI é uma plataforma que permite definir e "
+"executar tarefas ou fluxos de trabalho personalizados. Esses fluxos de "
+"trabalho incluem:"
#: ../../continuous-integration/ci.md:25
msgid "Running your test suite"
-msgstr ""
+msgstr "Executar sua suíte de testes"
#: ../../continuous-integration/ci.md:26
msgid "Running code checkers / linters / spellcheck"
-msgstr ""
+msgstr "Executar verificadores de código / linters / corretores ortográficos"
#: ../../continuous-integration/ci.md:27
msgid "Building your documentation"
-msgstr ""
+msgstr "Construa sua documentação"
#: ../../continuous-integration/ci.md:29
msgid ""
"CI allows you to automate running workflows across a suite of "
"environments, including:"
msgstr ""
+"A CI permite automatizar a execução de fluxos de trabalho em um conjunto "
+"de ambientes, incluindo:"
#: ../../continuous-integration/ci.md:31
msgid "environments containing different Python versions and"
-msgstr ""
+msgstr "ambientes com diferentes versões do Python e"
#: ../../continuous-integration/ci.md:32
msgid "different operating systems (Mac, Linux, Windows)."
-msgstr ""
+msgstr "diferentes sistemas operacionais (Mac, Linux e Windows)"
#: ../../continuous-integration/ci.md:34
msgid "What is Continuous Deployment (CD)?"
-msgstr ""
+msgstr "O que é Implantação Contínua (CD)?"
#: ../../continuous-integration/ci.md:36
msgid ""
@@ -103,24 +128,29 @@ msgid ""
"deployment of code changes to production or staging environments. In the "
"case of your open source tool, CD can be used to:"
msgstr ""
+"A implantação contínua (CD) estende o processo de CI ao automatizar a "
+"implantação de alterações de código em ambientes de produção ou staging. "
+"No caso da sua ferramenta open source, a CD pode ser usada para:"
#: ../../continuous-integration/ci.md:38
msgid "Automate publishing to PyPI"
-msgstr ""
+msgstr "Automatizar a publicação no PyPI"
#: ../../continuous-integration/ci.md:39
msgid "Automate publishing your documentation to GitHub Pages or Read the Docs."
-msgstr ""
+msgstr "Automatizar a publicação da sua documentação no GitHub Pages ou no Read the Docs."
#: ../../continuous-integration/ci.md:41
msgid ""
"It is also used once your conda-forge recipe is set up to keep your "
"package up to date on conda-forge."
msgstr ""
+"Ela também é usada, depois que sua receita do conda-forge estiver "
+"configurada, para manter seu pacote atualizado no conda-forge."
#: ../../continuous-integration/ci.md:43
msgid "Why use CI"
-msgstr ""
+msgstr "Por que usar CI"
#: ../../continuous-integration/ci.md:45
msgid ""
@@ -129,6 +159,10 @@ msgid ""
" package are tested across environments before merging into the main "
"branch of your code."
msgstr ""
+"A CI pode ser configurada para executar um fluxo de trabalho a cada commit "
+"enviado para o GitHub e a cada pull request aberto. Isso garante que "
+"quaisquer alterações feitas no seu pacote sejam testadas em diferentes "
+"ambientes antes de serem mescladas à branch principal do seu código."
#: ../../continuous-integration/ci.md:47
msgid ""
@@ -136,6 +170,9 @@ msgid ""
"your code. Every contributor's change will be tested when pushed to your "
"code repository."
msgstr ""
+"Essas verificações são especialmente úteis quando alguém novo está "
+"contribuindo para o seu código. As alterações de cada colaborador serão "
+"testadas quando forem enviadas para o repositório do seu código."
#: ../../continuous-integration/ci.md:49
msgid ""
@@ -143,6 +180,9 @@ msgid ""
"deploying code. They aim to improve software development and publication "
"efficiency, quality, and reliability."
msgstr ""
+"Juntas, CI e CD simplificam o processo de desenvolvimento, teste e "
+"implantação de código. Elas ajudam a melhorar a eficiência, a qualidade e "
+"a confiabilidade do desenvolvimento e da publicação de software."
#: ../../continuous-integration/ci.md:52
msgid ""
@@ -150,16 +190,21 @@ msgid ""
" if you are not planning to go through peer review, we strongly recommend"
" that you use continuous integration, too!"
msgstr ""
+"Todos os pacotes da pyOpenSci devem usar algum tipo de integração "
+"contínua. Mesmo que você não esteja planejando passar por revisão por "
+"pares, recomendamos fortemente que você também use integração contínua!"
#: ../../continuous-integration/ci.md:55
msgid ""
"In the case of GitHub actions (which we will focus on here), CI workflows"
" are running on online servers that support GitHub."
msgstr ""
+"No caso do GitHub Actions (que será o foco aqui), os fluxos de trabalho de "
+"CI são executados em servidores online que dão suporte ao GitHub."
#: ../../continuous-integration/ci.md:57
msgid "CI / CD platforms"
-msgstr ""
+msgstr "Plataformas de CI/CD"
#: ../../continuous-integration/ci.md:59
msgid ""
@@ -167,6 +212,9 @@ msgid ""
"GitHub Actions (GHA), built into GitHub. GitHub is the most commonly used"
" platform to store scientific open-source software."
msgstr ""
+"Existem diversas plataformas disponíveis para CI/CD. Aqui, vamos focar no "
+"GitHub Actions (GHA), integrado ao GitHub. O GitHub é a plataforma mais "
+"utilizada para armazenar software científico open source."
#: ../../continuous-integration/ci.md:62
msgid ""
@@ -174,10 +222,13 @@ msgid ""
"principles described here will apply. However, the workflow files may "
"look different."
msgstr ""
+"Se você usa o CI/CD do GitLab, muitos dos princípios descritos aqui também "
+"se aplicam. No entanto, os arquivos de workflow podem ter uma aparência "
+"diferente."
#: ../../continuous-integration/ci.md:65
msgid "If you aren't sure, use GitHub Actions"
-msgstr ""
+msgstr "Se você não tiver certeza, use o GitHub Actions"
#: ../../continuous-integration/ci.md:67
msgid ""
@@ -187,10 +238,15 @@ msgid ""
"entire store of GitHub action templates that you can easily use and adapt"
" to your own needs."
msgstr ""
+"Embora você possa usar a plataforma de integração contínua de sua escolha, "
+"recomendamos o GitHub Actions porque ele é gratuito e totalmente "
+"integrado à interface do GitHub. Também existe uma ampla biblioteca de "
+"templates de GitHub Actions que você pode usar e adaptar facilmente às "
+"suas necessidades."
#: ../../continuous-integration/ci.md:72
msgid "Other platforms that you may run into"
-msgstr ""
+msgstr "Outras plataformas que você pode encontrar"
#: ../../continuous-integration/ci.md:75
msgid ""
@@ -198,6 +254,10 @@ msgid ""
" operating systems and predated the release of GitHub Actions. Today, "
"AppVeyor supports operating systems beyond Windows."
msgstr ""
+"[Appveyor:](https://www.appveyor.com/): Suporta a execução de testes em "
+"sistemas operacionais Windows e surgiu antes do lançamento do GitHub "
+"Actions. Atualmente, o AppVeyor oferece suporte a sistemas operacionais "
+"além do Windows."
#: ../../continuous-integration/ci.md:76
msgid ""
@@ -205,6 +265,9 @@ msgid ""
"choice in our ecosystem. Usage dropped after Travis CI ended free support"
" for open-source projects."
msgstr ""
+"[Travis CI:](https://www.travis-ci.com/) já foi uma plataforma de CI muito "
+"utilizada no nosso ecossistema. Seu uso diminuiu depois que o Travis CI "
+"encerrou o suporte gratuito para projetos open source."
#: ../../continuous-integration/ci.md:77
msgid ""
@@ -212,10 +275,13 @@ msgid ""
"builds of websites and documentation since it offers a preview of the PR "
"changes."
msgstr ""
+"[CircleCI:](https://circleci.com/) O CircleCI pode ser útil para builds "
+"automatizadas de sites e documentação, pois oferece uma prévia das "
+"alterações feitas no PR."
#: ../../continuous-integration/ci.md:80
msgid "Embrace automation"
-msgstr ""
+msgstr "Adote a automação"
#: ../../continuous-integration/ci.md:82
msgid ""
@@ -225,17 +291,23 @@ msgid ""
"linting and code style. You can even automate spell-checking your "
"documentation and docstrings!"
msgstr ""
+"Ao adotar CI/CD, você pode garantir que seu código funcione como esperado "
+"nos mais diversos ambientes de usuários. Além disso, é possível "
+"automatizar certas verificações (e, em alguns casos, correções de código), "
+"incluindo linting e padronização de estilo de código. Você pode até "
+"automatizar a verificação ortográfica da sua documentação e das docstrings!"
#: ../../continuous-integration/index.md:5
msgid "What is CI?"
-msgstr ""
+msgstr "O que é CI?"
#: ../../continuous-integration/index.md:5
msgid "Continuous Integration"
-msgstr ""
+msgstr "Integração Contínua"
#: ../../continuous-integration/index.md:2
msgid ""
"Continuous Integration (CI) and Continuous Deployment (CD) for your "
"Python package"
msgstr ""
+"Integração Contínua (CI) e Implantação Contínua (CD) para seu pacote Python"
diff --git a/locales/pt/LC_MESSAGES/documentation.po b/locales/pt/LC_MESSAGES/documentation.po
index cee9fc7ee..0b501bdd2 100644
--- a/locales/pt/LC_MESSAGES/documentation.po
+++ b/locales/pt/LC_MESSAGES/documentation.po
@@ -480,7 +480,7 @@ msgstr ""
#: ../../documentation/glossary.md
msgid "Code of conduct"
-msgstr ""
+msgstr "código de conduta"
#: ../../documentation/glossary.md:232
msgid ""
@@ -2555,7 +2555,7 @@ msgstr ""
#: ../../documentation/repository-files/readme-file-best-practices.md:157
msgid "Your code of conduct"
-msgstr ""
+msgstr "Seu código de conduta"
#: ../../documentation/repository-files/readme-file-best-practices.md:158
msgid "Licensing information"
diff --git a/locales/pt/LC_MESSAGES/index.po b/locales/pt/LC_MESSAGES/index.po
index 3cea58d90..11bba953a 100644
--- a/locales/pt/LC_MESSAGES/index.po
+++ b/locales/pt/LC_MESSAGES/index.po
@@ -22,49 +22,50 @@ msgstr ""
#: ../../index.md:257
msgid "Tutorials"
-msgstr ""
+msgstr "Tutoriais"
#: ../../index.md:264
msgid "Packaging"
-msgstr ""
+msgstr "Packaging"
#: ../../index.md:135 ../../index.md:272
msgid "Documentation"
-msgstr ""
+msgstr "Documentação"
#: ../../index.md:175 ../../index.md:280
msgid "Tests"
-msgstr ""
+msgstr "Testes"
#: ../../index.md:280
msgid "Testing"
-msgstr ""
+msgstr "Testes"
#: ../../index.md:288
msgid "Maintain"
-msgstr ""
+msgstr "Manter"
#: ../../index.md:288
msgid "Continuous Integration"
-msgstr ""
+msgstr "Integração Contínua"
#: ../../index.md:296
msgid "Glossary"
-msgstr ""
+msgstr "Glossário"
#: ../../index.md:296
msgid "Reference"
-msgstr ""
+msgstr "Referência"
#: ../../index.md:1
msgid "pyOpenSci Python Package Guide"
-msgstr ""
+msgstr "Guia de Pacotes Python da pyOpenSci"
#: ../../index.md:3
msgid ""
"We support the Python tools that scientists need to create open science "
"workflows."
-msgstr ""
+msgstr "Damos suporte às ferramentas Python que cientistas precisam para criar "
+"fluxos de trabalho de ciência aberta."
#: ../../index.md:20
msgid ""
@@ -78,15 +79,15 @@ msgstr ""
#: ../../index.md:20
msgid "GitHub release (latest by date)"
-msgstr ""
+msgstr "Release do GitHub (mais recente por data)"
#: ../../index.md:20
msgid "DOI"
-msgstr ""
+msgstr "DOI"
#: ../../index.md:27
msgid "About this guide"
-msgstr ""
+msgstr "Sobre este guia"
#: ../../index.md:29
msgid ""
@@ -98,68 +99,78 @@ msgid ""
"circle is says maintainers and has a small icon with people. On the "
"outside circle there is an arrow and it says infrastructure."
msgstr ""
+"Imagem com o logotipo de flor da pyOpenSci no canto superior direito. A "
+"imagem mostra o ciclo de vida do packaging. O gráfico apresenta uma "
+"visão geral de alto nível dos elementos de um pacote Python. O círculo "
+"interno possui 5 itens — documentação do usuário, código/API, suíte de "
+"testes, documentação para contribuidores e metadados do projeto / licença "
+"/ readme. No centro do círculo está escrito \"maintainers\" e há um pequeno "
+"ícone com pessoas. No círculo externo há uma seta com a palavra "
+"\"infrastructure\"."
#: ../../index.md:35
msgid "This guide will help you:"
-msgstr ""
+msgstr "Este guia vai ajudar você a:"
#: ../../index.md:37
msgid "Learn how to create a Python package from start to finish"
-msgstr ""
+msgstr "Aprender a criar um pacote Python do começo ao fim"
#: ../../index.md:38
msgid "Understand the broader Python packaging tool ecosystem"
-msgstr ""
+msgstr "Entender o ecossistema mais amplo de ferramentas de packaging Python."
#: ../../index.md:39
msgid "Navigate and make decisions around tool options"
-msgstr ""
+msgstr "Navegar e tomar decisões sobre as opções de ferramentas"
#: ../../index.md:40
msgid "Understand all of the pieces of creating and maintaining a Python package"
-msgstr ""
+msgstr "Entender todas as partes envolvidas na criação e manutenção de um pacote Python"
#: ../../index.md:42
msgid ""
"You will also find best practice recommendations and curated lists of "
"community resources surrounding packaging and package documentation."
msgstr ""
+"Você também encontrará recomendações de boas práticas e listas selecionadas de "
+"recursos da comunidade sobre packaging e documentação de pacotes."
#: ../../index.md:45
msgid "Todo"
-msgstr ""
+msgstr "A Fazer"
#: ../../index.md:46
msgid "TODO: change the navigation of docs to have a"
-msgstr ""
+msgstr "A Fazer: alterar a navegação da documentação para ter um(a)"
#: ../../index.md:48
msgid "user documentation contributor / maintainer documentation"
-msgstr ""
+msgstr "documentação do usuário / documentação do contribuidor"
#: ../../index.md:50
msgid "development guide"
-msgstr ""
+msgstr "guia de desenvolvimento"
#: ../../index.md:51
msgid "contributing guide"
-msgstr ""
+msgstr ""guia de contribuição"
#: ../../index.md:53
msgid "Community docs"
-msgstr ""
+msgstr "Documentação da comunidade"
#: ../../index.md:54
msgid "readme, coc, license"
-msgstr ""
+msgstr "readme, coc, license"
#: ../../index.md:56
msgid "Publish your docs"
-msgstr ""
+msgstr "Publique sua documentação"
#: ../../index.md:59
msgid "Tutorial Series: Create a Python Package"
-msgstr ""
+msgstr "Série de tutoriais: Crie um pacote Python"
#: ../../index.md:61
msgid ""
@@ -168,64 +179,71 @@ msgid ""
"review process or watch development of future tutorials in our [GitHub "
"repo here](https://github.com/pyOpenSci/python-package-guide)."
msgstr ""
+"A primeira rodada da nossa série de tutoriais desenvolvida pela comunidade "
+"sobre como criar um pacote Python para cientistas está concluída! "
+"Participe do processo de revisão da comunidade ou acompanhe o "
+"desenvolvimento dos próximos tutoriais em nosso [repositório no "
+"GitHub aqui](https://github.com/pyOpenSci/python-package-guide)."
#: ../../index.md:68
msgid "✿ Create a Package Tutorials ✿"
-msgstr ""
+msgstr "✿ Tutoriais de Criação de Pacotes ✿"
#: ../../index.md:72
msgid "[What is a Python package?](/tutorials/intro)"
-msgstr ""
+msgstr "[O que é um pacote Python?](/tutorials/intro)"
#: ../../index.md:73
msgid "[Create a Python package](/tutorials/create-python-package)"
-msgstr ""
+msgstr "[Crie um pacote Python](/tutorials/create-python-package)"
#: ../../index.md:74
msgid "[Publish your package to (test) PyPI](/tutorials/publish-pypi)"
-msgstr ""
+msgstr "[Publique seu pacote no (test) PyPI](/tutorials/publish-pypi)"
#: ../../index.md:75
msgid "[Publish your package to conda-forge](/tutorials/publish-conda-forge)"
-msgstr ""
+msgstr "[Publique seu pacote no conda-forge](/tutorials/publish-conda-forge)"
#: ../../index.md:78
msgid "✿ Package Metadata Tutorials ✿"
-msgstr ""
+msgstr "✿ Tutoriais de Metadados de Pacotes ✿"
#: ../../index.md:82
msgid "[How to add a README file](/tutorials/add-readme)"
-msgstr ""
+msgstr "[Como adicionar um arquivo README](/tutorials/add-readme)"
#: ../../index.md:83
msgid ""
"[How to add metadata to a pyproject.toml file for publication to "
"PyPI.](/tutorials/pyproject-toml.md)"
msgstr ""
+"[Como adicionar metadados a um arquivo pyproject.toml para publicação no "
+"PyPI.](/tutorials/pyproject-toml.md)"
#: ../../index.md:86
msgid "✿ Packaging Tool Tutorials ✿"
-msgstr ""
+msgstr "✿ Tutoriais de Ferramentas de Packaging ✿"
#: ../../index.md:90
msgid "[Introduction to Hatch](/tutorials/get-to-know-hatch)"
-msgstr ""
+msgstr "[Introdução ao Hatch](/tutorials/get-to-know-hatch)""
#: ../../index.md:91
msgid "[Run Python scripts using Hatch](/tutorials/run-python-scripts-hatch)"
-msgstr ""
+msgstr "[Execute scripts Python usando Hatch](/tutorials/run-python-scripts-hatch)"
#: ../../index.md:94
msgid "✿ Reference Guides ✿"
-msgstr ""
+msgstr "✿ Guias de Referência ✿"
#: ../../index.md:98
msgid "[Command Line Reference Guide](/tutorials/command-line-reference)"
-msgstr ""
+msgstr "[Guia de Referência da Linha de Comando](/tutorials/command-line-reference)"
#: ../../index.md:102
msgid "Python Packaging for Scientists"
-msgstr ""
+msgstr "Packaging Python para Cientistas"
#: ../../index.md:104
msgid ""
@@ -233,6 +251,9 @@ msgid ""
"the the vibrant ecosystem of packaging tools that are available to help "
"you with your Python packaging needs."
msgstr ""
+"Aprenda as melhores práticas de Python packaging. Você também conhecerá "
+"o ecossistema vibrante de ferramentas de packaging disponíveis para "
+"ajudar nas suas necessidades de packaging Python."
#: ../../index.md:111
msgid "✨ Create your package ✨"
@@ -359,7 +380,7 @@ msgid ""
"[Set norms with a Code of Conduct](/documentation/repository-files/code-"
"of-conduct-file)"
msgstr ""
-"[Defina normas com um Código de Conduta](/documentation/repository-files/code-of-conduct-file)"
+"[Defina normas com um Código de conduta](/documentation/repository-files/code-of-conduct-file)"
#: ../../index.md:162
msgid "[License your package](/documentation/repository-files/license-files)"
diff --git a/locales/pt/LC_MESSAGES/maintain-automate.po b/locales/pt/LC_MESSAGES/maintain-automate.po
index 3d87acc32..28a1a58b0 100644
--- a/locales/pt/LC_MESSAGES/maintain-automate.po
+++ b/locales/pt/LC_MESSAGES/maintain-automate.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-05-18 10:26-0700\n"
+"POT-Creation-Date: 2026-07-18 04:18-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language: pt\n"
@@ -226,6 +226,186 @@ msgid ""
"documentation and docstrings!"
msgstr ""
+#: ../../maintain-automate/dev-installs.md:1
+msgid "Installing your own code"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:3
+msgid ""
+"You have a conda environment. It works. Maybe it has packages that were "
+"hard to install, like GDAL, HDF5, or other compiled scientific "
+"dependencies."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:5
+msgid ""
+"You also have code that you are writing locally. Maybe it started as a "
+"script, or maybe it is already organized as a Python package. You want to"
+" use that code inside the same environment with GDAL, HDF5, and the other"
+" tools you already installed."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:7
+msgid ""
+"The instructions to install your code into a conda environment is to "
+"first activate your conda environment `conda activate your_env_name` and "
+"then run this: `python -m pip install -e . --no-deps`. You may also see "
+"this written as `pip install -e .`. See [The Full Command](the-full-"
+"command) section below for more info as to the details of this command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:9
+msgid ""
+"If this is the first time you're seeing pip install commands, you may not"
+" be totally sure what is going on here. Conda created the environment, "
+"why am I using `pip` to install things now? You may have heard guidance "
+"to generally try and avoid mixing conda and pip? You may already be "
+"mixing conda and pip and things are totally fine. You may also not care "
+"at all because `pip install -e .` seems to work fine and you can get back"
+" to what you're actually trying to do. (If that last one is you, you're "
+"also probably not reading this page). In any event, all of these "
+"situations are perfectly understandable and totally okay for you to be "
+"going through."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:11
+msgid ""
+"So... why pip? The short answer is that conda and pip are doing different"
+" jobs here."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:13
+msgid ""
+"The slightly longer, mostly apologetic, answer is this is just sort of "
+"the current ergonomics of how python packaging works and, honestly? Most "
+"of us have turned this confusing pain point into muscle memory. But not "
+"you. You're new here. And you're like... wat? And you're totally "
+"justified to feel this way."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:15
+msgid ""
+"So, what is happening here? `conda` manages the environment: the Python "
+"runtime, compiled libraries, command line tools, and the packages your "
+"project depends on. This is stuff that you've already been doing and "
+"you're comfortable with (or at least familiar with). `pip` is doing one "
+"Python-packaging-specific job: installing your local package into the "
+"active environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:17
+msgid ""
+"In editable mode, the `-e` flag, `pip` connects the active environment to"
+" the source files you are editing. And... why exactly is that useful?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:19
+msgid "It's useful because it gives you a pretty quick development loop:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:21
+msgid "Edit your code in your editor."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:22
+msgid "Run it from a terminal, test suite, or Jupyter notebook."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:23
+msgid "Edit the code again."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:24
+msgid "Run it again without reinstalling your package."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:26
+msgid ""
+"So the goal is not to switch from conda to pip. The goal is to keep using"
+" your conda environment while making your local package importable inside"
+" that environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:28
+msgid "Should I use pip for everything now?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:30
+msgid "Probably not?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:32
+msgid ""
+"If conda is already working well for your project, keep using conda to "
+"manage the environment. Use pip only for this one task: installing your "
+"local package in editable mode."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:34
+msgid ""
+"If you are curious about other tools like uv, pixi, Hatch, or pip-only "
+"workflows, see [Environment Managers](environment-managers.md). Those "
+"tools can be great choices. But you do not need to switch tools just to "
+"develop your local package inside a conda environment."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:36
+msgid ""
+"As a final note, people in the conda ecosystem are actively working on "
+"better conda/pip interoperability. In the future, this workflow may "
+"become less awkward. For now, `python -m pip install -e . --no-deps` is "
+"the standard bridge."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:39
+msgid "The full command"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:41
+msgid ""
+"`python -m pip install -e . --no-deps` is a mouthful. I know it. You know"
+" it. Why do we do these things?"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:43
+msgid "The simplest version of this is:"
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:48
+msgid "But we recommend the longer version in conda environments for two reasons."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:50
+msgid ""
+"The `python -m pip` part ensures that you're using pip from the active "
+"conda environment. Sometimes this results in `pip not found`, which is "
+"actually a good error to get because it means you prevented an annoying-"
+"to-debug failure mode. If this happens just `conda install pip` and try "
+"again. So, why? Sometimes `pip` from a different python environment can "
+"be on your PATH which means that you'll accidentally install your code "
+"into an unrelated python environment. This can be confusing to debug. "
+"This has happened to most (all?) of us. It usually hits when you're least"
+" prepared to debug and fix it. So we recommend the `python -m` in front "
+"to prevent this from happening. But it does add to the length of the "
+"command."
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:52
+msgid ""
+"The `--no-deps` flag tells pip not to install your package's "
+"dependencies, if you have any listed in your project. If you do have them"
+" listed, probably in your `pyproject.toml` file, then `pip install -e .` "
+"will try to install the dependencies that are listed in that file. In a "
+"conda environment, that can range from \"mostly fine\" to \"now my "
+"environment is broken and I am not sure how to recover.\""
+msgstr ""
+
+#: ../../maintain-automate/dev-installs.md:54
+msgid ""
+"With `--no-deps`, pip installs only your local package. You remain "
+"responsible for managing the environment dependencies with conda."
+msgstr ""
+
#: ../../maintain-automate/environment-managers.md:2
msgid "Environment Managers for Python Packaging"
msgstr ""
@@ -599,7 +779,7 @@ msgid "Conda and mamba also function as environment managers - see below!"
msgstr ""
#: ../../maintain-automate/environment-managers.md:112
-#: ../../maintain-automate/index.md:46
+#: ../../maintain-automate/index.md:51
msgid "Environment Managers"
msgstr ""
@@ -750,15 +930,19 @@ msgid ""
" your team gets identical environments."
msgstr ""
-#: ../../maintain-automate/index.md:46
+#: ../../maintain-automate/index.md:51
msgid "What is CI?"
msgstr ""
-#: ../../maintain-automate/index.md:46
+#: ../../maintain-automate/index.md:51
msgid "Task runners"
msgstr ""
-#: ../../maintain-automate/index.md:46
+#: ../../maintain-automate/index.md:51
+msgid "Development installs with conda"
+msgstr ""
+
+#: ../../maintain-automate/index.md:51
msgid "Maintain & Automate"
msgstr ""
@@ -831,6 +1015,14 @@ msgid ""
"contributors."
msgstr ""
+#: ../../maintain-automate/index.md:46
+msgid ""
+"[**Development installs in conda environments**](dev-installs) help you "
+"connect conda-based scientific development environments with local Python"
+" package development. This is especially useful when your package depends"
+" on compiled or system-level dependencies that conda manages well."
+msgstr ""
+
#: ../../maintain-automate/task-runners.md:2
msgid "Task Runners for Python Packaging"
msgstr ""
diff --git a/locales/pt/LC_MESSAGES/package-structure-code.po b/locales/pt/LC_MESSAGES/package-structure-code.po
index ab3948761..334f92265 100644
--- a/locales/pt/LC_MESSAGES/package-structure-code.po
+++ b/locales/pt/LC_MESSAGES/package-structure-code.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pyOpenSci Python Package Guide \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2026-05-18 10:26-0700\n"
+"POT-Creation-Date: 2026-07-29 09:02-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language: pt\n"
@@ -22,32 +22,41 @@ msgstr ""
#: ../../package-structure-code/code-style-linting-format.md:1
msgid "Python Package Code Style, Format and Linters"
-msgstr ""
+msgstr "Estilo de Código, Formatação e Linters para Pacotes Python"
#: ../../package-structure-code/code-style-linting-format.md:3
#: ../../package-structure-code/publish-python-package-pypi-conda.md:12
msgid "Take Aways"
-msgstr ""
+msgstr "Conclusões"
#: ../../package-structure-code/code-style-linting-format.md:5
msgid "pyOpenSci requires authors to follow PEP 8 code format guidelines"
msgstr ""
+"A pyOpenSci exige que os autores sigam as diretrizes de formatação de "
+"código da PEP 8."
#: ../../package-structure-code/code-style-linting-format.md:6
msgid ""
"Setting up a code formatters like Black and isort will help you enforce "
"PEP 8 style guidelines and also consistent, readable code format"
msgstr ""
+"Configurar formatadores de código, como Black e isort, ajudará você a "
+"aplicar as diretrizes de estilo da PEP 8 e também manter um formato de "
+"código consistente e legível."
#: ../../package-structure-code/code-style-linting-format.md:7
msgid "Some commonly used tools are: Black, Isort, flake8, Ruff"
msgstr ""
+"Algumas ferramentas geralmente utilizadas são: Black, isort, flake8 e "
+"Ruff."
#: ../../package-structure-code/code-style-linting-format.md:8
msgid ""
"You can also setup pre-commit hooks which will run code formatters "
"locally each time you make a commit."
msgstr ""
+"Você também pode configurar hooks de pre-commit, que executarão "
+"formatadores de código localmente sempre que fizer um commit."
#: ../../package-structure-code/code-style-linting-format.md:10
msgid ""
@@ -56,12 +65,20 @@ msgid ""
"using the tools specified in your pre-commit-config.yaml file. It can "
"save significant time and make contributions easier for new contributors."
msgstr ""
+"O [precommit.ci](https://pre-commit.ci/) é um bot que você pode adicionar"
+" ao seu repositório no GitHub. Ele aplica automaticamente a formatação de"
+" código em todos os PRs usando as ferramentas especificadas no arquivo "
+"pre-commit-config.yaml. Isso pode economizar bastante tempo e facilitar "
+"as contribuições de novos contribuidores."
#: ../../package-structure-code/code-style-linting-format.md:11
msgid ""
"Automation is good! By making code quality tools care of your code, you "
"can focus on structural and high values tasks."
msgstr ""
+"Automação é uma coisa boa! Ao deixar as ferramentas de qualidade de "
+"código cuidarem do seu código, você pode focar em tarefas estruturais e "
+"de maior valor."
#: ../../package-structure-code/code-style-linting-format.md:14
msgid ""
@@ -69,12 +86,17 @@ msgid ""
"across the scientific Python ecosystem because using similar formats "
"makes code easier to read."
msgstr ""
+"Um formato e estilo de código consistentes são úteis tanto para o seu "
+"pacote quanto para todo o ecossistema científico Python, porque usar "
+"formatos semelhantes torna o código mais fácil de ler."
#: ../../package-structure-code/code-style-linting-format.md:18
msgid ""
"For instance, if you saw a sentence like this one without any spaces, or "
"punctuation, it would take your brain longer to process it."
msgstr ""
+"Por exemplo, se você visse uma frase como esta sem espaços ou pontuação, "
+"seu cérebro levaria mais tempo para processá-la."
#: ../../package-structure-code/code-style-linting-format.md:25
msgid ""
@@ -82,6 +104,9 @@ msgid ""
"[Python PEP 8 format rules](https://peps.python.org/pep-0008/) as closely"
" as you can."
msgstr ""
+"O processo de revisão por pares da pyOpenSci exige que você siga, as "
+"regras padrão de formatação da [PEP 8](https://peps.python.org/pep-0008/)"
+" o máximo possível."
#: ../../package-structure-code/code-style-linting-format.md:29
msgid ""
@@ -89,24 +114,34 @@ msgid ""
"However, we do look for consistency and readability in code style. Below "
"you will find a discussion of:"
msgstr ""
+"A pyOpenSci não exige que você use uma ferramenta específica de "
+"formatação de código. No entanto, buscamos consistência e legibilidade no"
+" estilo do código. A seguir, você encontrará uma discussão sobre:"
#: ../../package-structure-code/code-style-linting-format.md:33
msgid "The benefits of using linters and code format tools in your workflow"
msgstr ""
+"Os benefícios de usar linters e ferramentas de formatação de código no "
+"seu fluxo de trabalho"
#: ../../package-structure-code/code-style-linting-format.md:34
msgid "Some commonly used tools in the scientific Python space"
-msgstr ""
+msgstr "Algumas ferramentas bastante utilizadas no ecossistema científico Python"
#: ../../package-structure-code/code-style-linting-format.md:35
msgid ""
"Setting up pre-commit hooks and the pre-commit.ci bot to make using code "
"format tools in daily workflows and in pull requests on GitHub easier."
msgstr ""
+"Configurar hooks de pre-commit e o bot pre-commit.ci para facilitar o uso"
+" de ferramentas de formatação de código nos fluxo de trabalho cotidiano e"
+" em pull requests no GitHub."
#: ../../package-structure-code/code-style-linting-format.md:39
msgid "Use a code format tool (or tools) to make your life easier"
msgstr ""
+"Use uma ferramenta (ou ferramentas) de formatação de código para "
+"facilitar sua vida"
#: ../../package-structure-code/code-style-linting-format.md:41
msgid ""
@@ -117,36 +152,54 @@ msgid ""
"you, adhering to PEP 8 standards and applying consistent style decisions "
"throughout."
msgstr ""
+"Sugerimos que você use uma ferramenta de formatação de código, ou um "
+"conjunto delas, porque aplicar manualmente todas as especificações de "
+"formatação da PEP 8 consome muito tempo dos mantenedores e também pode se"
+" tornar uma barreira para novos contribuidores em potencial. Ferramentas "
+"de formatação de código reformatam automaticamente seu código, seguindo "
+"os padrões da PEP 8 e aplicando decisões de estilo consistentes em todo o"
+" projeto."
#: ../../package-structure-code/code-style-linting-format.md:47
msgid "Setting up a code format suite of tools will:"
-msgstr ""
+msgstr "Configurar um conjunto de ferramentas de formatação de código irá:"
#: ../../package-structure-code/code-style-linting-format.md:49
msgid "Save you and your maintainer team time in fixing PEP 8 inconsistencies."
msgstr ""
+"Economizar tempo seu e da equipe de mantenedores na correção de "
+"inconsistências com a PEP 8."
#: ../../package-structure-code/code-style-linting-format.md:50
msgid "Ensure that format and style is consistent across your entire code-base."
msgstr ""
+"Garantir que a formatação e o estilo sejam consistentes em toda a sua "
+"base de código."
#: ../../package-structure-code/code-style-linting-format.md:51
msgid ""
"Avoid lengthy discussions with contributors and other maintainers about "
"personalized code format preferences during reviews."
msgstr ""
+"Evitar discussões longas com contribuidores e outros mantenedores sobre "
+"preferências pessoais de formatação de código durante revisões."
#: ../../package-structure-code/code-style-linting-format.md:53
msgid ""
"Avoid pure visual edits in the code base so that code reviews focus on "
"added value"
msgstr ""
+"Evitar alterações puramente visuais na base de código, permitindo que as "
+"revisões de código foquem no que realmente agrega valor"
#: ../../package-structure-code/code-style-linting-format.md:55
msgid ""
"Many packages use a suite of tools to apply code format rules, taking the"
" work out of manually implementing code format requirements."
msgstr ""
+"Muitos pacotes usam um conjunto de ferramentas para aplicar regras de "
+"formatação de código, eliminando o trabalho manual de implementar esses "
+"requisitos de formatação."
#: ../../package-structure-code/code-style-linting-format.md:58
msgid ""
@@ -154,18 +207,21 @@ msgid ""
"ecosystem, will also broadly make code easier to scan, understand and "
"contribute to."
msgstr ""
+"Uma formatação de código consistente entre pacotes dentro do ecossistema "
+"(científico) Python também torna o código, de forma geral, mais fácil de "
+"ler, entender e contribuir."
#: ../../package-structure-code/code-style-linting-format.md:61
msgid "Linting vs. format and style"
-msgstr ""
+msgstr "Linting vs. formatação e estilo"
#: ../../package-structure-code/code-style-linting-format.md:63
msgid "Before we dive in let's get a few definitions out of the way."
-msgstr ""
+msgstr "Antes de começarmos, vamos esclarecer algumas definições."
#: ../../package-structure-code/code-style-linting-format.md:65
msgid "Code linting"
-msgstr ""
+msgstr "Linting de código"
#: ../../package-structure-code/code-style-linting-format.md:67
msgid ""
@@ -174,10 +230,14 @@ msgid ""
"what the error is and on what line it was discovered. Flake8, discussed "
"below, is an example of a commonly-used code linter."
msgstr ""
+"Um linter de código é uma ferramenta que analisa seu código e identifica "
+"erros ou problemas. Normalmente, um linter não modifica seu código. Ele "
+"informa qual é o erro e em qual linha ele foi encontrado. O Flake8, "
+"discutido abaixo, é um exemplo de linter de código bastante utilizado."
#: ../../package-structure-code/code-style-linting-format.md:72
msgid "Code formatters (and stylers)"
-msgstr ""
+msgstr "Formatadores de código (e estilizadores)"
#: ../../package-structure-code/code-style-linting-format.md:74
msgid ""
@@ -185,6 +245,10 @@ msgid ""
"formatters often follow PEP 8 standards. However, they also make "
"stylistic decisions about code consistency."
msgstr ""
+"Formatadores de código reformatam seu código automaticamente. "
+"Formatadores de código voltados para Python geralmente seguem os padrões "
+"da PEP 8. No entanto, eles também tomam decisões de estilo para garantir "
+"a consistência do código."
#: ../../package-structure-code/code-style-linting-format.md:78
msgid ""
@@ -192,18 +256,22 @@ msgid ""
" PEP 8 standards while also making decisions about things like consistent"
" use of double quotes for strings, and spacing of items in lists."
msgstr ""
+"O Black é um exemplo de formatador de código bastante utilizado. O Black "
+"aplica os padrões da PEP 8 e também toma decisões sobre aspectos como o "
+"uso consistente de aspas duplas em strings e o espaçamento de itens em "
+"listas."
#: ../../package-structure-code/code-style-linting-format.md:82
msgid "You will learn more about Black below."
-msgstr ""
+msgstr "Você aprenderá mais sobre o Black abaixo."
#: ../../package-structure-code/code-style-linting-format.md:84
msgid "Code linting, formatting and styling tools"
-msgstr ""
+msgstr "Ferramentas de linting, formatação e estilo de código"
#: ../../package-structure-code/code-style-linting-format.md:87
msgid "Black"
-msgstr ""
+msgstr "Black"
#: ../../package-structure-code/code-style-linting-format.md:89
msgid ""
@@ -213,6 +281,12 @@ msgid ""
"generally adheres to PEP 8 style guidelines with some exceptions. A few "
"examples of those exceptions are below:"
msgstr ""
+"O [Black](https://black.readthedocs.io/en/stable/) é um formatador de "
+"código. O Black corrigirá automaticamente (e _descaradamente_) problemas "
+"de espaçamento e garantirá que a formatação do código seja consistente em"
+" todo o seu pacote. O Black também geralmente segue as diretrizes de "
+"estilo da PEP 8, com algumas exceções. Alguns exemplos dessas exceções "
+"estão abaixo:"
#: ../../package-structure-code/code-style-linting-format.md:95
msgid ""
@@ -220,32 +294,45 @@ msgid ""
"character `PEP 8` specification. However, line length is a setting can be"
" manually overwritten in your Black configuration."
msgstr ""
+"O Black usa, por padrão, um comprimento de linha de 88 caracteres (79 + "
+"10%), em vez dos 79 caracteres especificados pela `PEP 8`. No entanto, o "
+"comprimento da linha é uma configuração que pode ser alterada manualmente"
+" na configuração do Black."
#: ../../package-structure-code/code-style-linting-format.md:96
msgid "Black will not adjust line length in your comments or docstrings."
msgstr ""
+"O Black não ajustará o comprimento das linhas em comentários ou "
+"docstrings."
#: ../../package-structure-code/code-style-linting-format.md:97
msgid ""
"This tool will not review and fix import order (you need `isort` or "
"`ruff` to do that - see below)."
msgstr ""
+"Essa ferramenta não revisará nem corrigirá a ordem dos imports (você "
+"precisará do `isort` ou `ruff` para fazer isso — veja abaixo)."
#: ../../package-structure-code/code-style-linting-format.md:100
msgid ""
"If you are interested in seeing how Black will format your code, you can "
"use the [Black playground](https://black.vercel.app/)"
msgstr ""
+"Se você tiver interesse em ver como o Black formatará seu código, pode "
+"usar o [Black playground](https://black.vercel.app/)"
#: ../../package-structure-code/code-style-linting-format.md:104
msgid ""
"Using a code formatter like Black will leave you more time to work on "
"code function rather than worry about format."
msgstr ""
+"Usar um formatador de código como o Black deixará você com mais tempo "
+"para trabalhar na funcionalidade do código, em vez de se preocupar com "
+"formatação."
#: ../../package-structure-code/code-style-linting-format.md:108
msgid "Flake8"
-msgstr ""
+msgstr "Flake8"
#: ../../package-structure-code/code-style-linting-format.md:110
msgid ""
@@ -253,38 +340,50 @@ msgid ""
"[flake8](https://flake8.pycqa.org/en/latest/) to your code format "
"toolbox."
msgstr ""
+"Para seguir os padrões de formatação `pep8` do Python, talvez você queira"
+" adicionar o [flake8](https://flake8.pycqa.org/en/latest/) ao seu "
+"conjunto de ferramentas de formatação de código."
#: ../../package-structure-code/code-style-linting-format.md:114
msgid "flake8 will:"
-msgstr ""
+msgstr "O flake8 irá:"
#: ../../package-structure-code/code-style-linting-format.md:116
msgid ""
"Flag every line in your code that extends beyond 79 characters (including"
" those in docstrings and comments)"
msgstr ""
+"Sinalizar todas as linhas do seu código que ultrapassem 79 caracteres "
+"(incluindo linhas em docstrings e comentários)"
#: ../../package-structure-code/code-style-linting-format.md:117
msgid ""
"Flag spacing issues that conflict with PEP 8 guidelines such as missing "
"spaces after commas"
msgstr ""
+"Sinalizar problemas de espaçamento que entrem em conflito com as "
+"diretrizes da PEP 8, como ausência de espaços após vírgulas"
#: ../../package-structure-code/code-style-linting-format.md:119
msgid ""
"Flake8 also flags unused imports and unused declared variables in your "
"modules."
msgstr ""
+"O Flake8 também sinaliza imports não utilizados e variáveis declaradas "
+"mas não utilizadas nos seus módulos."
#: ../../package-structure-code/code-style-linting-format.md:122
msgid ""
"Below you can see the output of running `flake8 filename.py` at the "
"command line for a Python file within a package called `stravalib`."
msgstr ""
+"Abaixo, você pode ver a saída da execução de `flake8 filename.py` na "
+"linha de comando para um arquivo Python dentro de um pacote chamado "
+"`stravalib`."
#: ../../package-structure-code/code-style-linting-format.md:126
msgid "The line length standard for PEP 8 is 79 characters."
-msgstr ""
+msgstr "O padrão de comprimento de linha da PEP 8 é de 79 caracteres."
#: ../../package-structure-code/code-style-linting-format.md:128
msgid ""
@@ -292,10 +391,14 @@ msgid ""
" module on the command line. The Python file itself is not modified. "
"Using this output, you can fix each issue line by line manually."
msgstr ""
+"Observe que o flake8 retorna uma lista de problemas encontrados no módulo"
+" `model.py` na linha de comando. O arquivo Python em si não é modificado."
+" Usando essa saída, você pode corrigir cada problema manualmente, linha "
+"por linha."
#: ../../package-structure-code/code-style-linting-format.md:143
msgid "Isort"
-msgstr ""
+msgstr "Isort"
#: ../../package-structure-code/code-style-linting-format.md:145
msgid ""
@@ -303,6 +406,9 @@ msgid ""
" requires. Imports should always be located at the top of each Python "
"module in your package."
msgstr ""
+"Imports em Python se referem aos pacotes Python que um módulo do seu "
+"pacote requer. Os imports devem sempre estar localizados no topo de cada "
+"módulo Python do seu pacote."
#: ../../package-structure-code/code-style-linting-format.md:149
msgid ""
@@ -310,28 +416,34 @@ msgid ""
"imports](https://peps.python.org/pep-0008/#imports). These standards are "
"listed below:"
msgstr ""
+"A [PEP 8 possui padrões específicos para a ordem desses "
+"imports](https://peps.python.org/pep-0008/#imports). Esses padrões estão "
+"listados abaixo:"
#: ../../package-structure-code/code-style-linting-format.md:151
msgid "Imports should be grouped in the following order:"
-msgstr ""
+msgstr "Os imports devem ser agrupados na seguinte ordem:"
#: ../../package-structure-code/code-style-linting-format.md:153
msgid "Standard library imports."
-msgstr ""
+msgstr "Imports da biblioteca padrão."
#: ../../package-structure-code/code-style-linting-format.md:154
msgid "Related third party imports."
-msgstr ""
+msgstr "Imports de bibliotecas de terceiros."
#: ../../package-structure-code/code-style-linting-format.md:155
msgid "Local application/library specific imports."
-msgstr ""
+msgstr "Imports específicos da aplicação/biblioteca local."
#: ../../package-structure-code/code-style-linting-format.md:157
msgid ""
"While `flake8` will identify unused imports in your code, it won't fix or"
" identify issues with the order of package imports."
msgstr ""
+"Embora o `flake8` identifique imports não utilizados no seu código, ele "
+"não corrigirá nem identificará problemas relacionados à ordem dos "
+"imports."
#: ../../package-structure-code/code-style-linting-format.md:160
msgid ""
@@ -339,14 +451,18 @@ msgid ""
"will then modify your code, automatically reordering all imports. This "
"leaves you with one less thing to think about when cleaning up your code."
msgstr ""
+"O `isort` identificará onde os imports no seu código estão fora de ordem."
+" Em seguida, ele modificará seu código, reorganizando automaticamente "
+"todos os imports. Isso deixa você com uma preocupação a menos ao limpar "
+"seu código."
#: ../../package-structure-code/code-style-linting-format.md:165
msgid "Example application of isort"
-msgstr ""
+msgstr "Exemplo de uso do isort"
#: ../../package-structure-code/code-style-linting-format.md:167
msgid "Code imports before `isort` is run:"
-msgstr ""
+msgstr "Imports do código antes da execução do `isort`:"
#: ../../package-structure-code/code-style-linting-format.md:169
msgid ""
@@ -356,18 +472,23 @@ msgid ""
" doing the import. Also notice that there are no spaces in the imports "
"listed below."
msgstr ""
+"Abaixo, `pandas` é um pacote de terceiros, `typing` é um pacote central "
+"do `Python` distribuído com o `Python`, e `examplePy.temperature` é um "
+"módulo do próprio projeto, o que significa que ele pertence ao mesmo "
+"pacote do arquivo que está fazendo o import. Observe também que não há "
+"espaços nos imports listados abaixo."
#: ../../package-structure-code/code-style-linting-format.md:179
msgid "From the project root, run:"
-msgstr ""
+msgstr "A partir da raiz do projeto, execute:"
#: ../../package-structure-code/code-style-linting-format.md:185
msgid "Python file `temporal.py` imports after `isort` has been run"
-msgstr ""
+msgstr "Imports do arquivo Python `temporal.py` após a execução do `isort`"
#: ../../package-structure-code/code-style-linting-format.md:193
msgid "Ruff"
-msgstr ""
+msgstr "Ruff"
#: ../../package-structure-code/code-style-linting-format.md:195
msgid ""
@@ -378,52 +499,70 @@ msgid ""
"replacement of all other tools mentioned here, or in complement to some "
"of them."
msgstr ""
+"O [Ruff](https://docs.astral.sh/ruff/) é uma nova adição ao ecossistema "
+"de qualidade de código, ganhando bastante adoção desde seu lançamento. O "
+"`ruff` é ao mesmo tempo um linter e um formatador de código para Python, "
+"com o objetivo de substituir várias ferramentas por meio de uma única "
+"interface. Assim, o `ruff` pode ser usado como substituto de todas as "
+"outras ferramentas mencionadas aqui, ou em complemento a algumas delas."
#: ../../package-structure-code/code-style-linting-format.md:201
msgid ""
"`ruff` has some interesting features that distinguish it from other "
"linters:"
msgstr ""
+"O `ruff` possui alguns recursos interessantes que o diferenciam de outros"
+" linters:"
#: ../../package-structure-code/code-style-linting-format.md:203
msgid "Linter configuration in `pyproject.toml`"
-msgstr ""
+msgstr "Configuração do linter no `pyproject.toml`"
#: ../../package-structure-code/code-style-linting-format.md:204
msgid "Several hundred rules included, many of which are automatically fixable"
msgstr ""
+"Várias centenas de regras incluídas, muitas das quais podem ser "
+"corrigidas automaticamente"
#: ../../package-structure-code/code-style-linting-format.md:205
msgid ""
"Rules explanation, see [F403](https://docs.astral.sh/ruff/rules"
"/undefined-local-with-import-star/) for an example"
msgstr ""
+"Explicação das regras, veja [F403](https://docs.astral.sh/ruff/rules"
+"/undefined-local-with-import-star/) como exemplo"
#: ../../package-structure-code/code-style-linting-format.md:206
msgid ""
"Fast execution time, makes a quick feedback loop possible even on large "
"projects."
msgstr ""
+"Tempo de execução rápido, permitindo um ciclo de feedback ágil mesmo em "
+"projetos grandes."
#: ../../package-structure-code/code-style-linting-format.md:208
msgid ""
"Here is a simple configuration to get started with `ruff`. It would go "
"into your `pyproject.toml`:"
msgstr ""
+"Aqui está uma configuração simples para começar a usar o `ruff`. Ela deve"
+" ser adicionada ao seu `pyproject.toml`:"
#: ../../package-structure-code/code-style-linting-format.md:216
msgid ""
"Depending on your project, you might want to add the following to sort "
"imports correctly:"
msgstr ""
+"Dependendo do seu projeto, talvez você queira adicionar o seguinte para "
+"ordenar corretamente os imports:"
#: ../../package-structure-code/code-style-linting-format.md:224
msgid "How to use code formatter in your local workflow"
-msgstr ""
+msgstr "Como usar formatadores de código no seu fluxo de desenvolvimento local"
#: ../../package-structure-code/code-style-linting-format.md:226
msgid "Linters, code formatters and your favorite coding tools"
-msgstr ""
+msgstr "Linters, formatadores de código e seus editores e IDEs favoritos"
#: ../../package-structure-code/code-style-linting-format.md:228
msgid ""
@@ -433,38 +572,53 @@ msgid ""
" save a file. In some editors you can also setup shortcuts that run your "
"favorite code format tools on demand."
msgstr ""
+"Linters podem ser executados como ferramentas de linha de comando, como "
+"mostrado acima. Eles também podem ser executados dentro da sua ferramenta"
+" de desenvolvimento favorita (por exemplo, VSCode, PyCharm, etc). Por "
+"exemplo, você pode preferir que ferramentas como Black e isort sejam "
+"executadas ao salvar um arquivo. Em alguns editores, também é possível "
+"configurar atalhos que executam suas ferramentas favoritas de formatação "
+"de código sob demanda."
#: ../../package-structure-code/code-style-linting-format.md:234
msgid "Use pre-commit hooks to run code formatters and linters on commits"
msgstr ""
+"Use hooks de pre-commit para executar formatadores de código e linters "
+"nos commits"
#: ../../package-structure-code/code-style-linting-format.md:236
msgid "You can also setup a `pre-commit hook` in your Python package repository."
msgstr ""
+"Você também pode configurar um `pre-commit hook` no repositório do seu "
+"pacote Python."
#: ../../package-structure-code/code-style-linting-format.md:238
msgid ""
"A pre-commit hook is a tool that allows an action (or actions) to be "
"triggered when you apply a commit to your git repository."
msgstr ""
+"Um pre-commit hook é uma ferramenta que permite que uma ação (ou ações) "
+"seja acionada quando você aplica um commit ao seu repositório Git."
#: ../../package-structure-code/code-style-linting-format.md:241
msgid "Pre-commit hook example workflow"
-msgstr ""
+msgstr "Exemplo de fluxo de trabalho com pre-commit hook"
#: ../../package-structure-code/code-style-linting-format.md:243
msgid "The precommit workflow looks like this: You type and run:"
-msgstr ""
+msgstr "O fluxo de trabalho do pre-commit funciona assim: você digita e executa:"
#: ../../package-structure-code/code-style-linting-format.md:246
msgid "`git commit -m \"message here\"` at the command line"
-msgstr ""
+msgstr "`git commit -m \"message here\"` na linha de comando"
#: ../../package-structure-code/code-style-linting-format.md:248
msgid ""
"Once you hit return, pre-commit will run any tools that you have "
"configured in a **.pre-commit-config.yaml** file."
msgstr ""
+"Assim que você pressionar Enter, o pre-commit executará todas as "
+"ferramentas configuradas no arquivo **.pre-commit-config.yaml**."
#: ../../package-structure-code/code-style-linting-format.md:250
msgid ""
@@ -472,6 +626,9 @@ msgid ""
"making changes or finding errors in your code, the commit will be applied"
" to the repository."
msgstr ""
+"Se as ferramentas configuradas no pre-commit hook forem executadas com "
+"sucesso sem fazer alterações ou encontrar erros no seu código, o commit "
+"será aplicado ao repositório."
#: ../../package-structure-code/code-style-linting-format.md:254
msgid ""
@@ -482,16 +639,26 @@ msgid ""
"where there are syntax issues in your code. You will then need to fix "
"those issues, manually."
msgstr ""
+"Se as ferramentas configuradas no hook encontrarem erros nos seus "
+"arquivos, o commit NÃO será aplicado ao repositório. Lembre-se da "
+"discussão acima: um formatador de código como o Black executará e "
+"reformatará seu código. Um linter como o _flake8_ fornecerá uma saída "
+"detalhando onde existem problemas de sintaxe no seu código. Você então "
+"precisará corrigir esses problemas manualmente."
#: ../../package-structure-code/code-style-linting-format.md:261
msgid ""
"Once all of the fixes are applied you can re-add (stage) the files to be "
"commit. And re-run your commit."
msgstr ""
+"Depois que todas as correções forem aplicadas, você poderá adicionar "
+"(stage) novamente os arquivos para commit e executar o commit outra vez."
#: ../../package-structure-code/code-style-linting-format.md:265
msgid "Diagram showing the steps of a pre-commit workflow from left to right."
msgstr ""
+"Diagrama mostrando as etapas de um fluxo de trabalho com pre-commit, da "
+"esquerda para a direita."
#: ../../package-structure-code/code-style-linting-format.md:267
msgid ""
@@ -505,6 +672,17 @@ msgid ""
"Source_](https://ljvmiranda921.github.io/notebook/2018/06/21/precommits-"
"using-black-and-flake8/)"
msgstr ""
+"O fluxo de trabalho do pre-commit começa quando você adiciona arquivos "
+"com alterações para serem colocados em stage no Git. Em seguida, você "
+"executa `git commit`. Quando isso acontece, os hooks de pre-commit são "
+"executados. Neste exemplo, o Black, que é o formatador de código, e o "
+"flake8, que é um linter, são executados. Se todos os arquivos passarem "
+"pelas verificações do Black e do flake8, o commit será registrado. Caso "
+"contrário, o commit será cancelado. Você precisará corrigir quaisquer "
+"problemas apontados pelo flake8 e então adicionar novamente os arquivos "
+"ao stage para commit. [_Fonte da "
+"imagem_](https://ljvmiranda921.github.io/notebook/2018/06/21/precommits-"
+"using-black-and-flake8/)"
#: ../../package-structure-code/code-style-linting-format.md:280
msgid ""
@@ -515,10 +693,16 @@ msgid ""
"lead to merge conflicts on open and new PR's before the new changes are "
"merged."
msgstr ""
+"Se você tiver uma base de código Python com múltiplos mantenedores "
+"trabalhando ativamente no código e pretende usar uma ferramenta como o "
+"Black, certifique-se de coordenar isso com sua equipe. Um commit inicial "
+"que aplique o Black em todo o pacote provavelmente alterará uma parte "
+"significativa do código. Isso pode gerar conflitos de merge em PRs "
+"abertos e novos antes que as alterações sejam mescladas."
#: ../../package-structure-code/code-style-linting-format.md:287
msgid "General pre commit checks"
-msgstr ""
+msgstr "Verificações gerais de pre-commit"
#: ../../package-structure-code/code-style-linting-format.md:289
msgid ""
@@ -528,16 +712,23 @@ msgid ""
"also useful to add to your pre-commit workflow to ensure clean, "
"streamlined code files."
msgstr ""
+"Além de executar ferramentas, o Pre-commit também possui um conjunto de "
+"[hooks de formatação embutidos](https://github.com/pre-commit/pre-commit-"
+"hooks#hooks-available) que você pode usar. Alguns deles, como `trailing-"
+"whitespace`, também podem ser úteis no seu fluxo de trabalho com pre-"
+"commit para garantir arquivos de código limpos e organizados."
#: ../../package-structure-code/code-style-linting-format.md:294
msgid ""
"An example pre-commit-config.yaml file is below with examples of how this"
" is all setup."
msgstr ""
+"Abaixo está um exemplo de arquivo pre-commit-config.yaml mostrando como "
+"tudo isso pode ser configurado."
#: ../../package-structure-code/code-style-linting-format.md:297
msgid "Pre-commit.ci"
-msgstr ""
+msgstr "Pre-commit.ci"
#: ../../package-structure-code/code-style-linting-format.md:299
msgid ""
@@ -545,10 +736,15 @@ msgid ""
"best friend. This bot, when setup on a repo can be configured to do the "
"following:"
msgstr ""
+"O [Pre-commit.ci](https://pre-commit.ci) é um bot que pode se tornar seu "
+"novo melhor amigo. Quando configurado em um repositório, esse bot pode "
+"ser ajustado para fazer o seguinte:"
#: ../../package-structure-code/code-style-linting-format.md:302
msgid "It will check every pull request using all of the pre-commit hook setting"
msgstr ""
+"Ele verificará todos os pull requests usando todas as configurações dos "
+"hooks de pre-commit"
#: ../../package-structure-code/code-style-linting-format.md:303
msgid ""
@@ -556,26 +752,37 @@ msgid ""
"commit fixes, saving you, and new contributors the time of reformatting a"
" pr that has format issues."
msgstr ""
+"Se desejar, ele também enviará um pull request para seu repositório com "
+"as correções do pre-commit, economizando seu tempo e o de novos "
+"contribuidores ao evitar a necessidade de reformatar um PR com problemas "
+"de formatação."
#: ../../package-structure-code/code-style-linting-format.md:306
msgid "You can also call the bot on any pull request to run / and fix the code."
msgstr ""
+"Você também pode chamar o bot em qualquer pull request para executar e "
+"corrigir o código."
#: ../../package-structure-code/code-style-linting-format.md:308
msgid ""
"The pre-commit.ci bot uses the same pre-commit-config.yaml file that you "
"use to setup pre-commit locally."
msgstr ""
+"O bot pre-commit.ci usa o mesmo arquivo pre-commit-config.yaml que você "
+"usa para configurar o pre-commit localmente."
#: ../../package-structure-code/code-style-linting-format.md:311
msgid "Setting up a bot like this can be valuable because:"
-msgstr ""
+msgstr "Configurar um bot como esse pode ser valioso porque:"
#: ../../package-structure-code/code-style-linting-format.md:313
msgid ""
"It can make is easier for maintainers as they no longer have to worry at "
"allows about fixing code format. The bot will do the work for them."
msgstr ""
+"Isso pode facilitar a vida dos mantenedores, já que eles não precisarão "
+"mais se preocupar em corrigir a formatação do código. O bot fará esse "
+"trabalho por eles."
#: ../../package-structure-code/code-style-linting-format.md:315
msgid ""
@@ -583,26 +790,34 @@ msgid ""
"commit locally or worry about linting their code. They can even make "
"small fixes to the code directly on GitHub without worry."
msgstr ""
+"Também pode facilitar para novos contribuidores, já que eles não "
+"precisarão configurar o pre-commit localmente nem se preocupar com "
+"linting do código. Eles podem até fazer pequenas correções diretamente no"
+" GitHub sem preocupações."
#: ../../package-structure-code/code-style-linting-format.md:317
msgid "Setting up a git pre-commit hook"
-msgstr ""
+msgstr "Configurando um hook de pre-commit no Git"
#: ../../package-structure-code/code-style-linting-format.md:319
msgid "To setup pre-commit locally, you need to do 3 things:"
-msgstr ""
+msgstr "Para configurar o pre-commit localmente, você precisa fazer 3 coisas:"
#: ../../package-structure-code/code-style-linting-format.md:321
msgid ""
"Install pre-commit (and include it as a development requirement in your "
"repository)"
msgstr ""
+"Instalar o pre-commit (e incluí-lo como dependência de desenvolvimento no"
+" seu repositório)"
#: ../../package-structure-code/code-style-linting-format.md:331
msgid ""
"Create a .pre-commit-config.yaml file in the root of your package "
"directory."
msgstr ""
+"Criar um arquivo .pre-commit-config.yaml na raiz do diretório do seu "
+"pacote."
#: ../../package-structure-code/code-style-linting-format.md:333
msgid ""
@@ -610,6 +825,9 @@ msgid ""
"setup the pre-commit hook and the pre-commit.ci bot if you chose to "
"implement that too."
msgstr ""
+"Abaixo está um exemplo de arquivo **.pre-commit-config.yaml** que pode "
+"ser usado para configurar o hook de pre-commit e o bot pre-commit.ci, "
+"caso você escolha implementar isso também."
#: ../../package-structure-code/code-style-linting-format.md:341
msgid ""
@@ -617,6 +835,9 @@ msgid ""
"each `git commit`, in this case, it specifies a `flake8` using version "
"`6.0.0`."
msgstr ""
+"Esse arquivo especifica um hook que será acionado automaticamente antes "
+"de cada `git commit`; neste caso, ele especifica o `flake8` usando a "
+"versão `6.0.0`."
#: ../../package-structure-code/code-style-linting-format.md:344
msgid ""
@@ -624,16 +845,22 @@ msgid ""
"install all of the hooks specified in the pre-commit yaml file into your "
"environment."
msgstr ""
+"Instale seus hooks de pre-commit usando `pre-commit install`. Isso "
+"instalará todos os hooks especificados no arquivo yaml do pre-commit no "
+"seu ambiente."
#: ../../package-structure-code/code-style-linting-format.md:346
msgid ""
"Once you have done the above, you are ready to start working on your "
"code. Pre-commit will run every time you run `git commit`."
msgstr ""
+"Depois de concluir as etapas acima, você estará pronto para começar a "
+"trabalhar no seu código. O pre-commit será executado sempre que você "
+"rodar `git commit`."
#: ../../package-structure-code/code-style-linting-format.md:349
msgid "Summary"
-msgstr ""
+msgstr "Resumo"
#: ../../package-structure-code/code-style-linting-format.md:351
msgid ""
@@ -645,16 +872,26 @@ msgid ""
"you, reduce effort that you need to make surrounding decisions around "
"code format and style."
msgstr ""
+"A pyOpenSci sugere configurar um linter e uma ferramenta de estilo de "
+"código para o seu pacote, independentemente de você usar hooks de pre-"
+"commit, CI ou outra infraestrutura para gerenciar a formatação do código."
+" Configurar essas ferramentas fornecerá feedback automático sobre a "
+"estrutura do seu código enquanto você (ou um colaborador) o escreve. E "
+"usar uma ferramenta como o Black, que formata o código automaticamente, "
+"reduz o esforço necessário para tomar decisões relacionadas à formatação "
+"e ao estilo do código."
#: ../../package-structure-code/complex-python-package-builds.md:1
msgid "Complex Python package builds"
-msgstr ""
+msgstr "Builds complexas de pacotes Python"
#: ../../package-structure-code/complex-python-package-builds.md:3
msgid ""
"This guide is focused on packages that are either pure-python or that "
"have a few simple extensions in another language such as C or C++."
msgstr ""
+"Este guia é focado em pacotes que são puramente Python ou que possuem "
+"algumas extensões simples em outra linguagem, como C ou C++."
#: ../../package-structure-code/complex-python-package-builds.md:6
msgid ""
@@ -665,6 +902,12 @@ msgid ""
"reference for complex builds and covers scikit-build-core, meson-python, "
"maturin, and other modern build backends."
msgstr ""
+"Para orientações abrangentes sobre packaging de projetos compilados com "
+"extensões em C/C++/Fortran/Rust, consulte o [Scientific Python "
+"Development Guide sobre packaging de projetos compilados](https://learn"
+".scientific-python.org/development/guides/packaging-compiled/). Essa é a "
+"melhor referência para builds complexas e cobre scikit-build-core, meson-"
+"python, maturin e outros backends modernos de build."
#: ../../package-structure-code/complex-python-package-builds.md:8
msgid ""
@@ -676,10 +919,17 @@ msgid ""
"an overview and thorough discussion of these nuances, please see [this "
"site.](https://pypackaging-native.github.io/)"
msgstr ""
+"Se você tiver dúvidas sobre esses tipos de pacote, abra uma [issue "
+"especificamente sobre este guia no repositório GitHub deste "
+"guia](https://github.com/pyOpenSci/python-package-guide/issues). Existem "
+"muitas nuances relacionadas à build e distribuição de pacotes Python que "
+"possuem extensões compiladas e dependências não Python necessárias em "
+"tempo de build. Para uma visão geral e uma discussão detalhada dessas "
+"nuances, consulte [este site.](https://pypackaging-native.github.io/)"
#: ../../package-structure-code/complex-python-package-builds.md:10
msgid "Pure Python packages vs. packages with extensions in other languages"
-msgstr ""
+msgstr "Pacotes Python puros vs. pacotes com extensões em outras linguagens"
#: ../../package-structure-code/complex-python-package-builds.md:12
msgid ""
@@ -687,6 +937,9 @@ msgid ""
" These categories can in turn help you select the correct package "
"frontend and backend tools."
msgstr ""
+"Você pode classificar a complexidade de pacotes Python em três categorias"
+" gerais. Essas categorias, por sua vez, podem ajudar você a selecionar as"
+" ferramentas corretas de frontend e backend para packaging."
#: ../../package-structure-code/complex-python-package-builds.md:16
msgid ""
@@ -695,6 +948,10 @@ msgid ""
"chose a tool below that has the features that you want and be done with "
"your decision!"
msgstr ""
+"**Pacotes Python puros:** são pacotes que dependem apenas de Python para "
+"funcionar. Fazer a build de um pacote Python puro é mais simples. Assim, "
+"você pode escolher abaixo uma ferramenta que tenha os recursos desejados "
+"e finalizar sua decisão!"
#: ../../package-structure-code/complex-python-package-builds.md:18
msgid ""
@@ -707,6 +964,16 @@ msgid ""
"that supports additional build setups. We suggest that you chose build "
"tool that supports custom build steps like Hatch."
msgstr ""
+"**Pacotes Python com extensões não Python:** esses pacotes possuem "
+"componentes adicionais chamados extensões, escritos em outras linguagens "
+"(como C ou C++). Se você tiver um pacote com extensões não Python, então "
+"precisará selecionar uma ferramenta de backend de build que permita "
+"etapas adicionais de build necessárias para compilar o código da sua "
+"extensão. Além disso, se quiser usar uma ferramenta de frontend para dar "
+"suporte ao seu fluxo de trabalho, precisará escolher uma ferramenta que "
+"suporte configurações adicionais de build. Sugerimos que você escolha uma"
+" ferramenta de build que suporte etapas de build customizadas, como o "
+"Hatch."
#: ../../package-structure-code/complex-python-package-builds.md:20
msgid ""
@@ -719,10 +986,19 @@ msgid ""
"python](https://mesonbuild.com/Python-module.html) to build. NOTE: you "
"can use meson-python with PDM."
msgstr ""
+"**Pacotes Python que possuem extensões escritas em diferentes linguagens "
+"(por exemplo, Fortran e C++) ou que possuem dependências não Python "
+"difíceis de instalar (por exemplo, GDAL):** esses pacotes frequentemente "
+"possuem etapas de build complexas (mais complexas do que um pacote com "
+"apenas algumas extensões em C, por exemplo). Assim, esses pacotes exigem "
+"ferramentas como [scikit-build](https://scikit-"
+"build.readthedocs.io/en/latest/) ou [meson-python](https://mesonbuild.com"
+"/Python-module.html) para build. OBSERVAÇÃO: você pode usar meson-python "
+"com PDM."
#: ../../package-structure-code/complex-python-package-builds.md:23
msgid "Mixing frontend and backend projects"
-msgstr ""
+msgstr "Misturando projetos frontend e backend"
#: ../../package-structure-code/complex-python-package-builds.md:25
msgid ""
@@ -735,6 +1011,14 @@ msgid ""
"package-build-tools) for more information about frontend and backend "
"compatibility."
msgstr ""
+"Às vezes é necessário ou desejável usar um frontend de build com um "
+"backend de build alternativo. Isso acontece porque alguns frontends não "
+"possuem um backend padrão (`build`), deixando essa escolha para o "
+"mantenedor. Outros backends (`hatch`) possuem um backend preferido "
+"(`hatchling`), mas permitem que o mantenedor migre para outro, enquanto "
+"alguns backends (`poetry`) funcionam apenas com um único backend "
+"(`poetry-core`). Consulte (#python-package-build-tools) para mais "
+"informações sobre compatibilidade entre frontend e backend."
#: ../../package-structure-code/complex-python-package-builds.md:31
msgid ""
@@ -749,6 +1033,16 @@ msgid ""
"[plugins](https://hatch.pypa.io/1.9/plugins/about/) or be replaced by a "
"backend that is already capable of building extension modules."
msgstr ""
+"Neste guia de packaging recomendamos usar `hatch` junto com seu backend "
+"preferido `hatchling`. Embora isso seja adequado para a maioria dos "
+"pacotes, um backend alternativo pode ser usado com o Hatch, se "
+"necessário, ao criar um módulo de extensão. Um módulo de extensão Python "
+"é aquele composto, parcial ou totalmente, por código compilado. Nesse "
+"caso, o backend escolhido (como `meson-python`) precisa saber como "
+"compilar a linguagem da extensão e vinculá-la ao Python. O hatchling não "
+"sabe fazer isso sozinho e precisa usar "
+"[plugins](https://hatch.pypa.io/1.9/plugins/about/) ou ser substituído "
+"por um backend que já seja capaz de construir módulos de extensão."
#: ../../package-structure-code/complex-python-package-builds.md:39
msgid ""
@@ -757,10 +1051,14 @@ msgid ""
" command, or from following the packaging tutorial, you may have to make "
"a change like this"
msgstr ""
+"Para usar um backend diferente, você precisará editar o arquivo "
+"`pyproject.toml` do seu projeto. Se você tiver um `pyproject.toml` gerado"
+" pelo comando hatch, ou seguindo o tutorial de packaging, talvez precise "
+"fazer uma alteração como esta"
#: ../../package-structure-code/declare-dependencies.md:6
msgid "Dependencies for your Python Package"
-msgstr ""
+msgstr "Dependências do seu pacote Python"
#: ../../package-structure-code/declare-dependencies.md:8
msgid ""
@@ -769,10 +1067,15 @@ msgid ""
" metadata for your package. On this page, you will learn how to specify "
"different types of dependencies in your `pyproject.toml`."
msgstr ""
+"Na [página de visão geral do pyproject.toml](pyproject-toml-python-"
+"package-metadata), você aprendeu como configurar um arquivo "
+"**pyproject.toml** com os metadados básicos do seu pacote. Nesta página, "
+"você aprenderá como especificar diferentes tipos de dependências no seu "
+"`pyproject.toml`."
#: ../../package-structure-code/declare-dependencies.md:14
msgid "What is a package dependency?"
-msgstr ""
+msgstr "O que é uma dependência de pacote?"
#: ../../package-structure-code/declare-dependencies.md:16
msgid ""
@@ -782,28 +1085,39 @@ msgid ""
"metadata in one place, making it simpler for users and contributors to "
"understand your package."
msgstr ""
+"Uma dependência de pacote Python se refere a um pacote externo ou uma "
+"ferramenta necessária para usar ou trabalhar no seu projeto Python. "
+"Declare suas dependências no arquivo `pyproject.toml`. Isso mantém todos "
+"os metadados do pacote em um só lugar, facilitando para usuários e "
+"contribuidores entenderem seu pacote."
#: ../../package-structure-code/declare-dependencies.md:19
msgid "Older ways to declare dependencies"
-msgstr ""
+msgstr "Formas antigas de declarar dependências"
#: ../../package-structure-code/declare-dependencies.md:22
msgid ""
"While `pyproject.toml` is now the standard, you may sometimes encounter "
"older approaches to storing dependencies \"in the wild\":"
msgstr ""
+"Embora `pyproject.toml` agora seja o padrão, às vezes você ainda pode "
+"encontrar abordagens mais antigas para armazenar dependências \"por aí\":"
#: ../../package-structure-code/declare-dependencies.md:24
msgid ""
"**requirements.txt**: Previously common for dependencies, still used by "
"some projects for local development"
msgstr ""
+"**requirements.txt**: Antes era comum para dependências, e ainda é usado "
+"por alguns projetos para desenvolvimento local"
#: ../../package-structure-code/declare-dependencies.md:25
msgid ""
"**setup.py or setup.cfg**: May be needed for packages with extensions in "
"other languages"
msgstr ""
+"**setup.py ou setup.cfg**: Pode ser necessário para pacotes com extensões"
+" em outras linguagens"
#: ../../package-structure-code/declare-dependencies.md:27
msgid ""
@@ -811,20 +1125,30 @@ msgid ""
"documentation](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html"
"#declaring-required-dependency)"
msgstr ""
+"[Saiba mais na documentação do "
+"setuptools](https://setuptools.pypa.io/en/latest/userguide/dependency_management.html"
+"#declaring-required-dependency)"
#: ../../package-structure-code/declare-dependencies.md:30
msgid "Why specify dependencies"
-msgstr ""
+msgstr "Por que especificar dependências"
#: ../../package-structure-code/declare-dependencies.md:32
msgid ""
-"Specifying dependencies in the [project.dependency] array of your "
+"Specifying dependencies in the `project.dependencies` array of your "
"`pyproject.toml` file ensures that libraries needed to run your package "
"are correctly installed into a user's environment. For instance, if your "
"package requires Pandas to run properly, and you add Pandas to the "
-"`project.dependency` array, Pandas will be installed into the users' "
+"`project.dependencies` array, Pandas will be installed into the users' "
"environment when they install your package using uv, pip, or conda."
msgstr ""
+"Especificar dependências no array `project.dependencies` do seu arquivo "
+"`pyproject.toml` garante que as bibliotecas necessárias para executar seu"
+" pacote sejam instaladas corretamente no ambiente do usuário. Por "
+"exemplo, se o seu pacote precisa do Pandas para funcionar corretamente, e"
+" você adicionar o Pandas ao array `project.dependencies`, o Pandas será "
+"instalado no ambiente dos usuários quando eles instalarem seu pacote "
+"usando uv, pip ou conda."
#: ../../package-structure-code/declare-dependencies.md:45
msgid ""
@@ -832,43 +1156,65 @@ msgid ""
"package. You can set up instructions for running specific workflows, such"
" as tests, linting, and even typing, that automatically install groups of"
" development dependencies. These dependencies can be stored in arrays "
-"(lists of dependencies) within a `[development-group]` table."
+"(lists of dependencies) within a `[dependency-groups]` table."
msgstr ""
+"Dependências de desenvolvimento facilitam o trabalho dos contribuidores "
+"no seu pacote. Você pode configurar instruções para executar workflows "
+"específicos, como testes, linting e até tipagem, que instalam "
+"automaticamente grupos de dependências de desenvolvimento. Essas "
+"dependências podem ser armazenadas em arrays (listas de dependências) "
+"dentro de uma tabela `[dependency-groups]`."
#: ../../package-structure-code/declare-dependencies.md:55
msgid "Types of dependencies"
-msgstr ""
+msgstr "Tipos de dependências"
#: ../../package-structure-code/declare-dependencies.md:57
msgid ""
"There are three different types of dependencies that you will learn about"
" on this page:"
msgstr ""
+"Existem três tipos diferentes de dependências que você aprenderá nesta "
+"página:"
#: ../../package-structure-code/declare-dependencies.md:59
msgid ""
"**Required dependencies:** These are dependencies that need to be "
"installed for your package to work correctly in a user's environment. You"
-" add these dependencies to the `[project.dependencies]` table in your "
+" add these dependencies to the `project.dependencies` table in your "
"pyproject.toml file."
msgstr ""
+"**Dependências obrigatórias:** São dependências que precisam ser "
+"instaladas para que seu pacote funcione corretamente no ambiente do "
+"usuário. Você adiciona essas dependências na tabela "
+"`project.dependencies` do seu arquivo pyproject.toml."
#: ../../package-structure-code/declare-dependencies.md:60
+#, fuzzy
msgid ""
"**Feature Dependencies:** These are dependencies that are required if a "
"user wants to access additional functionality (that is not core) to your "
-"package. Store these in the `[project.optional.dependencies]` table or "
+"package. Store these in the `[project.optional-dependencies]` table or "
"your pyproject.toml file."
msgstr ""
+"**Dependências de funcionalidades:** São dependências necessárias caso o "
+"usuário queira acessar funcionalidades adicionais (que não fazem parte do"
+" núcleo) do seu pacote. Armazene essas dependências na tabela `[project"
+".optional-dependencies]` do seu arquivo pyproject.toml."
#: ../../package-structure-code/declare-dependencies.md:61
msgid ""
"**Development Dependencies:** These dependencies are required if someone "
"wants to develop or work on your package. These include instance linters,"
" testing tools like pytest and mypy are examples of development "
-"dependencies. Store these in the `[project.dependency.groups]` table or "
-"your pyproject.toml file."
+"dependencies. Store these in the `[dependency-groups]` table of your "
+"pyproject.toml file."
msgstr ""
+"**Dependências de desenvolvimento:** Essas dependências são necessárias "
+"caso alguém queira desenvolver ou trabalhar no seu pacote. Isso inclui, "
+"por exemplo, linters e ferramentas de teste como pytest e mypy. Armazene "
+"essas dependências na tabela `[dependency-groups]` do seu arquivo "
+"pyproject.toml."
#: ../../package-structure-code/declare-dependencies.md:64
msgid ""
@@ -876,16 +1222,21 @@ msgid ""
"software called within the code of your project or used during the "
"development of your package."
msgstr ""
+"Uma dependência não faz parte da base de código do seu projeto. Ela é um "
+"pacote ou software chamado dentro do código do seu projeto ou usado "
+"durante o desenvolvimento do seu pacote."
#: ../../package-structure-code/declare-dependencies.md:69
msgid "1. Required dependencies"
-msgstr ""
+msgstr "1. Dependências obrigatórias"
#: ../../package-structure-code/declare-dependencies.md:71
msgid ""
"Required dependencies are imported and called directly within your "
"package's code. They are needed for your package to run."
msgstr ""
+"Dependências obrigatórias são importadas e chamadas diretamente dentro do"
+" código do seu pacote. Elas são necessárias para que seu pacote funcione."
#: ../../package-structure-code/declare-dependencies.md:74
msgid ""
@@ -894,6 +1245,11 @@ msgid ""
"your package with uv, pip, or conda, these dependencies will be "
"automatically installed alongside your package in their environment."
msgstr ""
+"Você pode adicionar suas dependências obrigatórias ao array "
+"`dependencies` na tabela `[project]` do seu arquivo **pyproject.toml**. "
+"Quando usuários instalarem seu pacote com uv, pip ou conda, essas "
+"dependências serão instaladas automaticamente junto com seu pacote no "
+"ambiente deles."
#: ../../package-structure-code/declare-dependencies.md:92
msgid ""
@@ -901,34 +1257,41 @@ msgid ""
"fewer dependencies reduce the possibility of version conflicts in user "
"environments."
msgstr ""
+"Tente ao máximo minimizar dependências sempre que possível. Lembre-se de "
+"que menos dependências reduzem a possibilidade de conflitos de versão nos"
+" ambientes dos usuários."
#: ../../package-structure-code/declare-dependencies.md
msgid "How to Add Required Dependencies with UV"
-msgstr ""
+msgstr "Como adicionar dependências obrigatórias com UV"
#: ../../package-structure-code/declare-dependencies.md:102
#: ../../package-structure-code/declare-dependencies.md:162
-#: ../../package-structure-code/declare-dependencies.md:223
+#: ../../package-structure-code/declare-dependencies.md:222
msgid "You can use uv to add dependencies to your pyproject.toml file:"
msgstr ""
+"Você pode usar uv para adicionar dependências ao seu arquivo "
+"pyproject.toml:"
#: ../../package-structure-code/declare-dependencies.md:104
msgid "**Add a required dependency:**"
-msgstr ""
+msgstr "**Adicionar uma dependência obrigatória:**"
#: ../../package-structure-code/declare-dependencies.md:110
-msgid "Will add numpy as a dependency to your `project.dependency` array:"
-msgstr ""
+msgid "Will add numpy as a dependency to your `project.dependencies` array:"
+msgstr "Irá adicionar numpy como dependência ao seu array `project.dependencies`:"
#: ../../package-structure-code/declare-dependencies.md:121
msgid "Requiring packages from GitHub / Gitlab"
-msgstr ""
+msgstr "Dependências instaladas a partir do GitHub/GitLab"
#: ../../package-structure-code/declare-dependencies.md:124
msgid ""
"If you have dependencies that need to be installed directly from GitHub, "
"you can specify them in your pyproject.toml file like this:"
msgstr ""
+"Se você tiver dependências que precisam ser instaladas diretamente do "
+"GitHub, pode especificá-las no seu arquivo pyproject.toml desta forma:"
#: ../../package-structure-code/declare-dependencies.md:133
msgid ""
@@ -937,10 +1300,15 @@ msgid ""
" your project to PyPI. You never know how the project might change over "
"time. Commit hashes are more reliable as they can't be changed"
msgstr ""
+"IMPORTANTE: Se sua biblioteca depende de um projeto hospedado no GitHub, "
+"você deve apontar para um commit/tag/hash específico desse repositório "
+"antes de enviar seu projeto para o PyPI. Você nunca sabe como o projeto "
+"pode mudar ao longo do tempo. Hashes de commit são mais confiáveis porque"
+" não podem ser alterados"
#: ../../package-structure-code/declare-dependencies.md:140
msgid "2. Optional dependencies"
-msgstr ""
+msgstr "2. Dependências opcionais"
#: ../../package-structure-code/declare-dependencies.md:142
msgid ""
@@ -948,13 +1316,22 @@ msgid ""
"users as needed. Optional dependencies add specific features to your "
"package that not all users need. For example, if your package has an "
"optional interactive plotting feature that uses Bokeh, you would list "
-"Bokeh as an `[optional.dependency]`. Users who want interactive plotting "
-"will install it. Users who don't need plotting don't have to install it."
-msgstr ""
+"Bokeh under `[project.optional-dependencies]`. Users who want interactive"
+" plotting will install it. Users who don't need plotting don't have to "
+"install it."
+msgstr ""
+"Dependências opcionais (também chamadas de dependências de feature) podem"
+" ser instaladas pelos usuários conforme necessário. Dependências "
+"opcionais adicionam funcionalidades específicas ao seu pacote que nem "
+"todos os usuários precisam. Por exemplo, se seu pacote tiver uma "
+"funcionalidade opcional de gráficos interativos usando Bokeh, você "
+"listaria o Bokeh como um `[project.optional-dependencies]`. Usuários que "
+"quiserem gráficos interativos irão instalá-lo. Usuários que não "
+"precisarem de gráficos não precisam instalá-lo."
#: ../../package-structure-code/declare-dependencies.md:144
msgid "Place these dependencies in the `[project.optional-dependencies]` table."
-msgstr ""
+msgstr "Coloque essas dependências na tabela `[project.optional-dependencies]`."
#: ../../package-structure-code/declare-dependencies.md:155
msgid ""
@@ -962,14 +1339,18 @@ msgid ""
"installs all required dependencies. Optional dependencies are only "
"installed if the user explicitly requests them."
msgstr ""
+"Quando um usuário instala seu pacote, uv, pip ou conda instalam "
+"automaticamente todas as dependências obrigatórias. Dependências "
+"opcionais só são instaladas se o usuário solicitá-las explicitamente."
#: ../../package-structure-code/declare-dependencies.md
-msgid "How to Add optional.dependencies using UV"
-msgstr ""
+#, fuzzy
+msgid "How to Add optional dependencies using UV"
+msgstr "Como adicionar dependências opcionais usando UV"
#: ../../package-structure-code/declare-dependencies.md:164
msgid "**Add an optional dependency:**"
-msgstr ""
+msgstr "**Adicionar uma dependência opcional:**"
#: ../../package-structure-code/declare-dependencies.md:170
msgid "Will add this to your pyproject.toml file:"
@@ -977,29 +1358,32 @@ msgstr ""
#: ../../package-structure-code/declare-dependencies.md:181
msgid "3. Dependency groups"
-msgstr ""
+msgstr "3. Grupos de dependências"
#: ../../package-structure-code/declare-dependencies.md:183
msgid ""
"Development dependencies include packages needed to work on your package "
"locally. They are used to perform tasks such as:"
msgstr ""
+"Dependências de desenvolvimento incluem pacotes necessários para "
+"trabalhar localmente no seu pacote. Elas são usadas para executar tarefas"
+" como:"
#: ../../package-structure-code/declare-dependencies.md:186
msgid "running your test suite (pytest, pytest-cov)"
-msgstr ""
+msgstr "executar sua suíte de testes (pytest, pytest-cov)"
#: ../../package-structure-code/declare-dependencies.md:187
msgid "building your documentation (sphinx, sphinx-theme packages)"
-msgstr ""
+msgstr "gerar sua documentação (sphinx, pacotes de sphinx-theme)"
#: ../../package-structure-code/declare-dependencies.md:188
msgid "linting and formatting code (ruff, black)"
-msgstr ""
+msgstr "linting e formatação de código (ruff, black)"
#: ../../package-structure-code/declare-dependencies.md:189
msgid "building package distribution files (build, twine)"
-msgstr ""
+msgstr "gerar arquivos de distribuição do pacote (build, twine)"
#: ../../package-structure-code/declare-dependencies.md:191
msgid ""
@@ -1007,68 +1391,84 @@ msgid ""
" install and use your package. However, they will make it easier for "
"contributors to your project to setup development environments locally."
msgstr ""
+"Grupos de dependências são opcionais porque não são necessários para que "
+"usuários instalem e usem seu pacote. Porém, eles facilitam para "
+"contribuidores do projeto configurarem ambientes de desenvolvimento "
+"localmente."
#: ../../package-structure-code/declare-dependencies.md:196
-msgid "New: PEP 735 development dependency groups"
-msgstr ""
+#, fuzzy
+msgid "New: PEP 735 dependency groups"
+msgstr "Novo: grupos de dependências de desenvolvimento PEP 735"
#: ../../package-structure-code/declare-dependencies.md:199
msgid ""
-"`[development-groups]` is a newer specification introduced by PEP 735. "
+"`[dependency-groups]` is a newer specification introduced by PEP 735. "
"They are intended to organize development dependencies and are "
"intentionally separate from `[project.optional-dependencies]`, which can"
" be installed into a user's environment."
msgstr ""
+"`[dependency-groups]` é uma especificação mais nova introduzida pela PEP "
+"735. Ela foi criada para organizar dependências de desenvolvimento e é "
+"intencionalmente separada de `[project.optional-dependencies]`, que podem"
+" ser instaladas no ambiente do usuário."
-#: ../../package-structure-code/declare-dependencies.md:204
+#: ../../package-structure-code/declare-dependencies.md:203
msgid "How to declare dependency groups"
-msgstr ""
+msgstr "Como declarar grupos de dependências"
-#: ../../package-structure-code/declare-dependencies.md:206
+#: ../../package-structure-code/declare-dependencies.md:205
msgid ""
"You declare development dependencies in your **pyproject.toml** file "
-"within a `[development-groups]` table."
+"within a `[dependency-groups]` table."
msgstr ""
+"Você declara dependências de desenvolvimento no seu arquivo "
+"**pyproject.toml** dentro de uma tabela `[dependency-groups]`."
-#: ../../package-structure-code/declare-dependencies.md:209
+#: ../../package-structure-code/declare-dependencies.md:208
msgid ""
"Similar to optional-dependencies, you can create separate subgroups or "
"arrays with names using the syntax: `group-name = [\"dep1\", \"dep2\"]`"
msgstr ""
+"Assim como em optional-dependencies, você pode criar subgrupos separados "
+"ou arrays nomeados usando a sintaxe: `group-name = [\"dep1\", \"dep2\"]`"
#: ../../package-structure-code/declare-dependencies.md
-msgid "How to Add [development.group] using UV"
-msgstr ""
+msgid "How to Add [dependency-groups] using UV"
+msgstr "Como adicionar [dependency-groups] usando UV"
-#: ../../package-structure-code/declare-dependencies.md:225
-msgid "**Add a development group dependency:**"
-msgstr ""
+#: ../../package-structure-code/declare-dependencies.md:224
+msgid "**Add a development dependency group:**"
+msgstr "**Adicionar uma dependência de grupo de desenvolvimento:**"
-#: ../../package-structure-code/declare-dependencies.md:232
+#: ../../package-structure-code/declare-dependencies.md:231
msgid "Will add the following to your pyproject.toml file:"
-msgstr ""
+msgstr "Irá adicionar o seguinte ao seu arquivo pyproject.toml:"
-#: ../../package-structure-code/declare-dependencies.md:245
-#: ../../package-structure-code/declare-dependencies.md:251
-#: ../../package-structure-code/declare-dependencies.md:295
-#: ../../package-structure-code/declare-dependencies.md:414
-#: ../../package-structure-code/declare-dependencies.md:496
+#: ../../package-structure-code/declare-dependencies.md:244
+#: ../../package-structure-code/declare-dependencies.md:250
+#: ../../package-structure-code/declare-dependencies.md:294
+#: ../../package-structure-code/declare-dependencies.md:434
+#: ../../package-structure-code/declare-dependencies.md:516
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:14
msgid "Todo"
-msgstr ""
+msgstr "A Fazer"
-#: ../../package-structure-code/declare-dependencies.md:246
+#: ../../package-structure-code/declare-dependencies.md:245
msgid ""
"i'll pick back up here tomorrow - this section is all about how things "
"install and what \"ships\" with your package vs what just gets installed "
"via commands (ie development)"
msgstr ""
+"vou continuar daqui amanhã - esta seção é toda sobre como as coisas são "
+"instaladas e o que \"vem junto\" com seu pacote vs o que apenas é "
+"instalado via comandos (ou seja, desenvolvimento)"
-#: ../../package-structure-code/declare-dependencies.md:249
+#: ../../package-structure-code/declare-dependencies.md:248
msgid "Understanding required vs. optional dependencies"
-msgstr ""
+msgstr "Entendendo dependências obrigatórias vs. opcionais"
-#: ../../package-structure-code/declare-dependencies.md:252
+#: ../../package-structure-code/declare-dependencies.md:251
msgid ""
"The purpose of this section is to help users understand how dependencies "
"relate to what is installed in their environment. We have two graphics on"
@@ -1078,15 +1478,27 @@ msgid ""
"we originally wrote this section, development groups didn't exist, and we"
" were using optional dependencies for dev groups."
msgstr ""
+"O objetivo desta seção é ajudar usuários a entender como dependências se "
+"relacionam com o que é instalado no ambiente deles. Temos dois gráficos "
+"nesta página - um que separa os dois grupos de ferramentas (obrigatórias "
+"e opcionais) que são instaladas no ambiente do usuário vs grupos de "
+"desenvolvimento, que são voltados para contribuidores/desenvolvimento, e "
+"não para usuários finais. Quando escrevemos esta seção originalmente, "
+"grupos de desenvolvimento não existiam, e estávamos usando dependências "
+"opcionais para grupos de desenvolvimento."
-#: ../../package-structure-code/declare-dependencies.md:254
+#: ../../package-structure-code/declare-dependencies.md:253
msgid ""
"The graphic below is two circles representing optional vs regular / "
"required deps - created before development groups existed... there is "
"another graphi that shows what gets installed into a uses envt."
msgstr ""
+"O gráfico abaixo mostra dois círculos representando dependências "
+"opcionais vs regulares/obrigatórias - criado antes de existirem grupos de"
+" desenvolvimento... existe outro gráfico que mostra o que é instalado no "
+"ambiente do usuário."
-#: ../../package-structure-code/declare-dependencies.md:258
+#: ../../package-structure-code/declare-dependencies.md:257
msgid ""
"Diagram showing two main groups of Python package dependencies: required "
"and optional. Required dependencies include core packages needed to use "
@@ -1094,44 +1506,62 @@ msgid ""
"working on the package locally and feature dependencies for additional "
"functionality."
msgstr ""
+"Diagrama mostrando os dois principais grupos de dependências de pacotes "
+"Python: obrigatórias e opcionais. Dependências obrigatórias incluem os "
+"pacotes principais necessários para usar seu pacote. Dependências "
+"opcionais incluem dependências de desenvolvimento para trabalhar "
+"localmente no pacote e dependências de funcionalidades adicionais."
-#: ../../package-structure-code/declare-dependencies.md:260
+#: ../../package-structure-code/declare-dependencies.md:259
msgid ""
"Python package dependencies fall into two categories: **required** "
"dependencies that users need to run your package, and **optional** "
"dependencies for development work or additional features."
msgstr ""
+"Dependências de pacotes Python se dividem em duas categorias: "
+"dependências **obrigatórias**, que usuários precisam para executar seu "
+"pacote, e dependências **opcionais** para desenvolvimento ou "
+"funcionalidades adicionais."
-#: ../../package-structure-code/declare-dependencies.md:265
+#: ../../package-structure-code/declare-dependencies.md:264
msgid "Additional dependency resources"
-msgstr ""
+msgstr "Recursos adicionais sobre dependências"
-#: ../../package-structure-code/declare-dependencies.md:267
+#: ../../package-structure-code/declare-dependencies.md:266
msgid ""
"[Learn more: View PyPA's overview of declaring optional "
"dependencies](https://packaging.python.org/en/latest/specifications"
"/declaring-project-metadata/#dependencies-optional-dependencies)"
msgstr ""
+"[Saiba mais: Veja a visão geral da PyPA sobre declaração de dependências "
+"opcionais](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/#dependencies-optional-dependencies)"
-#: ../../package-structure-code/declare-dependencies.md:268
+#: ../../package-structure-code/declare-dependencies.md:267
msgid ""
"[Dependency "
"specifiers](https://packaging.python.org/en/latest/specifications"
"/dependency-specifiers/)"
msgstr ""
+"[Especificadores de "
+"dependência](https://packaging.python.org/en/latest/specifications"
+"/dependency-specifiers/)"
-#: ../../package-structure-code/declare-dependencies.md:272
+#: ../../package-structure-code/declare-dependencies.md:271
msgid "Install dependency groups"
-msgstr ""
+msgstr "Instalar grupos de dependências"
-#: ../../package-structure-code/declare-dependencies.md:274
+#: ../../package-structure-code/declare-dependencies.md:273
msgid ""
"When someone installs your package, only core dependencies are installed "
"by default. To install optional dependencies, you need to specify which "
"groups to include when installing the package."
msgstr ""
+"Quando alguém instala seu pacote, apenas as dependências principais são "
+"instaladas por padrão. Para instalar dependências opcionais, você precisa"
+" especificar quais grupos incluir durante a instalação do pacote."
-#: ../../package-structure-code/declare-dependencies.md:280
+#: ../../package-structure-code/declare-dependencies.md:279
msgid ""
"Diagram showing a Venn diagram with three sections representing "
"dependency groups - docs, feature, and tests. In the center it shows "
@@ -1141,8 +1571,15 @@ msgid ""
"your-package[tests] installs the package, core dependencies, and test "
"dependencies including pytest and pytest-cov."
msgstr ""
+"Diagrama mostrando um diagrama de Venn com três seções representando "
+"grupos de dependências - docs, feature e tests. No centro ele mostra "
+"your-package com as dependências principais seaborn e numpy. Duas setas à"
+" direita demonstram: primeiro, `python -m pip install your-package` "
+"instala apenas o pacote e as dependências principais. Segundo, `python -m"
+" pip install your-package[tests]` instala o pacote, as dependências "
+"principais e as dependências de teste, incluindo pytest e pytest-cov."
-#: ../../package-structure-code/declare-dependencies.md:282
+#: ../../package-structure-code/declare-dependencies.md:281
msgid ""
"When a user installs your package using `pip install your-package`, only "
"your package and its core dependencies get installed. When they install "
@@ -1150,140 +1587,190 @@ msgid ""
"core dependencies, and the test dependencies from the `[project.optional-"
"dependencies]` table."
msgstr ""
+"Quando um usuário instala seu pacote usando `pip install your-package`, "
+"apenas seu pacote e suas dependências principais são instalados. Quando "
+"ele instala com `pip install your-package[tests]`, o pip instalará seu "
+"pacote, as dependências principais e as dependências de teste da tabela "
+"`[project.optional-dependencies]`."
-#: ../../package-structure-code/declare-dependencies.md:289
+#: ../../package-structure-code/declare-dependencies.md:288
msgid "Using uv or pip for installation"
-msgstr ""
+msgstr "Usando uv ou pip para instalação"
-#: ../../package-structure-code/declare-dependencies.md:291
+#: ../../package-structure-code/declare-dependencies.md:290
msgid ""
"UV streamlines this process, allowing you to sync a venv in your project "
"directory with both an editable install of your package and its "
"dependencies automatically. You can also use pip and install dependencies"
" into the environment of your choice."
msgstr ""
+"O UV simplifica esse processo, permitindo sincronizar uma venv no "
+"diretório do seu projeto com uma instalação editável do seu pacote e suas"
+" dependências automaticamente. Você também pode usar pip e instalar "
+"dependências no ambiente de sua escolha."
-#: ../../package-structure-code/declare-dependencies.md:296
+#: ../../package-structure-code/declare-dependencies.md:295
msgid ""
"We shouldn't show UV pip install, so how do you add optional feature deps"
" with UV??"
msgstr ""
+"Não deveríamos mostrar UV pip install, então como adicionar dependências "
+"opcionais de feature com UV??"
-#: ../../package-structure-code/declare-dependencies.md:299
-msgid "**Install development groups:**"
-msgstr ""
+#: ../../package-structure-code/declare-dependencies.md:298
+#: ../../package-structure-code/declare-dependencies.md:361
+msgid "**Install dependency groups:**"
+msgstr "**Instalar grupos de desenvolvimento:**"
#: ../../package-structure-code/declare-dependencies.md
msgid "Use UV"
-msgstr ""
+msgstr "Usar UV"
-#: ../../package-structure-code/declare-dependencies.md:305
+#: ../../package-structure-code/declare-dependencies.md:304
msgid "You can use uv sync to sync dependency groups in your uv-managed venv"
msgstr ""
+"Você pode usar `uv sync` para sincronizar grupos de dependências na sua "
+"venv gerenciada pelo uv"
-#: ../../package-structure-code/declare-dependencies.md:313
-#: ../../package-structure-code/declare-dependencies.md:334
+#: ../../package-structure-code/declare-dependencies.md:312
+msgid ""
+"use ``--active`` with ``uv sync`` to prefer the currently active virtual "
+"environment over the project's own managed environment:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:319
+#: ../../package-structure-code/declare-dependencies.md:354
msgid "**Install optional dependencies:**"
+msgstr "**Instalar dependências opcionais:**"
+
+#: ../../package-structure-code/declare-dependencies.md:328
+msgid ""
+"Use the `--active` flag with `uv run` to prefer the currently active "
+"virtual environment over the project's own managed environment:"
msgstr ""
-#: ../../package-structure-code/declare-dependencies.md:321
-msgid "**Install everything (package + all dependencies):**"
+#: ../../package-structure-code/declare-dependencies.md:336
+msgid ""
+"This is useful when you have activated a virtual environment and want `uv"
+" run` to use it instead of automatically creating or selecting the "
+"project's environment."
msgstr ""
-#: ../../package-structure-code/declare-dependencies.md:327
+#: ../../package-structure-code/declare-dependencies.md:341
+msgid "**Install everything (package + all dependencies):**"
+msgstr "**Instalar tudo (pacote + todas as dependências):**"
+
+#: ../../package-structure-code/declare-dependencies.md:347
msgid ""
"`uv sync` is the recommended command for development workflows. It "
"manages your virtual environment and keeps your lockfile up to date. Use "
"`uv pip install` when you need pip-compatible behavior."
msgstr ""
+"`uv sync` é o comando recomendado para workflows de desenvolvimento. Ele "
+"gerencia seu ambiente virtual e mantém seu lockfile atualizado. Use `uv "
+"pip install` quando precisar de compatibilidade com comportamento do pip."
#: ../../package-structure-code/declare-dependencies.md
msgid "Use pip (version >=25.1)"
-msgstr ""
+msgstr "Usar pip (versão >=25.1)"
-#: ../../package-structure-code/declare-dependencies.md:341
-msgid "**Install dependency groups:**"
-msgstr ""
-
-#: ../../package-structure-code/declare-dependencies.md:348
+#: ../../package-structure-code/declare-dependencies.md:368
msgid ""
"Always call pip using `python -m pip` to ensure you're using the pip from"
" your current active Python environment. This helps avoid installation "
"conflicts."
msgstr ""
+"Sempre execute pip usando `python -m pip` para garantir que você está "
+"usando o pip do seu ambiente Python atualmente ativo. Isso ajuda a evitar"
+" conflitos de instalação."
-#: ../../package-structure-code/declare-dependencies.md:352
+#: ../../package-structure-code/declare-dependencies.md:372
msgid ""
"**Note:** Some shells (like zsh on Mac) require quotes around brackets to"
" run successfully:"
msgstr ""
+"**Nota:** Alguns shells (como zsh no Mac) exigem aspas ao redor dos "
+"colchetes para executar corretamente:"
-#: ../../package-structure-code/declare-dependencies.md:354
+#: ../../package-structure-code/declare-dependencies.md:374
msgid "`python -m pip install \".[tests]\"`"
-msgstr ""
+msgstr "`python -m pip install \".[tests]\"`"
-#: ../../package-structure-code/declare-dependencies.md:360
+#: ../../package-structure-code/declare-dependencies.md:380
msgid "Combining dependency groups"
-msgstr ""
+msgstr "Combinando grupos de dependências"
-#: ../../package-structure-code/declare-dependencies.md:362
+#: ../../package-structure-code/declare-dependencies.md:382
msgid "You can also create combined groups that reference other groups:"
-msgstr ""
+msgstr "Você também pode criar grupos combinados que referenciam outros grupos:"
-#: ../../package-structure-code/declare-dependencies.md:371
+#: ../../package-structure-code/declare-dependencies.md:391
msgid "Then install everything with pip install or uv sync as needed:"
-msgstr ""
+msgstr "Depois instale tudo com pip install ou uv sync conforme necessário:"
-#: ../../package-structure-code/declare-dependencies.md:380
+#: ../../package-structure-code/declare-dependencies.md:400
msgid ""
"When you install optional dependencies, pip and uv install your package "
"and its core dependencies automatically."
msgstr ""
+"Quando você instala dependências opcionais, pip e uv instalam seu pacote "
+"e suas dependências principais automaticamente."
-#: ../../package-structure-code/declare-dependencies.md:384
+#: ../../package-structure-code/declare-dependencies.md:404
msgid "Version specifiers for dependencies"
-msgstr ""
+msgstr "Especificadores de versão para dependências"
-#: ../../package-structure-code/declare-dependencies.md:386
+#: ../../package-structure-code/declare-dependencies.md:406
msgid ""
"Version specifiers control which versions of a dependency work with your "
"package. Use them to specify minimum versions, exclude buggy releases, or"
" set version ranges."
msgstr ""
+"Especificadores de versão controlam quais versões de uma dependência "
+"funcionam com seu pacote. Use-os para especificar versões mínimas, "
+"excluir releases com bugs ou definir intervalos de versão."
-#: ../../package-structure-code/declare-dependencies.md:390
+#: ../../package-structure-code/declare-dependencies.md:410
msgid "Common operators"
-msgstr ""
+msgstr "Operadores comuns"
-#: ../../package-structure-code/declare-dependencies.md:392
+#: ../../package-structure-code/declare-dependencies.md:412
msgid ""
"**`>=`** Minimum version set: `numpy>=1.20` (This is the most common "
"approach and is recommended)"
msgstr ""
+"**`>=`** Versão mínima: `numpy>=1.20` (Esta é a abordagem mais comum e "
+"recomendada)"
-#: ../../package-structure-code/declare-dependencies.md:393
+#: ../../package-structure-code/declare-dependencies.md:413
msgid ""
"**`==`** Exact version: `requests==2.28.0` (Avoid pinning dependencies "
"like this unless necessary)"
msgstr ""
+"**`==`** Versão exata: `requests==2.28.0` (Evite fixar dependências "
+"assim, a menos que seja necessário)"
-#: ../../package-structure-code/declare-dependencies.md:394
+#: ../../package-structure-code/declare-dependencies.md:414
msgid ""
"**`~=`** Compatible release: `django~=4.2.0` (Allows patches: "
">=4.2.0,<4.3.0)"
msgstr ""
+"**`~=`** Release compatível: `django~=4.2.0` (Permite patches: "
+">=4.2.0,<4.3.0)"
-#: ../../package-structure-code/declare-dependencies.md:395
+#: ../../package-structure-code/declare-dependencies.md:415
msgid "**`<` or `>`** - Upper/lower bounds: `pandas>=1.0,<3.0`"
-msgstr ""
+msgstr "**`<` ou `>`** - Limites superior/inferior: `pandas>=1.0,<3.0`"
-#: ../../package-structure-code/declare-dependencies.md:396
+#: ../../package-structure-code/declare-dependencies.md:416
msgid ""
"**`!=`** Exclude version: `scipy>=1.7,!=1.8.0` (Rare but allows you to "
"skip a buggy release version)"
msgstr ""
+"**`!=`** Excluir versão: `scipy>=1.7,!=1.8.0` (Raro, mas permite ignorar "
+"uma versão release com bugs)"
-#: ../../package-structure-code/declare-dependencies.md:399
+#: ../../package-structure-code/declare-dependencies.md:419
msgid ""
"**Best practice:** Use `>=` to specify your minimum tested version and "
"avoid upper bounds unless you know at what version that dependency is no "
@@ -1291,12 +1778,17 @@ msgid ""
"to your pyproject.toml file. This keeps your package flexible and reduces"
" dependency conflicts."
msgstr ""
+"**Boa prática:** Use `>=` para especificar sua versão mínima testada e "
+"evite limites superiores a menos que você saiba em qual versão aquela "
+"dependência deixa de ser compatível. O UV faz isso por padrão quando "
+"adiciona uma dependência ao seu arquivo pyproject.toml. Isso mantém seu "
+"pacote flexível e reduz conflitos de dependências."
-#: ../../package-structure-code/declare-dependencies.md:415
+#: ../../package-structure-code/declare-dependencies.md:435
msgid "Using conda and Pixi"
-msgstr ""
+msgstr "Usando conda e Pixi"
-#: ../../package-structure-code/declare-dependencies.md:419
+#: ../../package-structure-code/declare-dependencies.md:439
msgid ""
"The `pyproject.toml` file works great for pure-Python packages. However, "
"some packages (particularly in the scientific Python ecosystem) require "
@@ -1304,23 +1796,31 @@ msgid ""
"created to support the distribution of tools with non-Python "
"dependencies."
msgstr ""
+"O arquivo `pyproject.toml` funciona muito bem para pacotes Python puros. "
+"Porém, alguns pacotes (principalmente no ecossistema científico Python) "
+"precisam de dependências escritas em outras linguagens como C ou Fortran."
+" O Conda foi criado para suportar a distribuição de ferramentas com "
+"dependências não-Python."
-#: ../../package-structure-code/declare-dependencies.md:424
+#: ../../package-structure-code/declare-dependencies.md:444
msgid "**For conda users:**"
-msgstr ""
+msgstr "**Para usuários de conda:**"
-#: ../../package-structure-code/declare-dependencies.md:426
+#: ../../package-structure-code/declare-dependencies.md:446
msgid ""
"You can maintain an `environment.yml` file to help users and contributors"
" set up conda environments. This is especially useful for packages with "
"system-level dependencies like GDAL."
msgstr ""
+"Você pode manter um arquivo `environment.yml` para ajudar usuários e "
+"contribuidores a configurarem ambientes conda. Isso é especialmente útil "
+"para pacotes com dependências de sistema como GDAL."
-#: ../../package-structure-code/declare-dependencies.md:430
+#: ../../package-structure-code/declare-dependencies.md:450
msgid "**Consider Pixi for conda package focused workflows:**"
-msgstr ""
+msgstr "**Considere o Pixi para workflows focados em pacotes conda:**"
-#: ../../package-structure-code/declare-dependencies.md:432
+#: ../../package-structure-code/declare-dependencies.md:452
msgid ""
"[Pixi](https://pixi.sh) is a modern package manager built on top of both "
"the conda and Python package ecosystems. Pixi is able to treat conda and "
@@ -1337,12 +1837,26 @@ msgid ""
"environment](https://pixi.sh/latest/tutorials/import/) into a new Pixi "
"workspace with"
msgstr ""
-
-#: ../../package-structure-code/declare-dependencies.md:450
+"[Pixi](https://pixi.sh) é um gerenciador de pacotes moderno construído em"
+" cima dos ecossistemas conda e de pacotes Python. O Pixi consegue tratar "
+"requisitos de pacotes conda e Python de forma equivalente ao resolver "
+"ambientes, mas usa uma abordagem \"conda-first\", utilizando pacotes "
+"conda já resolvidos sempre que possível ao resolver dependências Python. "
+"O Pixi [também pode usar `pyproject.toml` para "
+"configuração](https://pixi.sh/latest/python/pyproject_toml/). Se seu "
+"projeto depende fortemente de pacotes conda, o Pixi oferece um workflow "
+"simplificado com resolução de dependências mais rápida e suporte "
+"automático a lock files para reprodutibilidade completa do ambiente. Se "
+"você já possui um arquivo de definição de ambiente conda, como um "
+"`environment.yml`, pode [importar o "
+"ambiente](https://pixi.sh/latest/tutorials/import/) para um novo "
+"workspace Pixi com"
+
+#: ../../package-structure-code/declare-dependencies.md:470
msgid "A note for conda users"
-msgstr ""
+msgstr "Uma observação para usuários de conda"
-#: ../../package-structure-code/declare-dependencies.md:453
+#: ../../package-structure-code/declare-dependencies.md:473
msgid ""
"If you use a conda environment for development and install your package "
"with `python -m pip install -e .` dependencies will be installed from "
@@ -1350,60 +1864,80 @@ msgid ""
"installed. This can cause conflicts, especially for packages with system "
"dependencies."
msgstr ""
+"Se você usa um ambiente conda para desenvolvimento e instala seu pacote "
+"com `python -m pip install -e .`, as dependências serão instaladas a "
+"partir do PyPI, potencialmente sobrescrevendo pacotes conda que já haviam"
+" sido instalados. Isso pode causar conflitos, especialmente em pacotes "
+"com dependências de sistema."
-#: ../../package-structure-code/declare-dependencies.md:458
+#: ../../package-structure-code/declare-dependencies.md:478
msgid "To avoid this, install your package without dependencies:"
-msgstr ""
+msgstr "Para evitar isso, instale seu pacote sem dependências:"
-#: ../../package-structure-code/declare-dependencies.md:464
+#: ../../package-structure-code/declare-dependencies.md:484
msgid "Then install dependencies through your conda `environment.yml` file."
msgstr ""
+"Depois instale as dependências através do seu arquivo conda "
+"`environment.yml`."
-#: ../../package-structure-code/declare-dependencies.md:467
+#: ../../package-structure-code/declare-dependencies.md:487
msgid "Dependencies in Read the Docs"
-msgstr ""
+msgstr "Dependências no Read the Docs"
-#: ../../package-structure-code/declare-dependencies.md:469
+#: ../../package-structure-code/declare-dependencies.md:489
msgid ""
"Once you've specified dependencies in your `pyproject.toml`, you can use "
"them in other workflows like building documentation on Read the Docs."
msgstr ""
+"Depois de especificar dependências no seu `pyproject.toml`, você pode "
+"usá-las em outros workflows, como gerar documentação no Read the Docs."
-#: ../../package-structure-code/declare-dependencies.md:472
+#: ../../package-structure-code/declare-dependencies.md:492
msgid ""
"[Read the Docs](https://readthedocs.org) is a documentation platform that"
" automatically builds and publishes your documentation. To install your "
"dependencies during the build process, configure them in a "
"**readthedocs.yaml** file."
msgstr ""
+"[Read the Docs](https://readthedocs.org) é uma plataforma de documentação"
+" que gera e publica automaticamente sua documentação. Para instalar suas "
+"dependências durante o processo de build, configure-as em um arquivo "
+"**readthedocs.yaml**."
-#: ../../package-structure-code/declare-dependencies.md:477
+#: ../../package-structure-code/declare-dependencies.md:497
msgid "Here's an example that installs your `docs` optional dependencies:"
-msgstr ""
+msgstr "Aqui está um exemplo que instala suas dependências opcionais `docs`:"
-#: ../../package-structure-code/declare-dependencies.md:488
+#: ../../package-structure-code/declare-dependencies.md:508
msgid "Learn more about Read the Docs"
-msgstr ""
+msgstr "Saiba mais sobre o Read the Docs"
-#: ../../package-structure-code/declare-dependencies.md:491
+#: ../../package-structure-code/declare-dependencies.md:511
msgid ""
"[Creating a readthedocs.yaml file](https://docs.readthedocs.io/en/stable"
"/config-file/index.html)"
msgstr ""
+"[Criando um arquivo "
+"readthedocs.yaml](https://docs.readthedocs.io/en/stable/config-"
+"file/index.html)"
-#: ../../package-structure-code/declare-dependencies.md:492
+#: ../../package-structure-code/declare-dependencies.md:512
msgid ""
"[Using uv with Read the Docs](https://docs.readthedocs.io/en/stable"
"/build-customization.html)"
msgstr ""
+"[Usando uv com Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html)"
-#: ../../package-structure-code/declare-dependencies.md:493
+#: ../../package-structure-code/declare-dependencies.md:513
msgid ""
"[Using Poetry with Read the Docs](https://docs.readthedocs.io/en/stable"
"/build-customization.html#install-dependencies-with-poetry)"
msgstr ""
+"[Usando Poetry com Read the Docs](https://docs.readthedocs.io/en/stable"
+"/build-customization.html#install-dependencies-with-poetry)"
-#: ../../package-structure-code/declare-dependencies.md:498
+#: ../../package-structure-code/declare-dependencies.md:518
msgid ""
"Keep this comment - in this file for now - Jeremiah "
@@ -1411,74 +1945,400 @@ msgid ""
"not. It's really comprehensive. But do we want it in the guide?? It's "
"really useful for more advanced users."
msgstr ""
+"Mantenha este comentário - neste arquivo por enquanto - "
+"Jeremiah fez um ótimo levantamento dos shells mais comuns e se eles "
+"precisam de aspas ou não. Está realmente bem completo. Mas queremos isso "
+"no guia?? É muito útil para usuários mais avançados."
-#: ../../package-structure-code/declare-dependencies.md:500
+#: ../../package-structure-code/declare-dependencies.md:520
msgid ""
"Following this comment: "
msgstr ""
+"Seguindo este comentário: "
-#: ../../package-structure-code/declare-dependencies.md:503
+#: ../../package-structure-code/declare-dependencies.md:523
msgid "Jonny will add a section that talks about:"
-msgstr ""
+msgstr "Jonny irá adicionar uma seção falando sobre:"
-#: ../../package-structure-code/declare-dependencies.md:505
+#: ../../package-structure-code/declare-dependencies.md:525
msgid ""
"Why you specify dependencies How to specify dependencies When you use "
"different specifiers"
msgstr ""
+"Por que você especifica dependências Como especificar dependências Quando"
+" usar diferentes especificadores"
+
+#: ../../package-structure-code/declare-dependencies.md:530
+#, fuzzy
+msgid "Dependency Locking"
+msgstr "Especificação de dependências"
+
+#: ../../package-structure-code/declare-dependencies.md:532
+msgid ""
+"In addition to declaring dependencies in `pyproject.toml`, it is common "
+"for packages to lock down exact versions of all their dependencies in a "
+"separate lock file. A lock file provides benefits of reproducibility, "
+"security, and potentially faster installs, among other things. Pinning "
+"the exact dependency versions used in a project eliminates \"works on my "
+"machine\" bugs and gives CI a reproducible baseline. For applications "
+"meant to be run rather than imported, lock files also ensure anyone "
+"installing the project gets a known-good set of dependencies instead of "
+"whatever happens to be latest."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:541
+#, fuzzy
+msgid "`pyproject.toml` vs lock file"
+msgstr "Sobre o arquivo pyproject.toml"
+
+#: ../../package-structure-code/declare-dependencies.md:542
+msgid ""
+"`pyproject.toml`: defines all environments you intend to support for "
+"users importing your package into their project."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:544
+msgid "**lock file**: defines a specific environment used for development"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:546
+msgid ""
+"`pyproject.toml` should be permissive, erring on the side of allowing too"
+" much even if it may allow untested environments. In most cases, it is "
+"better that users install your package but encounter an issue rather than"
+" being restricted from installing your package by the `pyproject.toml` "
+"when it would otherwise work."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:552
+msgid ""
+"A lock file is the opposite. If it installs, the resulting environment "
+"should work even if this means some valid environments are excluded."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:555
+msgid "Standardized Lock File"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:557
+msgid ""
+"As of March 2025, [PEP 751](https://peps.python.org/pep-0751) defined a "
+"standard `pylock.toml` format to unify the various lock file formats in "
+"use by other package managers (e.g. `uv.lock`, `poetry.lock`, "
+"`pdm.lock`). Most package managers provide ways to generate a PEP 751 "
+"compatible file. See [PyPA "
+"specification](https://packaging.python.org/en/latest/specifications"
+"/pylock-toml/) for up-to-date formatting info on `pylock.toml`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:565
+msgid "How to work with lock files?"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:567
+msgid ""
+"Lock files are not written by hand. Package managers and IDEs provide "
+"tools to create, update, and reformat lock files as needed."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:570
+msgid ""
+"**Create** - Package managers often do this automatically though it can "
+"be done manually. For example, calling `uv add numpy` will automatically "
+"create a `uv.lock` file, setup the environment, and install numpy."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:573
+msgid ""
+"**Update** - This is not done automatically by package managers. "
+"Maintainers can choose to do this manually or setup their own automated "
+"workflow. Updates can be for specific packages or all dependencies."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:576
+msgid ""
+"**Reformat** - Package managers currently use native formats (e.g. uv "
+"uses `uv.lock`) and provide tools for converting into `pylock.toml` and "
+"other formats (e.g. `requirements.txt`) when needed"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:580
+msgid "Below is the uv CLI workflow for lock files:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:597
+msgid ""
+"See [official docs](https://docs.astral.sh/uv/concepts/projects/sync/) "
+"for more details. See also the relevant docs for [Poetry]( https"
+"://python-poetry.org/docs/basic-usage/#installing-dependencies) and "
+"[PDM](https://pdm-project.org/latest/usage/lockfile/)."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:601
+msgid "Should I use a lock file?"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:603
+msgid ""
+"Most package managers will generate a lock file automatically for you "
+"(e.g. uv, Poetry, PDM). The real question is when you version control the"
+" lock file as part of your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:607
+msgid "Recommendation: Versioning a lock file"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:609
+msgid ""
+"If your project is an application others use directly, include a lock "
+"file as the recommended environment."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:612
+msgid ""
+"If your project is a library to be used in other projects and it is "
+"mature enough to have CI, include a lock file for CI and contributors. "
+"For a small library only you maintain that is shared amongst people you "
+"know, waiting to add a lock file is not an issue. In general, you should "
+"version the lock file."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:618
+msgid ""
+"For private libraries shared within a team, a lock file is less "
+"important. But if the project is an application or tool that others run "
+"directly, instead of importing into their code, committing the lock file "
+"is generally the most convenient choice. It gives users a reproducible "
+"set of dependencies instead of having each user resolve from "
+"pyproject.toml."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:625
+msgid "Recommendation: Which format to version control"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:627
+msgid "Version control the standard `pylock.toml` format."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:630
+msgid ""
+"There is some maintenance cost from lock files. Maintainers should aim to"
+" update the lock file neither too rarely nor too often."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:632
+msgid ""
+"Too rarely means you risk missing updates with bugfixes, security "
+"patches, performance improvements, etc."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:634
+msgid ""
+"Too often means you may introduce bugs or even security vulnerablilites "
+"before maintainers of your dependencies catch them. Package managers are "
+"starting to support dependency cooldowns to mitigate this."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:638
+msgid "Recommendation: Updating a lock file"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:640
+msgid ""
+"Update lock files frequently (e.g. weekly) but configure a dependency "
+"cooldown of several days to avoid automatically installing the latest "
+"packages. Only override the cooldown if a new package has a needed bug "
+"fix or security patch."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+#, fuzzy
+msgid "Dependency cooldowns"
+msgstr "Especificações de dependências"
+
+#: ../../package-structure-code/declare-dependencies.md:649
+msgid ""
+"[Dependency cooldowns]( https://blog.pypi.org/posts/2026-04-02-incident-"
+"report-litellm-telnyx-supply-chain-attack/#dependency-cooldowns ) are "
+"strongly encouraged by security experts to avoid automatically "
+"downloading the latest package updates that may have been compromised "
+"with malware. Package manager tools are starting to support "
+"configurations for cooldowns"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:657
+#, fuzzy
+msgid "or in `pyproject.toml`"
+msgstr "Configuração do linter no `pyproject.toml`"
+
+#: ../../package-structure-code/declare-dependencies.md:663
+msgid ""
+"Integrating cooldown constrained lock files into CI is important since "
+"this is where new packages are commonly tested first. Automated testing "
+"code that resolves `[project.dependencies]` every time"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:669
+msgid "can be replaced with lock file based installations"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:673
+msgid "after pylock.toml has been added to the project."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:678
+msgid ""
+"Support for this varies across automated testing frameworks (e.g. hatch, "
+"nox) so consult their documentation for how to install dependencies from "
+"lock files with dependency cooldowns."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:683
+msgid ""
+"When you decide to update a lock file, make sure to test that the "
+"resulting environment works before committing. If it fails because of "
+"some dependency update, then it may be necessary to update "
+"`pyproject.toml` to cap the supported versions of that dependency "
+"unless/until the code can be updated to support it."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:688
+msgid ""
+"It can also be good, though not necessary, to double check what changed "
+"when updating a lock file. The diff can be noisy so the main changes to "
+"focus on are"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:690
+msgid "major version updates (e.g. `pandas 2.X.X` -> `pandas 3.X.X`)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:691
+#, fuzzy
+msgid "new transitive dependencies (i.e. not part of your `pyproject.toml`)"
+msgstr "Adicione dependências ao seu arquivo pyproject.toml"
+
+#: ../../package-structure-code/declare-dependencies.md:694
+msgid ""
+"A lock file captures one environment for CI testing, not the full "
+"compatibility range declared in `pyproject.toml`. Projects that use lock "
+"files may want to have CI test other environments such as"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:698
+msgid ""
+"the latest packages consistent with your `pyproject.toml`, subject to "
+"dependency cooldowns. This lets you know if a dependency update breaks "
+"your package."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:701
+msgid ""
+"older supported versions of Python to let you know if a recent change to "
+"your package no longer works with an older Python release."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md
+msgid "What about `requirements.txt`"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:712
+msgid ""
+"Older approaches to locking used `pip freeze` to generate a "
+"`requirements.txt` that got used as a lock file. These are minimal lock "
+"files that pin a specific version for the system on which the command was"
+" run. They might look like"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:722
+msgid ""
+"However, this minimal level of specificity has several downsides making "
+"lock files the preferred format:"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:724
+msgid ""
+"The versions satisfying `pyproject.toml` may differ between your Windows "
+"laptop and the Linux server your CI runs on. A single lock file contains "
+"the information needed to build platform specific and Python version "
+"specific environments. In contrast, a separate `requirements.txt` files "
+"is needed to store this information (e.g. `requirements.ci.txt`, "
+"`requirements.py313-macos.txt`)"
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:730
+msgid ""
+"Packages can get updated without a version update for both legitimate and"
+" malicious reasons. Lock files include package hashes to catch this. A "
+"[hash](https://en.wikipedia.org/wiki/Hash_function) is a unique signature"
+" computed from the code and any change to the code will cause the release"
+" to have a different hash even if is given the same release version "
+"number."
+msgstr ""
+
+#: ../../package-structure-code/declare-dependencies.md:736
+msgid ""
+"Other metadata determined during resolution of `pyproject.toml` (e.g. "
+"which dependencies are transitive, where the packages were downloaded "
+"from, etc.) that can help speed up future installs is lost."
+msgstr ""
#: ../../package-structure-code/intro.md:163
msgid "Intro"
-msgstr ""
+msgstr "Introdução"
#: ../../package-structure-code/intro.md:163
msgid "Python package structure"
-msgstr ""
+msgstr "Estrutura de pacote Python"
#: ../../package-structure-code/intro.md:163
msgid "pyproject.toml Package Metadata"
-msgstr ""
+msgstr "Metadados de pacote do pyproject.toml"
#: ../../package-structure-code/intro.md:163
msgid "Declare dependencies"
-msgstr ""
+msgstr "Declarar dependências"
#: ../../package-structure-code/intro.md:163
msgid "Package Build Tools"
-msgstr ""
+msgstr "Ferramentas de Build de Pacotes"
#: ../../package-structure-code/intro.md:163
msgid "Build Your Package"
-msgstr ""
+msgstr "Faça o Build do seu Pacote"
#: ../../package-structure-code/intro.md:163
msgid "Complex Builds"
-msgstr ""
+msgstr "Builds Complexos"
#: ../../package-structure-code/intro.md:163
msgid "Create & Build Your Package"
-msgstr ""
+msgstr "Crie e Faça o Build do seu Pacote"
#: ../../package-structure-code/intro.md:177
msgid "Publish with Conda / PyPI"
-msgstr ""
+msgstr "Publicar com Conda / PyPI"
#: ../../package-structure-code/intro.md:177
msgid "Package versions"
-msgstr ""
+msgstr "Versões de pacote"
#: ../../package-structure-code/intro.md:177
msgid "Code style"
-msgstr ""
+msgstr "Estilo de código"
#: ../../package-structure-code/intro.md:177
msgid "Publish your package"
-msgstr ""
+msgstr "Publique seu pacote"
#: ../../package-structure-code/intro.md:1
msgid "Python Package Structure & Code"
-msgstr ""
+msgstr "Estrutura e Código de Pacotes Python"
#: ../../package-structure-code/intro.md:3
msgid ""
@@ -1486,108 +2346,126 @@ msgid ""
" configure metadata, choose build tools, and publish your package to PyPI"
" and conda-forge."
msgstr ""
+"Esta seção cobre tudo o que você precisa para estruturar seu pacote "
+"Python, configurar metadados, escolher ferramentas de build e publicar "
+"seu pacote no PyPI e conda-forge."
#: ../../package-structure-code/intro.md:9
msgid "New to Python packaging?"
-msgstr ""
+msgstr "Novo em Packaging Python?"
#: ../../package-structure-code/intro.md:13
msgid "**Start with our step-by-step tutorials:**"
-msgstr ""
+msgstr "**Comece com nossos tutoriais passo a passo:**"
#: ../../package-structure-code/intro.md:15
msgid "Follow along as we create a package from scratch"
-msgstr ""
+msgstr "Acompanhe enquanto criamos um pacote do zero"
#: ../../package-structure-code/intro.md:16
msgid "Learn by doing with guided examples"
-msgstr ""
+msgstr "Aprenda na prática com exemplos guiados"
#: ../../package-structure-code/intro.md:17
msgid "Perfect for your first package"
-msgstr ""
+msgstr "Ideal para o seu primeiro pacote"
#: ../../package-structure-code/intro.md:19
msgid "Start the tutorial series"
-msgstr ""
+msgstr "Começar a série de tutoriais"
#: ../../package-structure-code/intro.md:27
msgid "Already have code to package?"
-msgstr ""
+msgstr "Já tem código para a package?"
#: ../../package-structure-code/intro.md:30
msgid "**Jump into the reference guides:**"
-msgstr ""
+msgstr "**Acesse os guias de referência:**"
#: ../../package-structure-code/intro.md:32
msgid "Learn about package structure and metadata"
-msgstr ""
+msgstr "Aprenda sobre estrutura de pacote e metadados"
#: ../../package-structure-code/intro.md:33
msgid "Compare build tools and choose what's right for you"
-msgstr ""
+msgstr "Compare ferramentas de build e escolha a mais adequada para você"
#: ../../package-structure-code/intro.md:34
msgid "Understand the publishing process"
-msgstr ""
+msgstr "Entenda o processo de publicação"
#: ../../package-structure-code/intro.md:36
msgid "Start with the cards below ↓"
-msgstr ""
+msgstr "Comece pelos cards abaixo ↓"
#: ../../package-structure-code/intro.md:40
msgid "How this content is developed"
-msgstr ""
+msgstr "Como este conteúdo é desenvolvido"
#: ../../package-structure-code/intro.md:43
msgid ""
"All of the content in this guide has been vetted by community members, "
"including maintainers and developers of the core packaging tools."
msgstr ""
+"Todo o conteúdo deste guia foi revisado por membros da comunidade, "
+"incluindo mantenedores e desenvolvedores das principais ferramentas de "
+"packaging."
#: ../../package-structure-code/intro.md:46
msgid "What you'll learn"
-msgstr ""
+msgstr "O que você vai aprender"
#: ../../package-structure-code/intro.md:48
msgid "In this section, you'll learn how to:"
-msgstr ""
+msgstr "Nesta seção, você vai aprender como:"
#: ../../package-structure-code/intro.md:50
msgid ""
"**Structure your package** - Choose between src and flat layouts, "
"organize tests and documentation"
msgstr ""
+"**Estruturar seu pacote** - Escolher entre layouts src e flat, organizar "
+"testes e documentação"
#: ../../package-structure-code/intro.md:51
msgid ""
"**Configure metadata** - Set up `pyproject.toml` with project "
"information, dependencies, and versioning"
msgstr ""
+"**Configurar metadados** - Definir o `pyproject.toml` com informações do "
+"projeto, dependências e versionamento"
#: ../../package-structure-code/intro.md:52
msgid ""
"**Choose build tools** - Compare Hatch, PDM, Poetry, and setuptools to "
"find the right fit"
msgstr ""
+"**Escolher ferramentas de build** - Comparar Hatch, PDM, Poetry e "
+"setuptools para encontrar a opção mais adequada"
#: ../../package-structure-code/intro.md:53
msgid ""
"**Build distributions** - Create sdist and wheel files ready for "
"publication"
msgstr ""
+"**Gerar distribuições** - Criar arquivos sdist e wheel prontos para "
+"publicação"
#: ../../package-structure-code/intro.md:54
msgid ""
"**Publish your package** - Make your package available on PyPI and "
"optionally conda-forge"
msgstr ""
+"**Publicar seu pacote** - Disponibilizar seu pacote no PyPI e, "
+"opcionalmente, no conda-forge"
#: ../../package-structure-code/intro.md:55
msgid ""
"**Maintain code quality** - Set up linters and formatters to keep your "
"code consistent"
msgstr ""
+"**Manter a qualidade do código** - Configurar linters e formatadores para"
+" manter seu código consistente"
#: ../../package-structure-code/intro.md:57
msgid ""
@@ -1596,10 +2474,14 @@ msgid ""
"Python community specs](https://scientific-python.org/specs/), while "
"prioritizing tools that are beginner-friendly and well-maintained."
msgstr ""
+"Nossas recomendações estão alinhadas com os [padrões atuais de packaging "
+"Python](https://packaging.python.org/en/latest/) e com as [especificações"
+" da comunidade Scientific Python](https://scientific-python.org/specs/), "
+"priorizando ferramentas acessíveis para iniciantes e bem mantidas."
#: ../../package-structure-code/intro.md:59
msgid "Package setup"
-msgstr ""
+msgstr "Configuração do pacote"
#: ../../package-structure-code/intro.md:66
msgid "✨ Package file structure ✨"
@@ -1613,10 +2495,15 @@ msgid ""
"place [tests](src-layout-test) and [documentation](package-source-"
"layout)."
msgstr ""
+"Aprenda a organizar os arquivos do seu pacote usando [layouts src ou flat"
+"](package-source-layout). Esta página ajuda você a decidir uma estrutura "
+"de pacote que segue as boas práticas modernas do Python, incluindo onde "
+"colocar [testes](src-layout-test) e [documentação](package-source-"
+"layout)."
#: ../../package-structure-code/intro.md:71
msgid "✨ Add metadata ✨"
-msgstr ""
+msgstr "✨ Adicionar metadados ✨"
#: ../../package-structure-code/intro.md:73
msgid ""
@@ -1625,10 +2512,14 @@ msgid ""
"also the metadata that a package installer needs to build and install "
"your package."
msgstr ""
+"Aprenda a adicionar [metadados de projeto](pyproject-toml-python-package-"
+"metadata) ao seu pacote Python para dar suporte tanto à filtragem no PyPI"
+" quanto aos metadados que um instalador de pacotes precisa para compilar "
+"e instalar seu pacote."
#: ../../package-structure-code/intro.md:78
msgid "✨ Declare dependencies ✨"
-msgstr ""
+msgstr "✨ Declarar dependências ✨"
#: ../../package-structure-code/intro.md:80
msgid ""
@@ -1637,10 +2528,14 @@ msgid ""
"dependencies](dependency-groups) in your [pyproject.toml file](pyproject-"
"toml-overview)."
msgstr ""
+"Aprenda a especificar [dependências obrigatórias](required-dependencies),"
+" [dependências opcionais de funcionalidades](optional-dependencies) e "
+"[dependências de desenvolvimento](dependency-groups) no seu [arquivo "
+"pyproject.toml](pyproject-toml-overview)."
#: ../../package-structure-code/intro.md:83
msgid "✨ Setup package versioning ✨"
-msgstr ""
+msgstr "✨ Configurar o versionamento do pacote ✨"
#: ../../package-structure-code/intro.md:85
msgid ""
@@ -1650,14 +2545,20 @@ msgid ""
" set up [automated version management](tools-version-management) using "
"tools like hatch_vcs or setuptools-scm."
msgstr ""
+"Aprenda a gerenciar versões do pacote usando [versionamento semântico "
+"(SemVer)](package-versioning) ou [versionamento por calendário (CalVer"
+")](package-versioning). Esta página ajuda você a escolher a estratégia de"
+" versionamento ideal e a configurar o [gerenciamento automatizado de "
+"versões](tools-version-management) usando ferramentas como hatch_vcs ou "
+"setuptools-scm."
#: ../../package-structure-code/intro.md:89
msgid "Development practices"
-msgstr ""
+msgstr "Boas práticas de desenvolvimento"
#: ../../package-structure-code/intro.md:96
msgid "✨ Code style & linters ✨"
-msgstr ""
+msgstr "✨ Estilo de código & linters ✨"
#: ../../package-structure-code/intro.md:98
msgid ""
@@ -1666,14 +2567,18 @@ msgid ""
"ensure your package follows [PEP 8 standards](code-style-tools) and "
"maintains consistent code style throughout your project."
msgstr ""
+"Aprenda a configurar [formatadores de código e linters](code-style-tools)"
+" ([Black](about-black), [Ruff](about-ruff), [flake8](about-flake8)) para "
+"garantir que seu pacote siga os [padrões PEP 8](code-style-tools) e "
+"mantenha um estilo de código consistente em todo o projeto."
#: ../../package-structure-code/intro.md:102
msgid "Build & publish"
-msgstr ""
+msgstr "Build & publicação"
#: ../../package-structure-code/intro.md:109
msgid "✨ Choose your build tool ✨"
-msgstr ""
+msgstr "✨ Escolha sua ferramenta de build ✨"
#: ../../package-structure-code/intro.md:111
msgid ""
@@ -1682,10 +2587,15 @@ msgid ""
"[setuptools](about-setuptools) to find the best fit for your workflow. "
"See the [summary comparison](summary-build-tools) to help decide."
msgstr ""
+"Aprenda a escolher a ferramenta de packaging ideal para o seu projeto. "
+"Compare [Hatch](about-hatch), [PDM](about-pdm), [Poetry](about-poetry) e "
+"[setuptools](about-setuptools) para encontrar a melhor opção para o seu "
+"fluxo de trabalho. Veja o [comparativo resumido](summary-build-tools) "
+"para ajudar na decisão."
#: ../../package-structure-code/intro.md:114
msgid "✨ Build your package ✨"
-msgstr ""
+msgstr "✨ Compile seu pacote ✨"
#: ../../package-structure-code/intro.md:116
msgid ""
@@ -1693,10 +2603,13 @@ msgid ""
"package) ([sdist](python-source-distribution) and [wheel](python-wheel)) "
"that can be published on [PyPI](publish-pypi-conda)."
msgstr ""
+"Aprenda a compilar seu pacote Python em [arquivos de distribuição](build-"
+"package) ([sdist](python-source-distribution) e [wheel](python-wheel)) "
+"que podem ser publicados no [PyPI](publish-pypi-conda)."
#: ../../package-structure-code/intro.md:119
msgid "✨ Publish to PyPI and Conda ✨"
-msgstr ""
+msgstr "✨ Publicar no PyPI e no Conda ✨"
#: ../../package-structure-code/intro.md:121
msgid ""
@@ -1706,22 +2619,31 @@ msgid ""
"including the [conda-forge submission process](how-to-submit-to-conda-"
"forge) after publishing to PyPI."
msgstr ""
+"Aprenda a publicar seu pacote no [PyPI](publish-pypi-conda) e, "
+"opcionalmente, no [conda-forge](how-to-submit-to-conda-forge). Esta "
+"página cobre o processo completo para disponibilizar seu pacote aos "
+"usuários, incluindo o [processo de envio ao conda-forge](how-to-submit-"
+"to-conda-forge) após a publicação no PyPI."
#: ../../package-structure-code/intro.md:125
msgid "Choosing the right tools"
-msgstr ""
+msgstr "Escolhendo as ferramentas certas"
#: ../../package-structure-code/intro.md:127
msgid ""
"Not sure which build tool to use? This decision tree can help you choose "
"based on your package's needs:"
msgstr ""
+"Não sabe qual ferramenta de build usar? Esta árvore de decisão pode "
+"ajudar você a escolher com base nas necessidades do seu pacote:"
#: ../../package-structure-code/intro.md:131
msgid ""
"Figure showing a decision tree with the various packaging tool front-end "
"and back-end options."
msgstr ""
+"Figura mostrando uma árvore de decisão com as diversas opções de front-"
+"end e back-end das ferramentas de packaging."
#: ../../package-structure-code/intro.md:133
msgid ""
@@ -1729,24 +2651,31 @@ msgid ""
"[packaging tools page](python-package-build-tools) for detailed "
"comparisons and recommendations."
msgstr ""
+"Use esta árvore de decisão para ajudar a selecionar uma ferramenta de "
+"packaging. Acesse a [página de ferramentas de packaging](python-package-"
+"build-tools) para comparações detalhadas e recomendações."
#: ../../package-structure-code/intro.md:136
msgid "Our recommendations"
-msgstr ""
+msgstr "Nossas recomendações"
#: ../../package-structure-code/intro.md:138
msgid "We suggest tools and approaches based on three principles:"
-msgstr ""
+msgstr "Sugerimos ferramentas e abordagens com base em três princípios:"
#: ../../package-structure-code/intro.md:140
msgid ""
"**Beginner-friendly** - Tools that are easy to learn and use for those "
"new to packaging"
msgstr ""
+"**Acessível para iniciantes** - Ferramentas fáceis de aprender e usar "
+"para quem está começando com packaging"
#: ../../package-structure-code/intro.md:141
msgid "**Well-maintained** - Tools with active development and good documentation"
msgstr ""
+"**Bem mantidas** - Ferramentas com desenvolvimento ativo e boa "
+"documentação"
#: ../../package-structure-code/intro.md:142
msgid ""
@@ -1754,16 +2683,22 @@ msgid ""
"standards](https://packaging.python.org/en/latest/) and [Scientific "
"Python community specs](https://scientific-python.org/specs/)"
msgstr ""
+"**Alinhadas com os padrões** - Ferramentas que seguem os [padrões atuais "
+"de packaging Python](https://packaging.python.org/en/latest/) e as "
+"[especificações da comunidade Scientific Python](https://scientific-"
+"python.org/specs/)"
#: ../../package-structure-code/intro.md:144
msgid "Pure Python vs. complex builds"
-msgstr ""
+msgstr "Python puro vs. builds complexos"
#: ../../package-structure-code/intro.md:146
msgid ""
"**Pure Python packages** can use any modern tool (Hatch, PDM, Poetry, "
"Flit) - choose based on the features you want"
msgstr ""
+"**Pacotes Python puro** podem usar qualquer ferramenta moderna (Hatch, "
+"PDM, Poetry, Flit) - escolha com base nas funcionalidades que você deseja"
#: ../../package-structure-code/intro.md:147
msgid ""
@@ -1773,16 +2708,24 @@ msgid ""
"[Scientific Python Development Guide on compiled packaging](https://learn"
".scientific-python.org/development/guides/packaging-compiled/)."
msgstr ""
+"**Pacotes com extensões C/C++** podem precisar de etapas de build "
+"adicionais. Consulte nossa [página de builds complexos](complex-python-"
+"package-builds) para orientações. Para informações completas sobre "
+"packaging de projetos compilados, acesse o [Guia de Desenvolvimento "
+"Scientific Python sobre packaging compilado](https://learn.scientific-"
+"python.org/development/guides/packaging-compiled/)."
#: ../../package-structure-code/intro.md:149
msgid ""
"Most scientific Python packages start simple and can evolve to handle "
"more complex requirements as needed."
msgstr ""
+"A maioria dos pacotes Python científicos começa de forma simples e pode "
+"evoluir para lidar com requisitos mais complexos conforme necessário."
#: ../../package-structure-code/intro.md:151
msgid "Submitting your package for peer review?"
-msgstr ""
+msgstr "Submetendo seu pacote para revisão por pares?"
#: ../../package-structure-code/intro.md:153
msgid ""
@@ -1793,10 +2736,17 @@ msgid ""
"minimum requirements. These checks are useful for anyone creating a "
"Python package, not just those submitting for review."
msgstr ""
+"Se você planeja submeter seu pacote ao pyOpenSci para [revisão por "
+"pares](https://www.pyopensci.org/about-peer-review/index.html), confira "
+"nossa [lista de verificação do editor](https://www.pyopensci.org"
+"/software-peer-review/how-to/editor-in-chief-guide.html#editor-checklist-"
+"template) para os requisitos mínimos. Essas verificações são úteis para "
+"qualquer pessoa que esteja criando um pacote Python, não apenas para quem"
+" está submetendo para revisão."
#: ../../package-structure-code/intro.md:155
msgid "These are recommendations, not requirements"
-msgstr ""
+msgstr "Estas são recomendações, não requisitos"
#: ../../package-structure-code/intro.md:158
msgid ""
@@ -1804,6 +2754,9 @@ msgid ""
"structured package. They are **not** specific requirements for pyOpenSci "
"peer review."
msgstr ""
+"As sugestões neste guia foram elaboradas para ajudar você a criar um "
+"pacote bem-estruturado. Elas **não** são requisitos específicos para a "
+"revisão por pares do pyOpenSci."
#: ../../package-structure-code/intro.md:160
msgid ""
@@ -1812,10 +2765,14 @@ msgid ""
"scope.html) and [author guide](https://www.pyopensci.org/software-peer-"
"review/how-to/author-guide.html#) for actual review requirements."
msgstr ""
+"Se você está submetendo ao pyOpenSci, consulte nosso [escopo de "
+"pacotes](https://www.pyopensci.org/software-peer-review/about/package-"
+"scope.html) e o [guia do autor](https://www.pyopensci.org/software-peer-"
+"review/how-to/author-guide.html#) para os requisitos reais de revisão."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:1
msgid "Publishing Your Package In A Community Repository: PyPI or Anaconda.org"
-msgstr ""
+msgstr "Publicando seu pacote em um repositório comunitário: PyPI ou Anaconda.org"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:5
msgid ""
@@ -1823,18 +2780,25 @@ msgid ""
"installed from a public community repository such as PyPI or a conda "
"channel such as `bioconda` or `conda-forge` on Anaconda.org."
msgstr ""
+"O pyOpenSci exige que seu pacote tenha uma distribuição que possa ser "
+"instalada a partir de um repositório comunitário público, como o PyPI, ou"
+" de um canal conda como `bioconda` ou `conda-forge` no Anaconda.org."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:9
msgid ""
"Below you will learn more about the various publishing options for your "
"Python package."
msgstr ""
+"A seguir você encontrará mais informações sobre as diversas opções de "
+"publicação para o seu pacote Python."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:14
msgid ""
"Installing packages in the same environment using both pip and conda can "
"lead to package conflicts."
msgstr ""
+"Instalar pacotes no mesmo ambiente usando tanto pip quanto conda pode "
+"gerar conflitos entre pacotes."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:16
msgid ""
@@ -1842,12 +2806,17 @@ msgid ""
" local environments, consider publishing your package to both PyPI and "
"the conda-forge channel on Anaconda.org."
msgstr ""
+"Para minimizar conflitos para usuários que utilizam conda (ou pip) para "
+"gerenciar ambientes locais, considere publicar seu pacote tanto no PyPI "
+"quanto no canal conda-forge no Anaconda.org."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:18
msgid ""
"Below you will learn more specifics about the differences between PyPI "
"and conda publishing of your Python package."
msgstr ""
+"A seguir você aprenderá mais detalhes sobre as diferenças entre a "
+"publicação no PyPI e no conda do seu pacote Python."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:23
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:6
@@ -1859,6 +2828,12 @@ msgid ""
"distributions. From PyPI if you create a conda-forge recipe you can then "
"publish to conda-forge."
msgstr ""
+"Imagem mostrando a progressão de criação de um pacote Python, sua "
+"compilação e posterior publicação no PyPI e no conda-forge. Você pega seu"
+" código e o transforma em arquivos de distribuição (sdist e wheel) que o "
+"PyPI aceita. Em seguida, há uma seta em direção ao repositório PyPI onde "
+"você publica ambas as distribuições. A partir do PyPI, se você criar uma "
+"receita conda-forge, poderá publicar no conda-forge."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:25
msgid ""
@@ -1868,10 +2843,14 @@ msgid ""
" your package on conda-forge. You do not need to rebuild your package to "
"publish to conda-forge."
msgstr ""
+"Após publicar ambas as distribuições do pacote (a distribuição-fonte e o "
+"wheel) no PyPI, você pode publicar no conda-forge. O conda-forge requer "
+"uma distribuição-fonte no PyPI para compilar seu pacote no conda-forge. "
+"Você não precisa recompilar seu pacote para publicar no conda-forge."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:29
msgid "What is PyPI"
-msgstr ""
+msgstr "O que é o PyPI"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:31
msgid ""
@@ -1880,12 +2859,19 @@ msgid ""
"is also a test PyPI repository where you can test publishing your package"
" prior to the final publication on PyPI."
msgstr ""
+"O [PyPI](https://pypi.org/) é um repositório online de pacotes Python que"
+" você pode usar tanto para encontrar, instalar quanto para publicar seu "
+"pacote Python. Existe também um repositório PyPI de testes onde você pode"
+" testar a publicação do seu pacote antes da publicação definitiva no "
+"PyPI."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:36
msgid ""
"Many if not most Python packages can be found on PyPI and are thus "
"installable using `pip`."
msgstr ""
+"Muitos, se não a maioria dos pacotes Python, podem ser encontrados no "
+"PyPI e, portanto, instalados usando `pip`."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:38
msgid ""
@@ -1893,10 +2879,16 @@ msgid ""
" that conda can install any package regardless of the language(s) that it"
" is written in. Whereas `pip` can only install Python packages."
msgstr ""
+"A principal diferença entre usar pip e conda para instalar um pacote é "
+"que o conda pode instalar qualquer pacote independentemente da(s) "
+"linguagem(ns) em que foi escrito. Já o `pip` só consegue instalar pacotes"
+" Python."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:43
msgid "Click here for a tutorial on publishing your package to PyPI."
msgstr ""
+"Clique aqui para acessar um tutorial sobre como publicar seu pacote no "
+"PyPI."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:51
msgid ""
@@ -1907,10 +2899,16 @@ msgid ""
"\"bundles\" will be published on PyPI when you use [a standard build tool"
"](python-package-build-tools) to build your package."
msgstr ""
+"Na página de compilação de pacotes, discutimos os [dois tipos de "
+"distribuição que você criará ao fazer um pacote Python](python-package-"
+"distribution-files-sdist-wheel): SDist (empacotado como .tar.gz ou .zip) "
+"e Wheel (.whl), que é basicamente um arquivo zip. Ambos esses \"pacotes\""
+" de arquivos serão publicados no PyPI quando você usar [uma ferramenta de"
+" build padrão](python-package-build-tools) para compilar seu pacote."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:59
msgid "What is conda and Anaconda.org?"
-msgstr ""
+msgstr "O que são conda e Anaconda.org?"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:61
msgid ""
@@ -1918,16 +2916,21 @@ msgid ""
"can be used to install tools from the [Anaconda "
"repository](https://repo.anaconda.com/)."
msgstr ""
+"O conda é uma ferramenta de código aberto para gerenciamento de pacotes e"
+" ambientes. O conda pode ser usado para instalar ferramentas do "
+"[repositório Anaconda](https://repo.anaconda.com/)."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:65
msgid ""
"Anaconda.org contains public and private repositories for packages. These"
" repositories are known as channels (discussed below)."
msgstr ""
+"O Anaconda.org contém repositórios públicos e privados de pacotes. Esses "
+"repositórios são conhecidos como canais (discutidos abaixo)."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:68
msgid "A brief history of conda's evolution"
-msgstr ""
+msgstr "Um breve histórico da evolução do conda"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:71
msgid ""
@@ -1935,6 +2938,9 @@ msgid ""
"simplify the process of, managing software dependencies in scientific "
"Python projects."
msgstr ""
+"O ecossistema conda surgiu há anos para oferecer suporte e simplificar o "
+"processo de gerenciamento de dependências de software em projetos Python "
+"científicos."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:75
msgid ""
@@ -1946,12 +2952,22 @@ msgid ""
"builds that allow developers to bundle non-Python code into a Python "
"distribution using the [wheel distribution format](python-wheel)."
msgstr ""
+"Muitos dos principais projetos Python científicos dependem de ou "
+"encapsulam ferramentas e extensões escritas em outras linguagens, como "
+"C++. Nos primeiros estágios do desenvolvimento do ecossistema científico,"
+" essas extensões e ferramentas não-Python não tinham boa cobertura no "
+"PyPI, dificultando a publicação. Nos últimos anos, há mais suporte para "
+"builds complexos que permitem aos desenvolvedores empacotar código não-"
+"Python em uma distribuição Python usando o [formato de distribuição wheel"
+"](python-wheel)."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:77
msgid ""
"Conda provides a mechanism to manage these dependencies and ensure that "
"the required packages are installed correctly."
msgstr ""
+"O conda oferece um mecanismo para gerenciar essas dependências e garantir"
+" que os pacotes necessários sejam instalados corretamente."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:81
msgid ""
@@ -1962,10 +2978,16 @@ msgid ""
"that mixes all of these packages is usually easier and more consistent "
"with full-fledged package managers like conda."
msgstr ""
+"Embora o conda tenha sido originalmente criado para suportar pacotes "
+"Python, atualmente é usado em diversas linguagens. Esse suporte "
+"multilinguagem facilita que alguns pacotes incluam e acessem ferramentas "
+"escritas em outras linguagens, como C/C++ (gdal), Julia ou R. Criar um "
+"ambiente que combine todos esses pacotes costuma ser mais fácil e "
+"consistente com gerenciadores de pacotes completos como o conda."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:89
msgid "conda channels"
-msgstr ""
+msgstr "canais conda"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:91
msgid ""
@@ -1973,12 +2995,17 @@ msgid ""
"channels. The conda package manager can install packages from different "
"channels."
msgstr ""
+"Os pacotes compilados com conda ficam armazenados em repositórios "
+"chamados canais. O gerenciador de pacotes conda pode instalar pacotes de "
+"diferentes canais."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:94
msgid ""
"There are several core public channels that most people use to install "
"packages using conda, including:"
msgstr ""
+"Existem alguns canais públicos principais que a maioria das pessoas usa "
+"para instalar pacotes com conda, incluindo:"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:97
msgid ""
@@ -1987,6 +3014,10 @@ msgid ""
"Distribution. Anaconda (the company) decides what packages live on the "
"`defaults` channel."
msgstr ""
+"**defaults:** este é um canal gerenciado pela Anaconda. É a versão dos "
+"pacotes Python que você instalará caso instale a Anaconda Distribution. A"
+" Anaconda (a empresa) decide quais pacotes ficam disponíveis no canal "
+"`defaults`."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:98
msgid ""
@@ -1995,18 +3026,26 @@ msgid ""
"tools that support geospatial data. Anyone can publish a package to this "
"channel."
msgstr ""
+"[**conda-forge:**](https://conda-forge.org/) este é um canal mantido pela"
+" comunidade que tem foco em pacotes científicos. Esse canal é ideal para "
+"ferramentas que dão suporte a dados geoespaciais. Qualquer pessoa pode "
+"publicar um pacote nesse canal."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:99
msgid ""
"[**bioconda**](https://bioconda.github.io/): this channel focuses on "
"biomedical tools."
msgstr ""
+"[**bioconda**](https://bioconda.github.io/): este canal tem foco em "
+"ferramentas biomédicas."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:101
msgid ""
"**conda-forge** emerged as many of the scientific packages did not exist "
"in the `defaults` Anaconda channel."
msgstr ""
+"O **conda-forge** surgiu porque muitos dos pacotes científicos não "
+"existiam no canal `defaults` da Anaconda."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:106
msgid ""
@@ -2019,6 +3058,15 @@ msgid ""
"says PyPI servers. PyPI - anyone can publish to PyPI. And test PyPI. A "
"testbed server for you to practice."
msgstr ""
+"Gráfico com o título Repositórios de pacotes Python. Abaixo dele está "
+"escrito Qualquer coisa hospedada no PyPI pode ser instalada usando pip "
+"install. Pacotes hospedados em um canal conda podem ser instalados usando"
+" conda install. Abaixo disso há duas linhas. A linha de cima diz canais "
+"conda. Ao lado dela há três caixas, uma com conda-forge, mantido pela "
+"comunidade; bioconda e, em seguida, default - gerenciado pela equipe da "
+"anaconda. Abaixo disso há uma linha que diz servidores PyPI. PyPI - "
+"qualquer pessoa pode publicar no PyPI. E o test PyPI. Um servidor de "
+"testes para você praticar."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:108
msgid ""
@@ -2028,26 +3076,38 @@ msgid ""
"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
"there are no manual checks of packages submitted to PyPI."
msgstr ""
+"Os canais conda representam diversos repositórios a partir dos quais você"
+" pode instalar pacotes. Como o conda-forge é mantido pela comunidade, "
+"qualquer pessoa pode enviar uma receita para lá. O PyPI também é um "
+"repositório mantido pela comunidade. Qualquer pessoa pode enviar um "
+"pacote para o PyPI e o test PyPI. Diferentemente do conda-forge, não há "
+"verificações manuais dos pacotes enviados ao PyPI."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:111
msgid "conda channels, PyPI, conda, pip - Where to publish your package"
-msgstr ""
+msgstr "canais conda, PyPI, conda, pip - Onde publicar o seu pacote"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:113
msgid ""
"You might be wondering why there are different package repositories that "
"can be used to install Python packages."
msgstr ""
+"Você pode estar se perguntando por que existem diferentes repositórios de"
+" pacotes que podem ser usados para instalar pacotes Python."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:116
msgid ""
"And more importantly you are likely wondering how to pick the right "
"repository to publish your Python package."
msgstr ""
+"E, mais importante, você provavelmente está se perguntando como escolher "
+"o repositório certo para publicar o seu pacote Python."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:119
msgid "The answer to both questions relates dependency conflicts."
msgstr ""
+"A resposta para ambas as perguntas está relacionada a conflitos de "
+"dependências."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:123
msgid ""
@@ -2055,6 +3115,10 @@ msgid ""
"tools and installations. At the bottom is says - My python environment "
"has become so degraded that my laptop has been declared a superfund site."
msgstr ""
+"Imagem mostrando um quadrinho da XKCD que exibe uma teia de ambientes, "
+"ferramentas e instalações Python. Na parte de baixo diz - Meu ambiente "
+"Python se degradou tanto que meu laptop foi declarado uma área de "
+"contaminação tóxica."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:125
msgid ""
@@ -2065,10 +3129,17 @@ msgid ""
"pip to install everything. Or use conda. If you can, try to avoid "
"installing package from both pip and conda into the same environment."
msgstr ""
+"Instalar o Python e pacotes Python a partir de diferentes repositórios "
+"pode levar a conflitos de ambiente, em que a versão de um pacote não "
+"funciona com a versão de outro pacote. Para manter os seus ambientes "
+"limpos e funcionando, o melhor é instalar pacotes a partir do mesmo "
+"repositório. Então use o pip para instalar tudo. Ou use o conda. Se "
+"puder, tente evitar instalar pacotes tanto pelo pip quanto pelo conda no "
+"mesmo ambiente."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:133
msgid "Managing Python package dependency conflicts"
-msgstr ""
+msgstr "Gerenciando conflitos de dependências de pacotes Python"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:135
msgid ""
@@ -2079,12 +3150,20 @@ msgid ""
"contain packages installed from both pip and conda are more likely to "
"yield dependency conflicts."
msgstr ""
+"Ambientes Python podem apresentar conflitos porque as ferramentas Python "
+"podem ser instaladas a partir de diferentes repositórios. De modo geral, "
+"ambientes Python têm uma chance menor de conflitos de dependências quando"
+" as ferramentas são instaladas a partir do mesmo repositório de pacotes. "
+"Assim, ambientes que contêm pacotes instalados tanto pelo pip quanto pelo"
+" conda têm maior probabilidade de gerar conflitos de dependências."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:142
msgid ""
"Similarly installing packages from the default anaconda channel mixed "
"with the conda-forge channel can also lead to dependency conflicts."
msgstr ""
+"Da mesma forma, instalar pacotes do canal default da anaconda misturados "
+"com o canal conda-forge também pode levar a conflitos de dependências."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:144
msgid ""
@@ -2096,12 +3175,22 @@ msgid ""
"in the channel . Thus, `conda-forge` channel ensures that a broad suite "
"of user-developed community packages can be installed from conda."
msgstr ""
+"Muitos instalam pacotes diretamente do canal `defaults` do conda. No "
+"entanto, como esse canal é gerenciado pela Anaconda, os pacotes "
+"disponíveis nele são limitados àqueles que a Anaconda decide que devem "
+"fazer parte de uma instalação estável. O canal conda-forge foi criado "
+"para complementar o canal `defaults`. Ele permite que qualquer pessoa "
+"envie um pacote para ser publicado no canal. Assim, o canal `conda-forge`"
+" garante que um amplo conjunto de pacotes comunitários desenvolvidos por "
+"usuários possa ser instalado pelo conda."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:148
msgid ""
"Take-aways: If you can, publish on both PyPI and conda-forge to "
"accommodate more users of your package"
msgstr ""
+"Conclusões: Se puder, publique tanto no PyPI quanto no conda-forge para "
+"atender a mais usuários do seu pacote"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:150
msgid ""
@@ -2110,32 +3199,43 @@ msgid ""
"you should consider publishing to both PyPI and the conda-forge channel "
"(_more on that below_)."
msgstr ""
+"A conclusão aqui para os mantenedores é que, se você prevê que os "
+"usuários vão querer usar o conda para gerenciar seus ambientes locais (o "
+"que muitos fazem), você deveria considerar publicar tanto no PyPI quanto "
+"no canal conda-forge (_mais sobre isso abaixo_)."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:155
msgid "Additional resources"
-msgstr ""
+msgstr "Recursos adicionais"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:157
msgid ""
"[learn more about why conda-forge was created, here](https://conda-"
"forge.org/docs/user/introduction.html)"
msgstr ""
+"[saiba mais sobre por que o conda-forge foi criado, aqui](https://conda-"
+"forge.org/docs/user/introduction.html)"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:159
msgid ""
"[To learn more about conda terminology, check out their "
"glossary.](https://docs.conda.io/projects/conda/en/latest/glossary.html )"
msgstr ""
+"[Para saber mais sobre a terminologia do conda, confira o "
+"glossário.](https://docs.conda.io/projects/conda/en/latest/glossary.html "
+")"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:165
msgid "How to submit to conda-forge"
-msgstr ""
+msgstr "Como enviar para o conda-forge"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:167
msgid ""
"While pyOpenSci doesn't require you to add your package to conda-forge, "
"we encourage you to consider doing so!"
msgstr ""
+"Embora o pyOpenSci não exija que você adicione o seu pacote ao conda-"
+"forge, nós incentivamos que você considere fazer isso!"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:170
msgid ""
@@ -2144,20 +3244,28 @@ msgid ""
"provided by the conda-forge maintainer team.](https://conda-"
"forge.org/docs/maintainer/adding_pkgs.html)."
msgstr ""
+"Depois que o seu pacote estiver no PyPI, o processo para adicioná-lo ao "
+"conda-forge é simples de fazer. [Você pode seguir os passos detalhados "
+"fornecidos pela equipe de mantenedores do conda-forge.](https://conda-"
+"forge.org/docs/maintainer/adding_pkgs.html)."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:174
msgid "Click here for a tutorial on adding your package to conda-forge."
msgstr ""
+"Clique aqui para ver um tutorial sobre como adicionar o seu pacote ao "
+"conda-forge."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:181
msgid "If you want a step by step tutorial, click here."
-msgstr ""
+msgstr "Se você quer um tutorial passo a passo, clique aqui."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:183
msgid ""
"Once your package is added, you will have a feedstock repository on "
"GitHub with your packages name"
msgstr ""
+"Depois que o seu pacote for adicionado, você terá um repositório "
+"feedstock no GitHub com o nome do seu pacote"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:186
msgid ""
@@ -2165,10 +3273,13 @@ msgid ""
"package - movingpandas](https://github.com/conda-forge/movingpandas-"
"feedstock)"
msgstr ""
+"[Aqui está um exemplo de feedstock do conda-forge para o pacote aprovado "
+"pelo pyOpenSci - movingpandas](https://github.com/conda-forge"
+"/movingpandas-feedstock)"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:189
msgid "Maintaining your conda-forge package repository"
-msgstr ""
+msgstr "Mantendo o repositório do seu pacote no conda-forge"
#: ../../package-structure-code/publish-python-package-pypi-conda.md:191
msgid ""
@@ -2178,6 +3289,11 @@ msgid ""
" in the conda-forge repository. Once that build is complete, you will get"
" a notification to review the update."
msgstr ""
+"Depois que o seu pacote estiver no canal conda-forge, mantê-lo é simples."
+" Toda vez que você envia uma nova versão do seu pacote para o PyPI, isso "
+"dispara uma build de integração contínua que atualiza o seu pacote no "
+"repositório do conda-forge. Quando essa build for concluída, você "
+"receberá uma notificação para revisar a atualização."
#: ../../package-structure-code/publish-python-package-pypi-conda.md:197
msgid ""
@@ -2187,14 +3303,21 @@ msgid ""
"file found in the pull request match the PyPI metadata of the new "
"release."
msgstr ""
+"Você pode fazer o merge do pull request dessa atualização assim que "
+"estiver satisfeito com ele. Um PR pronto para merge geralmente significa "
+"garantir que as dependências do seu projeto (conhecidas como requisitos "
+"de execução) listadas no arquivo YAML atualizado encontrado no pull "
+"request correspondam aos metadados do PyPI da nova versão."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:2
msgid "Use a pyproject.toml file for your package configuration & metadata"
msgstr ""
+"Use um arquivo pyproject.toml para a configuração e os metadados do seu "
+"pacote"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:4
msgid "pyproject.toml takeaways"
-msgstr ""
+msgstr "Conclusões sobre o pyproject.toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:6
msgid ""
@@ -2202,18 +3325,25 @@ msgid ""
"package: **[build-system]** and **[project]**. The **[project]** table "
"stores your package's metadata."
msgstr ""
+"Há apenas duas tabelas que são obrigatórias para um pacote Python "
+"instalável: **[build-system]** e **[project]**. A tabela **[project]** "
+"armazena os metadados do seu pacote."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:7
msgid ""
"There are two _required_ fields in the **[project]** table: **name=** and"
" **version=**."
msgstr ""
+"Há dois campos _obrigatórios_ na tabela **[project]**: **name=** e "
+"**version=**."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:8
msgid ""
"Add metadata to the classifiers section of your `pyproject.toml` file to "
"make it easier for users to find your project on PyPI."
msgstr ""
+"Adicione metadados à seção classifiers do seu arquivo `pyproject.toml` "
+"para facilitar que os usuários encontrem o seu projeto no PyPI."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:9
msgid ""
@@ -2222,6 +3352,10 @@ msgid ""
"invalid value here will raise an error when you build your package or "
"publish to PyPI."
msgstr ""
+"Ao adicionar classifiers à tabela [project], use apenas valores válidos "
+"da [página de classifiers do PyPI](https://PyPI.org/classifiers/). Um "
+"valor inválido aqui gerará um erro quando você fizer a build do seu "
+"pacote ou publicar no PyPI."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:10
msgid ""
@@ -2230,26 +3364,34 @@ msgid ""
"example `requires =` always need to be associated with the **[build-"
"system]** table."
msgstr ""
+"Não há uma ordem específica para as tabelas no arquivo `pyproject.toml`. "
+"No entanto, os campos precisam ser colocados nas seções de tabela "
+"corretas. Por exemplo, `requires =` sempre precisa estar associado à "
+"tabela **[build-system]**."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:16
msgid "when these are published, remove this todo"
-msgstr ""
+msgstr "quando estes forem publicados, remova este todo"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:25
msgid ""
"Need help creating your pyproject.toml file? This tutorial will walk you"
" through the process."
msgstr ""
+"Precisa de ajuda para criar o seu arquivo pyproject.toml? Este tutorial "
+"vai guiar você pelo processo."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:39
msgid ""
"Click here if need help migrating from setup.py/setup.cfg to "
"pyproject.toml"
msgstr ""
+"Clique aqui se precisar de ajuda para migrar de setup.py/setup.cfg para "
+"pyproject.toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:50
msgid "About the pyproject.toml file"
-msgstr ""
+msgstr "Sobre o arquivo pyproject.toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:52
msgid ""
@@ -2257,6 +3399,9 @@ msgid ""
"pure Python packages, this file replaces the `setup.py` and/or "
"`setup.cfg` file to describe project metadata."
msgstr ""
+"Todo pacote Python moderno deveria incluir um arquivo `pyproject.toml`. "
+"Para pacotes Python puros, esse arquivo substitui o arquivo `setup.py` "
+"e/ou `setup.cfg` para descrever os metadados do projeto."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:54
msgid ""
@@ -2264,10 +3409,14 @@ msgid ""
"file to build the non-Python extensions. However, a `pyproject.toml` file"
" should still be used to store your project’s metadata."
msgstr ""
+"Se o seu projeto não for Python puro, você ainda pode precisar de um "
+"arquivo `setup.py` para fazer a build das extensões não Python. No "
+"entanto, um arquivo `pyproject.toml` ainda deve ser usado para armazenar "
+"os metadados do seu projeto."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:56
msgid "Tutorial"
-msgstr ""
+msgstr "Tutorial"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:59
msgid ""
@@ -2277,10 +3426,15 @@ msgid ""
"**pyproject.toml**](https://packaging.python.org/en/latest/specifications"
"/declaring-project-metadata/)"
msgstr ""
+"Se você está migrando de um arquivo **setup.py** ou **setup.cfg** e quer "
+"ajuda, [confira este tutorial.](migrate-pyproj) [especificar requisitos "
+"de build e metadados é chamado de "
+"**pyproject.toml**](https://packaging.python.org/en/latest/specifications"
+"/declaring-project-metadata/)"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:64
msgid "About the .toml format"
-msgstr ""
+msgstr "Sobre o formato .toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:66
msgid ""
@@ -2290,24 +3444,32 @@ msgid ""
"contains a `[table identifier]`. Below that table identifier are "
"key/value pairs that support configuration for that particular table."
msgstr ""
+"O arquivo **pyproject.toml** é escrito no [formato TOML (Tom's Obvious, "
+"Minimal Language)](https://toml.io/en/). O TOML é uma estrutura fácil de "
+"ler baseada em pares chave/valor. Cada seção no arquivo "
+"**pyproject.toml** contém um `[identificador de tabela]`. Abaixo desse "
+"identificador de tabela estão os pares chave/valor que dão suporte à "
+"configuração daquela tabela específica."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:70
msgid "Below `[build-system]` is considered a table in the toml language."
-msgstr ""
+msgstr "Abaixo, `[build-system]` é considerado uma tabela na linguagem toml."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:71
msgid "Within the `build-system` table, `requires =` is a key."
-msgstr ""
+msgstr "Dentro da tabela `build-system`, `requires =` é uma chave."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:72
msgid ""
"The associated value for `requires` is an array containing the value "
"`\"hatchling\"`."
msgstr ""
+"O valor associado a `requires` é um array contendo o valor "
+"`\"hatchling\"`."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:80
msgid "How the pyproject.toml is used when you build a package"
-msgstr ""
+msgstr "Como o pyproject.toml é usado quando você faz a build de um pacote"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:84
msgid ""
@@ -2323,6 +3485,18 @@ msgid ""
"distribution file that allows PyPI to read the metadata and print it out "
"on their website."
msgstr ""
+"Quando você publica no PyPI, vai notar que cada pacote tem metadados "
+"listados. Vamos dar uma olhada no "
+"[xclim](https://pypi.org/project/xclim/), um dos nossos [pacotes do "
+"pyOpenSci](https://www.pyopensci.org/python-packages.html). Note que na "
+"página inicial do PyPI você vê alguns metadados sobre o pacote, incluindo"
+" python, informações do mantenedor e mais. O PyPI consegue preencher "
+"esses metadados porque eles foram definidos usando a sintaxe e os "
+"classifiers corretos pelos mantenedores do Xclim, [arquivo "
+"pyproject.toml](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml)."
+" Esses metadados, quando o pacote xclim é construído, são traduzidos em "
+"um arquivo de distribuição que permite ao PyPI ler os metadados e exibi-"
+"los no site deles."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:86
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:82
@@ -2333,6 +3507,11 @@ msgid ""
"language, operating system, programming language and topic. Below each of"
" those sections are various classifier options.\" width=\"300px\">"
msgstr ""
+"Imagem mostrando a barra lateral esquerda do PyPI para o pacote xclim. A "
+"seção no topo diz Classifier. Abaixo há uma lista de itens incluindo "
+"Status de desenvolvimento, público-alvo, Licença, idioma natural, sistema"
+" operacional, linguagem de programação e tópico. Abaixo de cada uma "
+"dessas seções estão várias opções de classifier.\" width=\"300px\">"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:91
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:87
@@ -2343,10 +3522,16 @@ msgid ""
"classifiers also allow users to sort through packages by version of "
"python they support, categories and more."
msgstr ""
+"Quando você adiciona a seção classifier ao seu pyproject.toml e o seu "
+"pacote é construído, a ferramenta de build organiza os metadados em um "
+"formato que o PyPI consegue entender e representar na página inicial do "
+"seu pacote no PyPI. Esses classifiers também permitem que os usuários "
+"filtrem os pacotes pela versão do python que eles suportam, categorias e "
+"mais."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:96
msgid "Benefits of using a pyproject.toml file"
-msgstr ""
+msgstr "Benefícios de usar um arquivo pyproject.toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:98
msgid ""
@@ -2354,10 +3539,13 @@ msgid ""
"**pyproject.toml** format also allows someone to view the project's "
"metadata in a GitHub repository."
msgstr ""
+"Incluir os metadados do seu pacote em um formato **pyproject.toml** "
+"separado e legível por humanos também permite que alguém visualize os "
+"metadados do projeto em um repositório do GitHub."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:101
msgid "Setup.py is still useful for complex package builds"
-msgstr ""
+msgstr "O Setup.py ainda é útil para builds de pacotes complexos"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:105
msgid ""
@@ -2369,10 +3557,17 @@ msgid ""
"complex builds, we will provide resources working with complex builds in "
"the future."
msgstr ""
+"Usar o **setup.py** para gerenciar builds e metadados de pacotes [pode "
+"causar problemas no desenvolvimento de "
+"pacotes](https://blog.ganssle.io/articles/2021/10/setup-py-"
+"deprecated.html). Em alguns casos em que a build de um pacote Python é "
+"complexa, um arquivo **setup.py** pode ser necessário. Embora este guia "
+"não cubra builds complexas, forneceremos recursos para trabalhar com "
+"builds complexas no futuro."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:111
msgid "Optional vs. required pyproject.toml file fields"
-msgstr ""
+msgstr "Campos opcionais vs. obrigatórios do arquivo pyproject.toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:113
msgid ""
@@ -2380,6 +3575,10 @@ msgid ""
"fields that you can use. Below we suggest specific fields to get you "
"started that support publication on PyPI and users finding your package."
msgstr ""
+"Quando você cria o seu arquivo `pyproject.toml`, há diversos campos de "
+"metadados que você pode usar. Abaixo, sugerimos campos específicos para "
+"você começar, que dão suporte à publicação no PyPI e ajudam os usuários a"
+" encontrar o seu pacote."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:115
msgid ""
@@ -2387,20 +3586,26 @@ msgid ""
"here.](https://packaging.python.org/en/latest/specifications/core-"
"metadata/#project-url-multiple-use)"
msgstr ""
+"[Uma visão geral de todos os elementos de metadados do projeto pode ser "
+"encontrada aqui.](https://packaging.python.org/en/latest/specifications"
+"/core-metadata/#project-url-multiple-use)"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:117
msgid "Required fields for the `[project]` table"
-msgstr ""
+msgstr "Campos obrigatórios para a tabela `[project]`"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:119
msgid ""
"As mentioned above, your `pyproject.toml` file needs to have a **`name`**"
" and **`version`** field in order to properly build your package:"
msgstr ""
+"Como mencionado acima, o seu arquivo `pyproject.toml` precisa ter um "
+"campo **`name`** e **`version`** para fazer a build do seu pacote "
+"corretamente:"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:121
msgid "`name`: This is the name of your project provided as a string"
-msgstr ""
+msgstr "`name`: Este é o nome do seu projeto fornecido como uma string"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:122
msgid ""
@@ -2408,10 +3613,13 @@ msgid ""
"tool for versioning (using git tags to determine versions), then the "
"version may be dynamic (more on that below)."
msgstr ""
+"`version`: Esta é a versão do seu projeto. Se você está usando uma "
+"ferramenta de SCM para versionamento (usando tags do git para determinar "
+"as versões), então a versão pode ser dinâmica (mais sobre isso abaixo)."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:124
msgid "Optional fields to include in the `[project]` table"
-msgstr ""
+msgstr "Campos opcionais para incluir na tabela `[project]`"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:126
msgid ""
@@ -2420,10 +3628,14 @@ msgid ""
"clear how your package is structured, what platforms you support and what"
" dependencies your package requires."
msgstr ""
+"Recomendamos fortemente que você também adicione as chaves de metadados "
+"abaixo, pois elas ajudarão os usuários a encontrar o seu pacote no PyPI. "
+"Esses campos deixarão claro como o seu pacote está estruturado, quais "
+"plataformas você suporta e quais dependências o seu pacote requer."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:131
msgid "**Description:** this is a short one-line description of your package."
-msgstr ""
+msgstr "**Description:** esta é uma breve descrição de uma linha do seu pacote."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:132
msgid ""
@@ -2431,6 +3643,9 @@ msgid ""
"description. This information will be published on your packages PyPI "
"landing page."
msgstr ""
+"**Readme:** Um link para o seu arquivo README.md é usado para a descrição"
+" longa. Essa informação será publicada na página inicial do seu pacote no"
+" PyPI."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:133
msgid ""
@@ -2438,10 +3653,13 @@ msgid ""
"Here you tell the installer whether you are using Python 2.x or 3.x. Most"
" projects will be using 3.x."
msgstr ""
+"**Requires-python** (usado pelo pip): este é um campo usado pelo pip. "
+"Aqui você informa ao instalador se está usando Python 2.x ou 3.x. A "
+"maioria dos projetos estará usando 3.x."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:134
msgid "**License:** the license you are using"
-msgstr ""
+msgstr "**License:** a licença que você está usando"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:135
msgid ""
@@ -2449,6 +3667,9 @@ msgid ""
" authors are different from the maintainers. Other times they might be "
"the same."
msgstr ""
+"**Authors:** estes são os autores originais do pacote. Às vezes os "
+"autores são diferentes dos mantenedores. Em outras ocasiões, podem ser os"
+" mesmos."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:136
msgid ""
@@ -2456,6 +3677,9 @@ msgid ""
" this using a list with a sub element for each author or maintainer name,"
" email"
msgstr ""
+"**Maintainers:** você pode escolher preencher isso ou não. Você pode "
+"preencher usando uma lista com um subelemento para o nome e e-mail de "
+"cada autor ou mantenedor"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:144
msgid ""
@@ -2465,6 +3689,11 @@ msgid ""
" declared in the pyproject.toml file will be installed by uv or pip when "
"your project is installed."
msgstr ""
+"**project.dependencies:** O grupo de dependências é opcional porque nem "
+"todos os pacotes requerem dependências. No entanto, se o seu projeto "
+"tiver dependências específicas, inclua esta seção no seu "
+"`pyproject.toml`. As dependências declaradas no arquivo pyproject.toml "
+"serão instaladas pelo uv ou pip quando o seu projeto for instalado."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:146
msgid ""
@@ -2474,6 +3703,12 @@ msgid ""
"specific features to your package that are not installed by default when "
"a user runs `uv sync` or `python -m pip install packagename`."
msgstr ""
+"**project.optional-dependencies:** Dependências opcionais ou de "
+"funcionalidade serão instaladas se alguém executar `python -m pip install"
+" projectname[feature]`. Use este array para declarar dependências que "
+"adicionam funcionalidades específicas ao seu pacote e que não são "
+"instaladas por padrão quando um usuário executa `uv sync` ou `python -m "
+"pip install packagename`."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:147
msgid ""
@@ -2487,6 +3722,15 @@ msgid ""
"here.](https://packaging.python.org/en/latest/specifications/dependency-"
"groups/)"
msgstr ""
+"**dependency-groups:** Os grupos de dependências organizam os pacotes e "
+"ferramentas que um colaborador ou desenvolvedor precisaria para trabalhar"
+" no seu pacote. Essas dependências podem incluir ferramentas para "
+"construir e executar testes, linters e formatadores de código. Esta é uma"
+" forma opcional, mas altamente recomendada, de organizar e instalar "
+"dependências. Esta seção pode substituir um arquivo requirements.txt. "
+"[Saiba mais sobre como adicioná-las ao seu pacote no guia da PyPA "
+"aqui.](https://packaging.python.org/en/latest/specifications/dependency-"
+"groups/)"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:148
msgid ""
@@ -2494,6 +3738,9 @@ msgid ""
"landing page. Think of them as words that people might use to search for "
"your package."
msgstr ""
+"**keywords:** Estas são as palavras-chave que aparecerão na página "
+"inicial do seu pacote no PyPI. Pense nelas como palavras que as pessoas "
+"poderiam usar para pesquisar o seu pacote."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:149
msgid ""
@@ -2503,26 +3750,31 @@ msgid ""
"here](https://PyPI.org/classifiers/). Some of the classifiers that you "
"should consider including"
msgstr ""
+"**classifiers:** A seção classifiers dos seus metadados também é "
+"importante para a página inicial do seu pacote no PyPI e para a filtragem"
+" de pacotes no PyPI. Uma lista com [todas as opções de classifiers pode "
+"ser encontrada aqui](https://PyPI.org/classifiers/). Alguns dos "
+"classifiers que você deveria considerar incluir"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:150
msgid "Development Status"
-msgstr ""
+msgstr "Status de Desenvolvimento"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:151
msgid "Intended Audience"
-msgstr ""
+msgstr "Público-alvo"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:152
msgid "Topic"
-msgstr ""
+msgstr "Tópico"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:153
msgid "Programming language"
-msgstr ""
+msgstr "Linguagem de programação"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:155
msgid "Advanced options in the pyproject.toml file"
-msgstr ""
+msgstr "Opções avançadas no arquivo pyproject.toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:157
msgid ""
@@ -2531,6 +3783,11 @@ msgid ""
"package, you may include an entry point to call that script directly at "
"the command line (rather than at the Python shell)."
msgstr ""
+"**`[project.scripts]` (Pontos de entrada):** Os pontos de entrada são "
+"opcionais. Se você tem uma ferramenta de linha de comando que executa um "
+"script específico hospedado no seu pacote, você pode incluir um ponto de "
+"entrada para chamar esse script diretamente na linha de comando (em vez "
+"de no shell do Python)."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:159
msgid ""
@@ -2540,6 +3797,11 @@ msgid ""
"perform sets of tasks. The pyOpenSci is using those scripts to process "
"their metadata."
msgstr ""
+"Aqui está um exemplo de [um pacote que tem script de ponto de "
+"entrada](https://github.com/pyOpenSci/pyosMeta/blob/main/pyproject.toml#L60)s."
+" Note que há vários scripts principais definidos nesse pacote que "
+"executam conjuntos de tarefas. O pyOpenSci está usando esses scripts para"
+" processar seus metadados."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:160
msgid ""
@@ -2548,11 +3810,15 @@ msgid ""
" using Git tags (SCM/version control-based versioning). Example: "
"**dynamic = [\"version\"]**"
msgstr ""
+"Use **Campos Dinâmicos** se você tem campos que são preenchidos "
+"dinamicamente. Por exemplo, você pode querer atualizar automaticamente a "
+"versão do seu pacote usando tags do Git (versionamento baseado em "
+"SCM/controle de versão). Exemplo: **dynamic = [\"version\"]**"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:162
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Add dependencies to your pyproject.toml file"
-msgstr ""
+msgstr "Adicione dependências ao seu arquivo pyproject.toml"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:164
msgid ""
@@ -2561,28 +3827,34 @@ msgid ""
"development dependencies and also configuration for tools such as pytest,"
" black, and others."
msgstr ""
+"O arquivo `pyproject.toml` é um substituto moderno para o arquivo "
+"`requirements.txt`, que tradicionalmente tem sido usado para armazenar "
+"dependências de desenvolvimento e também a configuração de ferramentas "
+"como pytest, black e outras."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:166
msgid ""
"To add development dependencies to your build, add a `[dependency-"
"groups]` array to your pyproject.toml file."
msgstr ""
+"Para adicionar dependências de desenvolvimento à sua build, adicione um "
+"array `[dependency-groups]` ao seu arquivo pyproject.toml."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:168
msgid "Then specify dependency groups as follows:"
-msgstr ""
+msgstr "Em seguida, especifique os grupos de dependências da seguinte forma:"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:176
msgid "Following the above example, you install dependencies like this:"
-msgstr ""
+msgstr "Seguindo o exemplo acima, você instala as dependências assim:"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:178
msgid "`python -m pip install -e .[tests]`"
-msgstr ""
+msgstr "`python -m pip install -e .[tests]`"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:180
msgid "pip install --group test _# requires pip 25.1 or greater_"
-msgstr ""
+msgstr "pip install --group test _# requer pip 25.1 ou superior_"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:182
msgid ""
@@ -2590,18 +3862,21 @@ msgid ""
"dependencies declared in the tests section of your `[project.optional-"
"dependencies]` table."
msgstr ""
+"O comando acima instalará tanto o seu pacote em modo editável quanto "
+"todas as dependências declaradas na seção tests da sua tabela `[project"
+".optional-dependencies]`."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:184
msgid "To install all dependencies and also your package, you'd use:"
-msgstr ""
+msgstr "Para instalar todas as dependências e também o seu pacote, você usaria:"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:186
msgid "`python -m pip install -e .[tests,lint,docs]`"
-msgstr ""
+msgstr "`python -m pip install -e .[tests,lint,docs]`"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:188
msgid "Recursive dependencies"
-msgstr ""
+msgstr "Dependências recursivas"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:192
msgid ""
@@ -2609,10 +3884,13 @@ msgid ""
"for more.](https://hynek.me/articles/python-recursive-optional-"
"dependencies/)"
msgstr ""
+"Você também pode configurar conjuntos de dependências recursivas. [Veja "
+"este post de blog para saber mais.](https://hynek.me/articles/python-"
+"recursive-optional-dependencies/)"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:195
msgid "Example pyproject.toml for building using hatchling"
-msgstr ""
+msgstr "Exemplo de pyproject.toml para build usando hatchling"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:197
msgid ""
@@ -2620,14 +3898,18 @@ msgid ""
"example package setup uses **hatchling** to build the [package's sdist "
"and wheels](python-package-distribution-files-sdist-wheel)."
msgstr ""
+"Abaixo está um exemplo de configuração de build para um projeto Python. "
+"Esta configuração de pacote de exemplo usa o **hatchling** para construir"
+" [as distribuições sdist e wheel do pacote](python-package-distribution-"
+"files-sdist-wheel)."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:205
msgid "Notice that dependencies are specified in this file."
-msgstr ""
+msgstr "Note que as dependências são especificadas neste arquivo."
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:207
msgid "Example pyproject.toml for building using setuptools"
-msgstr ""
+msgstr "Exemplo de pyproject.toml para build usando setuptools"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:209
msgid ""
@@ -2636,36 +3918,47 @@ msgid ""
"system (setuptools). Notice how simple it is to swap out the tools needed"
" to build this package!"
msgstr ""
+"Os metadados do pacote, incluindo autores, palavras-chave etc., também "
+"são fáceis de ler. Abaixo você pode ver o mesmo arquivo TOML que usa um "
+"sistema de build diferente (setuptools). Note como é simples trocar as "
+"ferramentas necessárias para construir este pacote!"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:213
msgid "In this example package setup you use:"
-msgstr ""
+msgstr "Nesta configuração de pacote de exemplo você usa:"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:215
msgid ""
"**setuptools** to build the [package's sdist and wheels](python-package-"
"distribution-files-sdist-wheel)"
msgstr ""
+"**setuptools** para construir [as distribuições sdist e wheel do pacote"
+"](python-package-distribution-files-sdist-wheel)"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:216
msgid ""
"**setuptools_scm** to manage package version updates using version "
"control tags"
msgstr ""
+"**setuptools_scm** para gerenciar as atualizações de versão do pacote "
+"usando tags de controle de versão"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:218
msgid ""
"In the example below `[build-system]` is the first table of values. It "
"has two keys that specify the build backend API and containing package:"
msgstr ""
+"No exemplo abaixo, `[build-system]` é a primeira tabela de valores. Ela "
+"tem duas chaves que especificam a API do backend de build e o pacote que "
+"a contém:"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:221
msgid "`requires =`"
-msgstr ""
+msgstr "`requires =`"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:222
msgid "`build-back-end =`"
-msgstr ""
+msgstr "`build-back-end =`"
#: ../../package-structure-code/pyproject-toml-python-package-metadata.md:229
msgid ""
@@ -2673,14 +3966,17 @@ msgid ""
"setuptools, Poetry and Hatch.](/package-structure-code/python-package-"
"build-tools)"
msgstr ""
+"[Clique aqui para ler sobre as nossas ferramentas de build de pacotes, "
+"incluindo PDM, setuptools, Poetry e Hatch.](/package-structure-code"
+"/python-package-build-tools)"
#: ../../package-structure-code/python-package-build-tools.md:1
msgid "Python Packaging Tools"
-msgstr ""
+msgstr "Ferramentas de packaging Python"
#: ../../package-structure-code/python-package-build-tools.md:4
msgid "Tools for building your package"
-msgstr ""
+msgstr "Ferramentas para construir o seu pacote"
#: ../../package-structure-code/python-package-build-tools.md:6
msgid ""
@@ -2692,6 +3988,13 @@ msgid ""
"tools that currently support packages with C/C++ and other language "
"extensions."
msgstr ""
+"Existem várias ferramentas de build diferentes que você pode usar para "
+"[criar as distribuições _sdist_ e _wheel_ do seu pacote Python](python-"
+"package-distribution-files-sdist-wheel). Abaixo, discutimos os recursos, "
+"benefícios e limitações das ferramentas de packaging Python mais "
+"comumente usadas. Neste guia, focamos em pacotes Python puros. No "
+"entanto, também destacamos ferramentas que atualmente dão suporte a "
+"pacotes com extensões em C/C++ e em outras linguagens."
#: ../../package-structure-code/python-package-build-tools.md:14
msgid ""
@@ -2702,6 +4005,13 @@ msgid ""
"Hatch are the tools we think beginners might appreciate most with Poetry "
"being a close second. Poetry is nice for pure Python projects."
msgstr ""
+"Diagrama de árvore de decisão mostrando as várias ferramentas de "
+"packaging de front-end e back-end. Você pode decidir qual ferramenta de "
+"packaging usar pensando em quais recursos você precisa. PDM e Hatch são "
+"atualmente as ferramentas mais flexíveis, pois também usam diferentes "
+"back-ends de build. Por isso, atualmente PDM e Hatch são as ferramentas "
+"que achamos que os iniciantes podem apreciar mais, com o Poetry em "
+"segundo lugar, bem próximo. O Poetry é bom para projetos Python puros."
#: ../../package-structure-code/python-package-build-tools.md:16
msgid ""
@@ -2711,6 +4021,12 @@ msgid ""
"understand the most populate tools in the ecosystem. Each tool has "
"different features as highlighted below."
msgstr ""
+"Diagrama mostrando as diferentes ferramentas de build de front-end "
+"disponíveis para uso no ecossistema de pacotes Python que você pode "
+"escolher. Selecionamos as ferramentas para incluir neste diagrama com "
+"base na pesquisa do PyPI, que nos ajudou a entender as ferramentas mais "
+"populares do ecossistema. Cada ferramenta tem recursos diferentes, "
+"conforme destacado abaixo."
#: ../../package-structure-code/python-package-build-tools.md:19
msgid ""
@@ -2718,10 +4034,13 @@ msgid ""
"written in other languages, [check out the page on complex package builds"
".](complex-python-package-builds)"
msgstr ""
+"Se você quer saber mais sobre pacotes Python que têm extensões escritas "
+"em outras linguagens, [confira a página sobre builds de pacotes complexos"
+".](complex-python-package-builds)"
#: ../../package-structure-code/python-package-build-tools.md:22
msgid "Tools that we review here"
-msgstr ""
+msgstr "Ferramentas que analisamos aqui"
#: ../../package-structure-code/python-package-build-tools.md:24
msgid ""
@@ -2729,6 +4048,9 @@ msgid ""
"popular packaging tools in the PyPA survey. You will learn more about the"
" following tools on this page:"
msgstr ""
+"Nesta seção, selecionamos ferramentas que apareceram como as ferramentas "
+"de packaging mais populares na pesquisa da PyPA. Você aprenderá mais "
+"sobre as seguintes ferramentas nesta página:"
#: ../../package-structure-code/python-package-build-tools.md:28
msgid ""
@@ -2736,30 +4058,33 @@ msgid ""
"build.readthedocs.io/en/stable/) + "
"[setuptools](https://setuptools.pypa.io/en/latest/)"
msgstr ""
+"[Twine](https://twine.readthedocs.io/en/stable/), [Build](https://pypa-"
+"build.readthedocs.io/en/stable/) + "
+"[setuptools](https://setuptools.pypa.io/en/latest/)"
#: ../../package-structure-code/python-package-build-tools.md:29
msgid "[Flit](https://flit.pypa.io/en/stable/)"
-msgstr ""
+msgstr "[Flit](https://flit.pypa.io/en/stable/)"
#: ../../package-structure-code/python-package-build-tools.md:30
msgid "[Hatch](https://hatch.pypa.io/latest/)"
-msgstr ""
+msgstr "[Hatch](https://hatch.pypa.io/latest/)"
#: ../../package-structure-code/python-package-build-tools.md:31
msgid "[PDM](https://pdm-project.org/latest/)"
-msgstr ""
+msgstr "[PDM](https://pdm-project.org/latest/)"
#: ../../package-structure-code/python-package-build-tools.md:32
msgid "[Poetry](https://python-poetry.org/docs/)"
-msgstr ""
+msgstr "[Poetry](https://python-poetry.org/docs/)"
#: ../../package-structure-code/python-package-build-tools.md:35
msgid "Summary of tools Hatch vs. PDM vs. Poetry (and setuptools)"
-msgstr ""
+msgstr "Resumo das ferramentas Hatch vs. PDM vs. Poetry (e setuptools)"
#: ../../package-structure-code/python-package-build-tools.md:37
msgid "If you are looking for a quick summary, read below."
-msgstr ""
+msgstr "Se você está procurando um resumo rápido, leia abaixo."
#: ../../package-structure-code/python-package-build-tools.md:39
msgid ""
@@ -2767,12 +4092,18 @@ msgid ""
"to build your package. Selecting a tool comes down to the features that "
"you are looking for in your workflow."
msgstr ""
+"Em geral, qualquer ferramenta moderna que você selecionar desta página "
+"será ótima para construir o seu pacote. A escolha de uma ferramenta se "
+"resume aos recursos que você está procurando no seu fluxo de trabalho."
#: ../../package-structure-code/python-package-build-tools.md:40
msgid ""
"We suggest that beginners start with a modern workflow tool like PDM as "
"opposed to navigating the complexities of setuptools."
msgstr ""
+"Sugerimos que os iniciantes comecem com uma ferramenta de fluxo de "
+"trabalho moderna como o PDM, em vez de lidar com as complexidades do "
+"setuptools."
#: ../../package-structure-code/python-package-build-tools.md:41
msgid ""
@@ -2782,14 +4113,19 @@ msgid ""
"Poetry will work well for pure-python builds! Poetry also has an active "
"discord where you can ask questions."
msgstr ""
+"Se você vai usar o Poetry (é a ferramenta mais popular e tem a melhor "
+"documentação), tome cuidado com as adições de dependências com limite "
+"superior e considere sobrescrever as dependências ao adicioná-las. Se "
+"você fizer isso, o Poetry funcionará bem para builds de Python puro! O "
+"Poetry também tem um discord ativo onde você pode tirar dúvidas."
#: ../../package-structure-code/python-package-build-tools.md:43
msgid "Below are some features that Hatch and PDM offer that Poetry does not."
-msgstr ""
+msgstr "Abaixo estão alguns recursos que o Hatch e o PDM oferecem e o Poetry não."
#: ../../package-structure-code/python-package-build-tools.md:45
msgid "PDM:"
-msgstr ""
+msgstr "PDM:"
#: ../../package-structure-code/python-package-build-tools.md:47
msgid ""
@@ -2798,18 +4134,22 @@ msgid ""
"complex Python builds as it supports meson-python and other build "
"backends."
msgstr ""
+"Dá suporte a outros back-ends, tornando-o ideal para builds que não são "
+"de Python puro. Isso significa que o PDM é uma ótima opção tanto para "
+"builds de Python puro quanto para builds Python mais complexas, pois dá "
+"suporte ao meson-python e a outros backends de build."
#: ../../package-structure-code/python-package-build-tools.md:48
msgid "Offers flexibility in dependency management which we like"
-msgstr ""
+msgstr "Oferece flexibilidade no gerenciamento de dependências, o que apreciamos"
#: ../../package-structure-code/python-package-build-tools.md:49
msgid "Offers lock files if you need them"
-msgstr ""
+msgstr "Oferece arquivos de lock (bloqueio) caso você precise deles"
#: ../../package-structure-code/python-package-build-tools.md:51
msgid "Hatch:"
-msgstr ""
+msgstr "Hatch:"
#: ../../package-structure-code/python-package-build-tools.md:53
msgid ""
@@ -2817,6 +4157,9 @@ msgid ""
"Python versions. If this feature is important to you, then Hatch is a "
"clear winner."
msgstr ""
+"Oferece gerenciamento de ambientes em matriz que permite executar testes "
+"em diferentes versões do Python. Se esse recurso é importante para você, "
+"então o Hatch é o vencedor claro."
#: ../../package-structure-code/python-package-build-tools.md:54
msgid ""
@@ -2824,10 +4167,13 @@ msgid ""
"you are looking to reduce the number of tools in your workflow, Hatch "
"might be for you."
msgstr ""
+"Oferece uma ferramenta semelhante ao Nox / Makefile para otimizar o seu "
+"fluxo de trabalho de build. Se você está buscando reduzir o número de "
+"ferramentas no seu fluxo de trabalho, o Hatch pode ser para você."
#: ../../package-structure-code/python-package-build-tools.md:57
msgid "Build front-end vs. build back-end tools"
-msgstr ""
+msgstr "Ferramentas de front-end de build vs. back-end de build"
#: ../../package-structure-code/python-package-build-tools.md:59
msgid ""
@@ -2835,10 +4181,13 @@ msgid ""
"package, it's important to first understand the difference between a "
"build tool front-end and build back-end."
msgstr ""
+"Para entender melhor as suas opções quando se trata de construir um "
+"pacote Python, é importante primeiro entender a diferença entre uma "
+"ferramenta de front-end de build e uma de back-end de build."
#: ../../package-structure-code/python-package-build-tools.md:64
msgid "Build back-ends"
-msgstr ""
+msgstr "Back-ends de build"
#: ../../package-structure-code/python-package-build-tools.md:66
msgid ""
@@ -2849,6 +4198,13 @@ msgid ""
"package build that does not have extensions that are written in another "
"programming language (such as `C` or `C++`)."
msgstr ""
+"A maioria das ferramentas de packaging tem uma ferramenta de build de "
+"back-end que constrói o seu pacote e cria os [arquivos de distribuição "
+"(sdist e wheel)](python-package-distribution-files-sdist-wheel) "
+"associados. Algumas ferramentas, como o **Flit**, dão suporte apenas a "
+"builds de pacotes de Python puro. Uma build de Python puro refere-se a "
+"uma build de pacote que não tem extensões escritas em outra linguagem de "
+"programação (como `C` ou `C++`)."
#: ../../package-structure-code/python-package-build-tools.md:73
msgid ""
@@ -2859,10 +4215,17 @@ msgid ""
"is particularly complex (i.e. you have more than a few `C`/`C++` "
"extensions), then we suggest you use **meson.build** or **scikit-build**."
msgstr ""
+"Outros pacotes que têm extensões em C e C++ (ou que encapsulam outras "
+"linguagens como fortran) requerem etapas adicionais de compilação de "
+"código ao serem construídos. Back-ends como **setuptools.build**, "
+"**meson.build** e **scikit-build** dão suporte a builds complexas com "
+"etapas personalizadas. Se a sua build for particularmente complexa (ou "
+"seja, você tem mais do que algumas poucas extensões `C`/`C++`), então "
+"sugerimos que você use o **meson.build** ou o **scikit-build**."
#: ../../package-structure-code/python-package-build-tools.md:79
msgid "Python package build front-ends"
-msgstr ""
+msgstr "Front-ends de build de pacotes Python"
#: ../../package-structure-code/python-package-build-tools.md:81
msgid ""
@@ -2870,36 +4233,45 @@ msgid ""
"to perform common packaging tasks using similar commands. These tasks "
"include:"
msgstr ""
+"Uma ferramenta de front-end de packaging refere-se a uma ferramenta que "
+"facilita a execução de tarefas comuns de packaging usando comandos "
+"semelhantes. Essas tarefas incluem:"
#: ../../package-structure-code/python-package-build-tools.md:84
msgid ""
"[Build your packages (create the sdist and wheel distributions)](python-"
"package-distribution-files-sdist-wheel)"
msgstr ""
+"[Construir os seus pacotes (criar as distribuições sdist e wheel"
+")](python-package-distribution-files-sdist-wheel)"
#: ../../package-structure-code/python-package-build-tools.md:85
msgid ""
"Installing your package in a development mode (so it updates when you "
"update your code)"
msgstr ""
+"Instalar o seu pacote em modo de desenvolvimento (para que ele seja "
+"atualizado quando você atualizar o seu código)"
#: ../../package-structure-code/python-package-build-tools.md:86
msgid "Publishing to PyPI"
-msgstr ""
+msgstr "Publicar no PyPI"
#: ../../package-structure-code/python-package-build-tools.md:87
msgid "Running tests"
-msgstr ""
+msgstr "Executar testes"
#: ../../package-structure-code/python-package-build-tools.md:88
msgid "Building documentation"
-msgstr ""
+msgstr "Construir documentação"
#: ../../package-structure-code/python-package-build-tools.md:89
msgid ""
"Managing an environment or multiple environments in which you need to run"
" tests and develop your package"
msgstr ""
+"Gerenciar um ambiente ou múltiplos ambientes nos quais você precisa "
+"executar testes e desenvolver o seu pacote"
#: ../../package-structure-code/python-package-build-tools.md:91
msgid ""
@@ -2907,6 +4279,10 @@ msgid ""
" builds. Each front-end tool discussed below supports a slightly "
"different set of Python packaging tasks."
msgstr ""
+"Existem várias ferramentas de packaging Python que você pode usar para "
+"builds de Python puro. Cada ferramenta de front-end discutida abaixo dá "
+"suporte a um conjunto ligeiramente diferente de tarefas de packaging "
+"Python."
#: ../../package-structure-code/python-package-build-tools.md:95
msgid ""
@@ -2918,6 +4294,15 @@ msgid ""
"build your package's sdist and wheel distribution files, then you can "
"stick with PyPA's Build. You'd then use Twine to publish to PyPI."
msgstr ""
+"Por exemplo, você pode usar as ferramentas de packaging **Flit**, "
+"**Hatch** ou **PDM** tanto para construir quanto para publicar o seu "
+"pacote no PyPI. No entanto, embora o **Hatch** e o **PDM** deem suporte a"
+" versionamento e gerenciamento de ambientes, o **Flit** não dá. Se você "
+"quer uma ferramenta que dê suporte ao bloqueio de dependências, você pode"
+" usar o **PDM** ou o **Poetry**, mas não o **Hatch**. Se você só precisa "
+"construir os arquivos de distribuição sdist e wheel do seu pacote, então "
+"você pode ficar com o Build da PyPA. Aí você usaria o Twine para publicar"
+" no PyPI."
#: ../../package-structure-code/python-package-build-tools.md:102
msgid ""
@@ -2925,24 +4310,33 @@ msgid ""
"front-end that performs multiple tasks. You will need to use **build** to"
" build your package and **twine** to publish to PyPI."
msgstr ""
+"Se você está usando o **Setuptools**, não há um front-end de build padrão"
+" e amigável que execute múltiplas tarefas. Você precisará usar o "
+"**build** para construir o seu pacote e o **twine** para publicar no "
+"PyPI."
#: ../../package-structure-code/python-package-build-tools.md:105
msgid "Example build steps that can be simplified using a front-end tool"
msgstr ""
+"Exemplo de etapas de build que podem ser simplificadas usando uma "
+"ferramenta de front-end"
#: ../../package-structure-code/python-package-build-tools.md:107
msgid ""
"Below, you can see how a build tool streamlines your packaging "
"experience. Example to build your package with **Hatch**:"
msgstr ""
+"Abaixo, você pode ver como uma ferramenta de build otimiza a sua "
+"experiência de packaging. Exemplo para construir o seu pacote com o "
+"**Hatch**:"
#: ../../package-structure-code/python-package-build-tools.md:117
msgid "Example build steps using the **setuptools** back-end and **build**:"
-msgstr ""
+msgstr "Exemplo de etapas de build usando o back-end **setuptools** e o **build**:"
#: ../../package-structure-code/python-package-build-tools.md:127
msgid "Choosing a build back-end"
-msgstr ""
+msgstr "Escolhendo um back-end de build"
#: ../../package-structure-code/python-package-build-tools.md:129
msgid ""
@@ -2951,22 +4345,31 @@ msgid ""
"For pure Python packages, the main difference between the different build"
" back-ends discussed below is:"
msgstr ""
+"A maioria das ferramentas de packaging de front-end tem a sua própria "
+"ferramenta de build de back-end. A ferramenta de build cria os arquivos "
+"de distribuição (sdist e wheel) do seu pacote. Para pacotes de Python "
+"puro, a principal diferença entre os diferentes back-ends de build "
+"discutidos abaixo é:"
#: ../../package-structure-code/python-package-build-tools.md:134
msgid ""
"How configurable they are - for example, do they allow you to add build "
"steps that support non python extensions?"
msgstr ""
+"O quão configuráveis eles são - por exemplo, eles permitem que você "
+"adicione etapas de build que dão suporte a extensões não Python?"
#: ../../package-structure-code/python-package-build-tools.md:135
msgid ""
"How much you need to configure them to ensure the correct files are "
"included in your sdist and wheel distributions."
msgstr ""
+"O quanto você precisa configurá-los para garantir que os arquivos "
+"corretos sejam incluídos nas suas distribuições sdist e wheel."
#: ../../package-structure-code/python-package-build-tools.md:137
msgid "Build back-end support for non pure-python packages"
-msgstr ""
+msgstr "Suporte de back-end de build para pacotes que não são de Python puro"
#: ../../package-structure-code/python-package-build-tools.md:139
msgid ""
@@ -2974,20 +4377,25 @@ msgid ""
" only support pure Python builds. Other back-ends support C and C++ "
"extensions as follows:"
msgstr ""
+"É importante observar que alguns back-ends de build, como o **Flit-"
+"core**, dão suporte apenas a builds de Python puro. Outros back-ends dão "
+"suporte a extensões em C e C++ da seguinte forma:"
#: ../../package-structure-code/python-package-build-tools.md:142
msgid "setuptools supports builds using C / C++ extensions"
-msgstr ""
+msgstr "o setuptools dá suporte a builds usando extensões em C / C++"
#: ../../package-structure-code/python-package-build-tools.md:143
msgid ""
"Hatchling (hatch's back-end) supports C / C++ extensions via plugins that"
" the developer creates to customize a build"
msgstr ""
+"O Hatchling (o back-end do hatch) dá suporte a extensões em C / C++ por "
+"meio de plugins que o desenvolvedor cria para personalizar uma build"
#: ../../package-structure-code/python-package-build-tools.md:144
msgid "PDM's back-end supports C / C++ extensions by using setuptools"
-msgstr ""
+msgstr "O back-end do PDM dá suporte a extensões em C / C++ usando o setuptools"
#: ../../package-structure-code/python-package-build-tools.md:145
msgid ""
@@ -2995,16 +4403,22 @@ msgid ""
" currently undocumented. As such we don't recommend using Poetry for "
"complex or non pure Python builds until it is documented."
msgstr ""
+"O back-end do Poetry dá suporte a extensões em C/C++, no entanto essa "
+"funcionalidade atualmente não é documentada. Por isso, não recomendamos "
+"usar o Poetry para builds complexas ou que não sejam de Python puro até "
+"que ela seja documentada."
#: ../../package-structure-code/python-package-build-tools.md:147
msgid ""
"While we won't discuss more complex builds below, we will identify which "
"tools have documented support for C / C++ extensions."
msgstr ""
+"Embora não discutamos builds mais complexas abaixo, identificaremos quais"
+" ferramentas têm suporte documentado para extensões em C / C++."
#: ../../package-structure-code/python-package-build-tools.md:150
msgid "An ecosystem of Python build tools"
-msgstr ""
+msgstr "Um ecossistema de ferramentas de build Python"
#: ../../package-structure-code/python-package-build-tools.md:152
msgid ""
@@ -3012,10 +4426,14 @@ msgid ""
"build front-end tools. We highlight the features that each tool offers as"
" a way to help you decide what tool might be best for your workflow."
msgstr ""
+"Abaixo, apresentamos várias das ferramentas de front-end de build de "
+"packaging Python mais comumente usadas. Destacamos os recursos que cada "
+"ferramenta oferece como uma forma de ajudar você a decidir qual "
+"ferramenta pode ser a melhor para o seu fluxo de trabalho."
#: ../../package-structure-code/python-package-build-tools.md:156
msgid "We do not suggest using setuptools"
-msgstr ""
+msgstr "Não sugerimos usar o setuptools"
#: ../../package-structure-code/python-package-build-tools.md:159
msgid ""
@@ -3023,12 +4441,17 @@ msgid ""
" setuptools because setuptools will require some additional knowledge to "
"set up correctly."
msgstr ""
+"Sugerimos que você escolha uma das ferramentas modernas listadas acima em"
+" vez do setuptools, porque o setuptools exigirá algum conhecimento "
+"adicional para ser configurado corretamente."
#: ../../package-structure-code/python-package-build-tools.md:163
msgid ""
"We review setuptools as a back-end because it is still popular. However "
"it is not the most user friendly option."
msgstr ""
+"Analisamos o setuptools como um back-end porque ele ainda é popular. No "
+"entanto, não é a opção mais amigável."
#: ../../package-structure-code/python-package-build-tools.md:167
msgid ""
@@ -3036,12 +4459,18 @@ msgid ""
"(with build) and Poetry (a front end tool with numerous features and "
"excellent documentation)."
msgstr ""
+"As ferramentas mais comumente usadas no ecossistema são o back-end "
+"setuptools (com o build) e o Poetry (uma ferramenta de front-end com "
+"diversos recursos e excelente documentação)."
#: ../../package-structure-code/python-package-build-tools.md:173
msgid ""
"Graph showing the results of the 2022 PyPA survey of Python packaging "
"tools. On the x axis is percent response and on the y axis are the tools."
msgstr ""
+"Gráfico mostrando os resultados da pesquisa de 2022 da PyPA sobre "
+"ferramentas de packaging Python. No eixo x está a porcentagem de "
+"respostas e no eixo y estão as ferramentas."
#: ../../package-structure-code/python-package-build-tools.md:175
msgid ""
@@ -3054,52 +4483,63 @@ msgid ""
"heavily represented by those in web development. So this represents a "
"snapshot across the broader Python ecosystem."
msgstr ""
+"Os resultados da pesquisa com desenvolvedores Python (n=>8.000 usuários "
+"do PyPI) mostram o setuptools e o poetry como as ferramentas de packaging"
+" Python mais comumente usadas. As principais ferramentas que vimos sendo "
+"usadas na comunidade científica estão incluídas aqui. [Você pode ver os "
+"resultados completos da pesquisa clicando "
+"aqui.](https://drive.google.com/file/d/1U5d5SiXLVkzDpS0i1dJIA4Hu5Qg704T9/view)"
+" NOTA: estes dados representam mantenedores de diversos domínios e "
+"provavelmente são fortemente representados por pessoas do desenvolvimento"
+" web. Portanto, isto representa um panorama de todo o ecossistema Python."
#: ../../package-structure-code/python-package-build-tools.md:178
msgid "Chose a build workflow tool"
-msgstr ""
+msgstr "Escolha uma ferramenta de fluxo de trabalho de build"
#: ../../package-structure-code/python-package-build-tools.md:180
msgid "The tools that we review below include:"
-msgstr ""
+msgstr "As ferramentas que analisamos abaixo incluem:"
#: ../../package-structure-code/python-package-build-tools.md:182
msgid "Twine, Build + setuptools"
-msgstr ""
+msgstr "Twine, Build + setuptools"
#: ../../package-structure-code/python-package-build-tools.md:183
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:294
#: ../../package-structure-code/python-package-build-tools.md:307
msgid "Flit"
-msgstr ""
+msgstr "Flit"
#: ../../package-structure-code/python-package-build-tools.md:184
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:336
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "Hatch"
-msgstr ""
+msgstr "Hatch"
#: ../../package-structure-code/python-package-build-tools.md:185
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:233
#: ../../package-structure-code/python-package-build-tools.md:254
msgid "PDM"
-msgstr ""
+msgstr "PDM"
#: ../../package-structure-code/python-package-build-tools.md:186
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:380
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Poetry"
-msgstr ""
+msgstr "Poetry"
#: ../../package-structure-code/python-package-build-tools.md:188
msgid ""
"When you are selecting a tool, you might consider this general workflow "
"of questions:"
msgstr ""
+"Ao selecionar uma ferramenta, você pode considerar este fluxo geral de "
+"perguntas:"
#: ../../package-structure-code/python-package-build-tools.md:191
msgid ""
@@ -3107,10 +4547,13 @@ msgid ""
"Pick the tool that has the features that you want to use in your build "
"workflow. We suggest:"
msgstr ""
+"**O seu pacote é Python puro? Sim?** Você pode usar qualquer ferramenta "
+"que quiser! Escolha a ferramenta que tem os recursos que você quer usar "
+"no seu fluxo de trabalho de build. Sugerimos:"
#: ../../package-structure-code/python-package-build-tools.md:193
msgid "Flit, Hatch, PDM or Poetry (read below for more)"
-msgstr ""
+msgstr "Flit, Hatch, PDM ou Poetry (leia abaixo para saber mais)"
#: ../../package-structure-code/python-package-build-tools.md:195
msgid ""
@@ -3121,6 +4564,13 @@ msgid ""
"workflow. PDM supports other back-ends such as scikit-build and meson-"
"python that will allow you to fully customize your package's build."
msgstr ""
+"**O seu pacote tem algumas extensões em C ou C++?** Ótimo, sugerimos usar"
+" o **PDM** por enquanto. É a única ferramenta da lista abaixo que tem "
+"tanto um fluxo de trabalho documentado para dar suporte a essas extensões"
+" quanto suporte a outros back-ends caso os build hooks não sejam "
+"suficientes para o seu fluxo de trabalho. O PDM dá suporte a outros back-"
+"ends como o scikit-build e o meson-python, que permitirão que você "
+"personalize totalmente a build do seu pacote."
#: ../../package-structure-code/python-package-build-tools.md:199
msgid ""
@@ -3131,10 +4581,17 @@ msgid ""
"python to build their packages. Thus, we appreciate that PDM can work "
"with meson-python specifically."
msgstr ""
+"NOTA: Você também pode usar o Hatch para builds que não sejam de Python "
+"puro. O Hatch, assim como o PDM, permite que você escreva os seus "
+"próprios build hooks ou plugins para dar suporte a etapas de build "
+"personalizadas. Mas, atualmente, o hatch não dá suporte a outros back-"
+"ends de build. Muitos dos principais pacotes científicos estão migrando "
+"para o meson-python para construir seus pacotes. Por isso, valorizamos o "
+"fato de o PDM poder trabalhar especificamente com o meson-python."
#: ../../package-structure-code/python-package-build-tools.md:201
msgid "Python packaging tools summary"
-msgstr ""
+msgstr "Resumo das ferramentas de packaging Python"
#: ../../package-structure-code/python-package-build-tools.md:203
msgid ""
@@ -3146,16 +4603,26 @@ msgid ""
"do all of those things using the same tool (e.g. `hatch build`, `hatch "
"publish` or `pdm build`, `pdm publish`)."
msgstr ""
+"Abaixo, resumimos os recursos oferecidos pelas ferramentas de front-end "
+"de build mais populares. É importante ter em mente que essas ferramentas "
+"de front-end eliminam a necessidade de usar outras ferramentas principais"
+" no seu fluxo de trabalho. Por exemplo, se você usar o setuptools, também"
+" precisará usar o Build e o Twine para construir o seu pacote e publicar "
+"no PyPI. Mas se você usar o Poetry, o Hatch ou o PDM, você pode fazer "
+"todas essas coisas usando a mesma ferramenta (por exemplo, `hatch build`,"
+" `hatch publish` ou `pdm build`, `pdm publish`)."
#: ../../package-structure-code/python-package-build-tools.md:206
msgid ""
"Note that because setuptools does not offer a front-end interface, it is "
"not included in the table."
msgstr ""
+"Observe que, como o setuptools não oferece uma interface de front-end, "
+"ele não está incluído na tabela."
#: ../../package-structure-code/python-package-build-tools.md:210
msgid "Package tool features table"
-msgstr ""
+msgstr "Tabela de recursos das ferramentas de pacote"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:254
@@ -3163,34 +4630,34 @@ msgstr ""
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Feature"
-msgstr ""
+msgstr "Recurso"
#: ../../package-structure-code/python-package-build-tools.md:217
msgid "Default Build Back-end"
-msgstr ""
+msgstr "Back-end de Build Padrão"
#: ../../package-structure-code/python-package-build-tools.md:217
msgid "Flit-core"
-msgstr ""
+msgstr "Flit-core"
#: ../../package-structure-code/python-package-build-tools.md:217
msgid "hatchling"
-msgstr ""
+msgstr "hatchling"
#: ../../package-structure-code/python-package-build-tools.md:217
msgid "Poetry-core"
-msgstr ""
+msgstr "Poetry-core"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "Use Other Build Backends"
-msgstr ""
+msgstr "Usar Outros Back-ends de Build"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "✖"
-msgstr ""
+msgstr "x"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:254
@@ -3198,45 +4665,45 @@ msgstr ""
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "✅"
-msgstr ""
+msgstr "✅"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "Dependency management"
-msgstr ""
+msgstr "Gerenciamento de dependências"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:254
msgid "Publish to PyPI"
-msgstr ""
+msgstr "Publicar no PyPI"
#: ../../package-structure-code/python-package-build-tools.md:217
msgid "Version Control based versioning (using `git tags`)"
-msgstr ""
+msgstr "Versionamento baseado em controle de versão (usando `git tags`)"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Version bumping"
-msgstr ""
+msgstr "Incremento de versão"
#: ../../package-structure-code/python-package-build-tools.md:217
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "Environment Management"
-msgstr ""
+msgstr "Gerenciamento de Ambientes"
#: ../../package-structure-code/python-package-build-tools.md:217
msgid "More than one maintainer? (bus factor)"
-msgstr ""
+msgstr "Mais de um mantenedor? (fator ônibus)"
#: ../../package-structure-code/python-package-build-tools.md:227
msgid "Notes:"
-msgstr ""
+msgstr "Notas:"
#: ../../package-structure-code/python-package-build-tools.md:229
msgid "_Hatch plans to support dependency management in the future_"
-msgstr ""
+msgstr "_O Hatch planeja dar suporte ao gerenciamento de dependências no futuro_"
#: ../../package-structure-code/python-package-build-tools.md:230
msgid ""
@@ -3244,6 +4711,9 @@ msgid ""
"bumping following commit messages if you use a tool such as Python "
"Semantic Release"
msgstr ""
+"O Poetry dá suporte ao versionamento semântico. Assim, ele dará suporte "
+"ao incremento de versão seguindo as mensagens de commit se você usar uma "
+"ferramenta como o Python Semantic Release"
#: ../../package-structure-code/python-package-build-tools.md:235
msgid ""
@@ -3252,10 +4722,14 @@ msgid ""
"also provides multiple layers of support for projects that have C and C++"
" extensions."
msgstr ""
+"[O PDM é uma ferramenta de packaging e gerenciamento de dependências "
+"Python](https://pdm-project.org/latest/). O PDM dá suporte a builds para "
+"projetos Python puros. Ele também fornece várias camadas de suporte para "
+"projetos que têm extensões em C e C++."
#: ../../package-structure-code/python-package-build-tools.md:239
msgid "PDM support for C and C++ extensions"
-msgstr ""
+msgstr "Suporte do PDM para extensões em C e C++"
#: ../../package-structure-code/python-package-build-tools.md:241
msgid ""
@@ -3264,17 +4738,22 @@ msgid ""
"PDM's build back-end receives the compiled extension files (.so, .pyd) "
"and packages them with the pure Python files."
msgstr ""
+"O PDM dá suporte ao uso do back-end do PDM e do setuptools ao mesmo "
+"tempo. Isso significa que você pode executar o setuptools para compilar e"
+" construir extensões em C. O back-end de build do PDM recebe os arquivos "
+"de extensão compilados (.so, .pyd) e os empacota junto com os arquivos "
+"Python puros."
#: ../../package-structure-code/python-package-build-tools.md:247
msgid "PDM features"
-msgstr ""
+msgstr "Recursos do PDM"
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:307
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Notes"
-msgstr ""
+msgstr "Notas"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
@@ -3282,10 +4761,14 @@ msgid ""
" including: PDM-core, flit-core and hatchling. PDM also can work with "
"Meson-Python which supports move complex python builds."
msgstr ""
+"Quando você configura o PDM, ele permite que você selecione um de vários "
+"back-ends de build, incluindo: PDM-core, flit-core e hatchling. O PDM "
+"também pode trabalhar com o Meson-Python, que dá suporte a builds Python "
+"mais complexas."
#: ../../package-structure-code/python-package-build-tools.md:254
msgid "Dependency specifications"
-msgstr ""
+msgstr "Especificações de dependências"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
@@ -3296,10 +4779,16 @@ msgid ""
"limit](https://pdm-project.org/en/latest/usage/dependency/#about-update-"
"strategy).**"
msgstr ""
+"O PDM tem suporte flexível para gerenciar dependências. O PDM usa por "
+"padrão uma abordagem de limite aberto (por exemplo, `requests >=1.2`) "
+"para as dependências. No entanto, você pode [personalizar como deseja "
+"adicionar dependências caso prefira outra abordagem, como a do Poetry, "
+"que usa um limite superior](https://pdm-"
+"project.org/en/latest/usage/dependency/#about-update-strategy).**"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid "Environment lock files"
-msgstr ""
+msgstr "Arquivos de lock de ambiente"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
@@ -3309,11 +4798,17 @@ msgid ""
" For community-used packages, you will likely never want to use a lock "
"file."
msgstr ""
+"O PDM e o Poetry são atualmente as únicas ferramentas que criam arquivos "
+"de lock de ambiente. Os arquivos de lock costumam ser mais úteis para "
+"desenvolvedores que criam aplicações web, onde bloquear o ambiente é "
+"essencial para uma experiência de usuário consistente. Para pacotes "
+"usados pela comunidade, é provável que você nunca queira usar um arquivo "
+"de lock."
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Environment management"
-msgstr ""
+msgstr "Gerenciamento de ambientes"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
@@ -3322,79 +4817,94 @@ msgid ""
"newer option in the Python ecosystem. No extensions are needed for this "
"support."
msgstr ""
+"O PDM fornece suporte ao gerenciamento de ambientes. Ele dá suporte a "
+"ambientes virtuais Python, conda e a um ambiente local `__pypackages__`, "
+"que é uma opção mais recente no ecossistema Python. Nenhuma extensão é "
+"necessária para esse suporte."
#: ../../package-structure-code/python-package-build-tools.md:254
msgid "Select your environment type on install"
-msgstr ""
+msgstr "Selecione o tipo de ambiente na instalação"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
"When you run `PDM init`, PDM will discover environments that are already "
"on your system and allow you to select one to use for your project."
msgstr ""
+"Quando você executa `PDM init`, o PDM descobrirá os ambientes que já "
+"estão no seu sistema e permitirá que você selecione um para usar no seu "
+"projeto."
#: ../../package-structure-code/python-package-build-tools.md:254
msgid "PDM supports publishing to both test PyPI and PyPI"
-msgstr ""
+msgstr "O PDM dá suporte à publicação tanto no test PyPI quanto no PyPI"
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Version Control based versioning"
-msgstr ""
+msgstr "Versionamento baseado em controle de versão"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
"PDM has a setuptools_scm like tool built into it which allows you to use "
"dynamic versioning that rely on git tags."
msgstr ""
+"O PDM tem uma ferramenta semelhante ao setuptools_scm embutida nele, que "
+"permite usar versionamento dinâmico baseado em tags do git."
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
"PDM supports you bumping the version of your package using standard "
"semantic version terms patch; minor; major"
msgstr ""
+"O PDM dá suporte ao incremento da versão do seu pacote usando os termos "
+"padrão de versionamento semântico patch; minor; major"
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:307
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Follows current packaging standards"
-msgstr ""
+msgstr "Segue os padrões atuais de packaging"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
"PDM supports current packaging standards for adding metadata to the "
"**pyproject.toml** file."
msgstr ""
+"O PDM dá suporte aos padrões atuais de packaging para adicionar metadados"
+" ao arquivo **pyproject.toml**."
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:307
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Install your package in editable mode"
-msgstr ""
+msgstr "Instale o seu pacote em modo editável"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid "PDM supports installing your package in editable mode."
-msgstr ""
+msgstr "O PDM dá suporte à instalação do seu pacote em modo editável."
#: ../../package-structure-code/python-package-build-tools.md:254
#: ../../package-structure-code/python-package-build-tools.md:307
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Build your sdist and wheel distributions"
-msgstr ""
+msgstr "Construa as suas distribuições sdist e wheel"
#: ../../package-structure-code/python-package-build-tools.md:254
msgid ""
"Similar to all of the other tools PDM builds your packages sdist and "
"wheel files for you."
msgstr ""
+"Assim como todas as outras ferramentas, o PDM constrói os arquivos sdist "
+"e wheel do seu pacote para você."
#: ../../package-structure-code/python-package-build-tools.md:267
msgid "PDM vs. Poetry"
-msgstr ""
+msgstr "PDM vs. Poetry"
#: ../../package-structure-code/python-package-build-tools.md:268
msgid ""
@@ -3403,12 +4913,19 @@ msgid ""
" versioning. As such, PDM is preferred for those working on non pure-"
"Python packages."
msgstr ""
+"A funcionalidade do PDM é semelhante à do Poetry. No entanto, o PDM "
+"também oferece suporte adicional e documentado para extensões em C e "
+"versionamento baseado em controle de versão. Por isso, o PDM é preferível"
+" para quem trabalha com pacotes que não são de Python puro."
#: ../../package-structure-code/python-package-build-tools.md:272
msgid ""
"If you are deciding between the Poetry and PDM, a smaller difference is "
"the default way that dependencies are added to your pyproject.toml file."
msgstr ""
+"Se você está decidindo entre o Poetry e o PDM, uma diferença menor é a "
+"forma padrão como as dependências são adicionadas ao seu arquivo "
+"pyproject.toml."
#: ../../package-structure-code/python-package-build-tools.md:274
msgid ""
@@ -3423,6 +4940,18 @@ msgid ""
" bound locks means that requests 2.0 could never be installed even if it "
"came out and your package could benefit from it)."
msgstr ""
+"O Poetry, por padrão, segue o versionamento semântico estrito, "
+"adicionando dependências ao seu arquivo pyproject.toml [usando uma "
+"restrição de limite superior (`^`)](https://python-poetry.org/docs"
+"/dependency-specification/#version-constraints). O bloqueio de limite "
+"superior significa que o Poetry nunca vai incrementar uma dependência "
+"para a próxima versão major (ou seja, de 1.2 para 2.0). No entanto, você "
+"pode dizer ao Poetry para usar uma abordagem de limite aberto adicionando"
+" o pacote explicitamente assim: `poetry add requests >= 1.2` em vez de "
+"apenas usar `poetry add requests`, o que resultará em um limite superior "
+"bloqueado (ou seja, o bloqueio de limite superior significa que requests "
+"2.0 nunca poderia ser instalado, mesmo que fosse lançado e o seu pacote "
+"pudesse se beneficiar dele)."
#: ../../package-structure-code/python-package-build-tools.md:275
msgid ""
@@ -3432,22 +4961,32 @@ msgid ""
" you can also specify upper-bounds (`^`) using PDM if require that "
"approach."
msgstr ""
+"O PDM usa por padrão adições de dependências com limites abertos (`>=`), "
+"que é a abordagem preferida no ecossistema científico do python. No "
+"entanto, o PDM também permite que você especifique a forma como as "
+"dependências são adicionadas por padrão. Assim, você também pode "
+"especificar limites superiores (`^`) usando o PDM caso precise dessa "
+"abordagem."
#: ../../package-structure-code/python-package-build-tools.md:277
msgid ""
"Finally there are some nuanced differences in how both tools create lock "
"files which we will not go into detail about here."
msgstr ""
+"Por fim, há algumas diferenças sutis na forma como ambas as ferramentas "
+"criam arquivos de lock, sobre as quais não entraremos em detalhes aqui."
#: ../../package-structure-code/python-package-build-tools.md:280
msgid "Challenges with PDM"
-msgstr ""
+msgstr "Desafios com o PDM"
#: ../../package-structure-code/python-package-build-tools.md:282
msgid ""
"PDM is a full-featured packaging tool. However it is not without "
"challenges:"
msgstr ""
+"O PDM é uma ferramenta de packaging completa. No entanto, ela não está "
+"isenta de desafios:"
#: ../../package-structure-code/python-package-build-tools.md:284
msgid ""
@@ -3455,6 +4994,9 @@ msgid ""
"packaging. For example, PDM doesn't provide an end to end beginning "
"workflow in its documentation."
msgstr ""
+"Sua documentação pode ser confusa, especialmente se você é novo no "
+"packaging. Por exemplo, o PDM não fornece um fluxo de trabalho inicial de"
+" ponta a ponta na sua documentação."
#: ../../package-structure-code/python-package-build-tools.md:286
msgid ""
@@ -3463,6 +5005,11 @@ msgid ""
"longer have time to work on the project, it leaves users with a gap in "
"support. Hatch and Flit also have single maintainer teams."
msgstr ""
+"O PDM também tem apenas um mantenedor atualmente. Consideramos as equipes"
+" com um único mantenedor como um risco potencial. Se o mantenedor "
+"perceber que não tem mais tempo para trabalhar no projeto, isso deixa os "
+"usuários com uma lacuna no suporte. O Hatch e o Flit também têm equipes "
+"com um único mantenedor."
#: ../../package-structure-code/python-package-build-tools.md:291
msgid ""
@@ -3471,6 +5018,10 @@ msgid ""
" README file for this directly provides you with an overview of what the "
"PDM command line interface looks like when you use it."
msgstr ""
+"[Você pode ver um exemplo de um pacote que usa o PDM "
+"aqui](https://github.com/pyOpenSci/examplePy/tree/main/example4_pdm). O "
+"arquivo README disso fornece diretamente uma visão geral de como é a "
+"interface de linha de comando do PDM quando você a usa."
#: ../../package-structure-code/python-package-build-tools.md:296
msgid ""
@@ -3481,62 +5032,77 @@ msgid ""
"features. And if your package structure is already created. More on that "
"below."
msgstr ""
+"[O Flit é uma ferramenta de packaging simples e "
+"enxuta](https://flit.pypa.io/en/stable/) que dá suporte aos padrões "
+"modernos de packaging Python. O Flit é uma ótima escolha se você está "
+"construindo um pacote básico para usar em um fluxo de trabalho local que "
+"não requer nenhum recurso avançado. E se a estrutura do seu pacote já "
+"estiver criada. Mais sobre isso abaixo."
#: ../../package-structure-code/python-package-build-tools.md:300
msgid "Flit features"
-msgstr ""
+msgstr "Recursos do Flit"
#: ../../package-structure-code/python-package-build-tools.md:307
#: ../../package-structure-code/python-package-build-tools.md:353
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Publish to PyPI and test PyPI"
-msgstr ""
+msgstr "Publicar no PyPI e no test PyPI"
#: ../../package-structure-code/python-package-build-tools.md:307
msgid "Flit supports publishing to both test PyPI and PyPI"
-msgstr ""
+msgstr "O Flit dá suporte à publicação tanto no test PyPI quanto no PyPI"
#: ../../package-structure-code/python-package-build-tools.md:307
msgid "Helps you add metadata to your **pyproject.toml** file"
-msgstr ""
+msgstr "Ajuda você a adicionar metadados ao seu arquivo **pyproject.toml**"
#: ../../package-structure-code/python-package-build-tools.md:307
msgid ""
"Flit does support adding metadata to your **pyproject.toml** file "
"following modern packaging standards."
msgstr ""
+"O Flit dá suporte à adição de metadados ao seu arquivo **pyproject.toml**"
+" seguindo os padrões modernos de packaging."
#: ../../package-structure-code/python-package-build-tools.md:307
msgid ""
"Flit supports current packaging standards for adding metadata to the "
"**pyproject.toml** file."
msgstr ""
+"O Flit dá suporte aos padrões atuais de packaging para adicionar "
+"metadados ao arquivo **pyproject.toml**."
#: ../../package-structure-code/python-package-build-tools.md:307
msgid "Flit supports installing your package in editable mode.**"
-msgstr ""
+msgstr "O Flit dá suporte à instalação do seu pacote em modo editável.**"
#: ../../package-structure-code/python-package-build-tools.md:307
msgid "Flit can be used to build your packages sdist and wheel distributions."
msgstr ""
+"O Flit pode ser usado para construir as distribuições sdist e wheel do "
+"seu pacote."
#: ../../package-structure-code/python-package-build-tools.md:314
msgid ""
"NOTE: _If you are using the most current version of pip, it supports both"
" a symlink approach `flit install -s` and `python -m pip install -e .`_"
msgstr ""
+"NOTA: _Se você está usando a versão mais atual do pip, ele dá suporte "
+"tanto à abordagem de symlink `flit install -s` quanto a `python -m pip "
+"install -e .`_"
#: ../../package-structure-code/python-package-build-tools.md:316
msgid "Learn more about flit"
-msgstr ""
+msgstr "Saiba mais sobre o flit"
#: ../../package-structure-code/python-package-build-tools.md:318
msgid "[Why use flit?](https://flit.pypa.io/en/stable/rationale.html)"
-msgstr ""
+msgstr "[Por que usar o flit?](https://flit.pypa.io/en/stable/rationale.html)"
#: ../../package-structure-code/python-package-build-tools.md:321
msgid "Why you might not want to use Flit"
-msgstr ""
+msgstr "Por que você pode não querer usar o Flit"
#: ../../package-structure-code/python-package-build-tools.md:323
msgid ""
@@ -3544,30 +5110,39 @@ msgid ""
" a beginner you may want to select Hatch or PDM which will offer you more"
" support in common operations."
msgstr ""
+"Como o Flit é simples e sem complicações, ele é melhor para builds "
+"básicas e rápidas. Se você é iniciante, talvez prefira escolher o Hatch "
+"ou o PDM, que lhe oferecerão mais suporte em operações comuns."
#: ../../package-structure-code/python-package-build-tools.md:327
msgid "You may NOT want to use flit if:"
-msgstr ""
+msgstr "Você pode NÃO querer usar o flit se:"
#: ../../package-structure-code/python-package-build-tools.md:329
msgid ""
"You want to setup more advanced version tracking and management (using "
"version control for version bumping)"
msgstr ""
+"Você quer configurar um rastreamento e gerenciamento de versões mais "
+"avançado (usando controle de versão para o incremento de versão)"
#: ../../package-structure-code/python-package-build-tools.md:330
msgid ""
"You want a tool that handles dependency versions (use PDM or Poetry "
"instead)"
msgstr ""
+"Você quer uma ferramenta que lide com versões de dependências (use o PDM "
+"ou o Poetry no lugar)"
#: ../../package-structure-code/python-package-build-tools.md:331
msgid "You have a project that is not pure Python (Use Hatch, PDM or setuptools)"
msgstr ""
+"Você tem um projeto que não é de Python puro (Use Hatch, PDM ou "
+"setuptools)"
#: ../../package-structure-code/python-package-build-tools.md:332
msgid "You want environment management (use PDM, Hatch or Poetry)"
-msgstr ""
+msgstr "Você quer gerenciamento de ambientes (use PDM, Hatch ou Poetry)"
#: ../../package-structure-code/python-package-build-tools.md:338
msgid ""
@@ -3580,16 +5155,27 @@ msgid ""
"locally. This means that you could potentially drop a tool like **Make** "
"or **Nox** from your workflow and use Hatch instead."
msgstr ""
+"O [**Hatch**](https://hatch.pypa.io/latest/), assim como o Poetry e o "
+"PDM, fornece uma interface de linha de comando unificada. Para "
+"diferenciar o Hatch do Poetry e do PDM, ele também fornece um gerenciador"
+" de ambientes para testes que facilitará a execução de testes localmente "
+"em diferentes versões do Python. Ele também oferece um recurso semelhante"
+" ao nox / makefile que permite criar fluxos de trabalho de build "
+"personalizados, como construir a sua documentação localmente. Isso "
+"significa que você poderia, potencialmente, eliminar uma ferramenta como "
+"o **Make** ou o **Nox** do seu fluxo de trabalho e usar o Hatch no lugar."
#: ../../package-structure-code/python-package-build-tools.md:345
msgid "Hatch features"
-msgstr ""
+msgstr "Recursos do Hatch"
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
"Hatch is used with the backend Hatchling by default, but allows you to "
"use another backend by switching the declaration in pyproject.toml."
msgstr ""
+"O Hatch é usado com o backend Hatchling por padrão, mas permite que você "
+"use outro backend trocando a declaração no pyproject.toml."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
@@ -3597,6 +5183,9 @@ msgid ""
"feature to support dependencies management may be added in a future "
"release."
msgstr ""
+"Atualmente, você precisa adicionar as dependências manualmente com o "
+"Hatch. No entanto, um recurso para dar suporte ao gerenciamento de "
+"dependências pode ser adicionado em uma versão futura."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
@@ -3605,10 +5194,14 @@ msgid ""
"such as hatch-conda for conda support](https://github.com/OldGrumpyViking"
"/hatch-conda)."
msgstr ""
+"O Hatch dá suporte a ambientes virtuais Python. Se você quiser usar "
+"outros tipos de ambientes, como o Conda, será necessário [instalar um "
+"plugin como o hatch-conda para suporte ao "
+"conda](https://github.com/OldGrumpyViking/hatch-conda)."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "Hatch supports publishing to both test PyPI and PyPI"
-msgstr ""
+msgstr "O Hatch dá suporte à publicação tanto no test PyPI quanto no PyPI"
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
@@ -3616,18 +5209,25 @@ msgid ""
"support versioning using git tags. The workflow with `hatch_vcs` is the "
"same as that with `setuptools_scm`."
msgstr ""
+"O Hatch oferece o `hatch_vcs`, que é um plugin que usa o setuptools_scm "
+"para dar suporte ao versionamento usando tags do git. O fluxo de trabalho"
+" com o `hatch_vcs` é o mesmo do `setuptools_scm`."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
"Hatch supports you bumping the version of your package using standard "
"semantic version terms patch; minor; major"
msgstr ""
+"O Hatch dá suporte ao incremento da versão do seu pacote usando os termos"
+" padrão de versionamento semântico patch; minor; major"
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
"Hatch supports current packaging standards for adding metadata to the "
"**pyproject.toml** file."
msgstr ""
+"O Hatch dá suporte aos padrões atuais de packaging para adicionar "
+"metadados ao arquivo **pyproject.toml**."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
@@ -3637,14 +5237,21 @@ msgid ""
"installs](https://hatch.pypa.io/latest/config/build/#dev-mode) but refers"
" to pip in its documentation."
msgstr ""
+"Por padrão, o Hatch instalará o seu pacote em qualquer um dos seus "
+"ambientes em modo editável. Você pode instalar o seu pacote em modo "
+"editável manualmente usando `python -m pip install -e .` O Hatch menciona"
+" [instalações editáveis](https://hatch.pypa.io/latest/config/build/#dev-"
+"mode), mas faz referência ao pip na sua documentação."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "Hatch will build the sdist and wheel distributions"
-msgstr ""
+msgstr "O Hatch construirá as distribuições sdist e wheel"
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "✨Matrix environment creation to support testing across Python versions✨"
msgstr ""
+"✨Criação de ambientes em matriz para dar suporte a testes em diferentes "
+"versões do Python✨"
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
@@ -3653,12 +5260,18 @@ msgid ""
"package locally across Python versions (instead of using a tool such as "
"tox)."
msgstr ""
+"A criação de ambientes em matriz é um recurso exclusivo do Hatch no "
+"ecossistema de packaging. Esse recurso é útil se você quiser testar o seu"
+" pacote localmente em diferentes versões do Python (em vez de usar uma "
+"ferramenta como o tox)."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
"✨[Nox / MAKEFILE like "
"functionality](https://hatch.pypa.io/latest/environment/#selection)✨"
msgstr ""
+"✨[Funcionalidade semelhante ao Nox / "
+"MAKEFILE](https://hatch.pypa.io/latest/environment/#selection)✨"
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
@@ -3667,10 +5280,15 @@ msgid ""
"like serve docs locally and clean your package build directory. This "
"means you may have one less tool in your build workflow."
msgstr ""
+"Esse recurso também é exclusivo do Hatch. Essa funcionalidade permite que"
+" você crie fluxos de trabalho na configuração do **pyproject.toml** para "
+"fazer coisas como servir a documentação localmente e limpar o diretório "
+"de build do seu pacote. Isso significa que você pode ter uma ferramenta a"
+" menos no seu fluxo de trabalho de build."
#: ../../package-structure-code/python-package-build-tools.md:353
msgid "✨A flexible build backend: **hatchling**✨"
-msgstr ""
+msgstr "✨Um backend de build flexível: **hatchling**✨"
#: ../../package-structure-code/python-package-build-tools.md:353
msgid ""
@@ -3678,6 +5296,9 @@ msgid ""
"developers to easily build plugins to support custom build steps when "
"packaging."
msgstr ""
+"**O backend de build hatchling, oferecido pelo mantenedor do Hatch, "
+"permite que os desenvolvedores criem plugins com facilidade para dar "
+"suporte a etapas de build personalizadas durante o packaging."
#: ../../package-structure-code/python-package-build-tools.md:367
msgid ""
@@ -3686,36 +5307,46 @@ msgid ""
"flexibility. The Hatch build hook approach is also comparable with the "
"features offered by PDM._"
msgstr ""
+"_Há alguma controvérsia sobre essa abordagem impor aos mantenedores o "
+"ônus de criar um sistema de build personalizado. Mas outros apreciam a "
+"flexibilidade. A abordagem de build hook do Hatch também é comparável aos"
+" recursos oferecidos pelo PDM._"
#: ../../package-structure-code/python-package-build-tools.md:369
msgid "Why you might not want to use Hatch"
-msgstr ""
+msgstr "Por que você pode não querer usar o Hatch"
#: ../../package-structure-code/python-package-build-tools.md:371
msgid ""
"There are a few features that hatch is missing that may be important for "
"some. These include:"
msgstr ""
+"Há alguns recursos que faltam no hatch e que podem ser importantes para "
+"alguns. Eles incluem:"
#: ../../package-structure-code/python-package-build-tools.md:374
msgid ""
"Hatch doesn't support adding dependencies. You will have to add them "
"manually."
msgstr ""
+"O Hatch não dá suporte à adição de dependências. Você terá que "
+"adicioná-las manualmente."
#: ../../package-structure-code/python-package-build-tools.md:375
msgid "Hatch won't by default recognize Conda environments without a plugin."
-msgstr ""
+msgstr "Por padrão, o Hatch não reconhecerá ambientes Conda sem um plugin."
#: ../../package-structure-code/python-package-build-tools.md:376
msgid ""
"Similar to PDM, Hatch's documentation can difficult to work through, "
"particularly if you are just getting started with creating a package."
msgstr ""
+"Assim como o PDM, a documentação do Hatch pode ser difícil de acompanhar,"
+" especialmente se você está apenas começando a criar um pacote."
#: ../../package-structure-code/python-package-build-tools.md:377
msgid "Hatch, similar to PDM and Flit currently only has one maintainer."
-msgstr ""
+msgstr " Hatch, assim como o PDM e o Flit, atualmente tem apenas um mantenedor."
#: ../../package-structure-code/python-package-build-tools.md:382
msgid ""
@@ -3724,6 +5355,10 @@ msgid ""
"PyPA survey). Poetry is user-friendly and has clean and easy-to-read "
"documentation."
msgstr ""
+"[O Poetry é uma ferramenta de build completa.](https://python-"
+"poetry.org/) Ele também é a segunda ferramenta de packaging de front-end "
+"mais popular (com base na pesquisa da PyPA). O Poetry é amigável e tem "
+"uma documentação limpa e fácil de ler."
#: ../../package-structure-code/python-package-build-tools.md:387
msgid ""
@@ -3731,18 +5366,23 @@ msgid ""
" support is currently undocumented. Thus, we don't recommend using Poetry"
" for more complex builds."
msgstr ""
+"Embora alguns tenham usado o Poetry para builds Python com extensões em "
+"C/C++, esse suporte atualmente não é documentado. Por isso, não "
+"recomendamos usar o Poetry para builds mais complexas."
#: ../../package-structure-code/python-package-build-tools.md:391
msgid "Poetry features"
-msgstr ""
+msgstr "Recursos do Poetry"
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Poetry helps you add dependencies to your `pyproject.toml` metadata."
msgstr ""
+"O Poetry ajuda você a adicionar dependências aos metadados do seu "
+"`pyproject.toml`."
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Dependency specification"
-msgstr ""
+msgstr "Especificação de dependências"
#: ../../package-structure-code/python-package-build-tools.md:398
msgid ""
@@ -3752,6 +5392,11 @@ msgid ""
"override the default setting when adding dependencies). Read below for "
"more."
msgstr ""
+"O Poetry permite que você seja específico quanto à versão das "
+"dependências que você adiciona ao arquivo pyproject.toml do seu pacote. "
+"No entanto, sua abordagem padrão de limite superior pode ser problemática"
+" para alguns pacotes (sugerimos que você sobrescreva a configuração "
+"padrão ao adicionar dependências). Leia abaixo para saber mais."
#: ../../package-structure-code/python-package-build-tools.md:398
msgid ""
@@ -3761,20 +5406,26 @@ msgid ""
"options](https://python-poetry.org/docs/basic-usage/#using-your-virtual-"
"environment)."
msgstr ""
+"O Poetry permite que você use o seu ambiente embutido ou selecione o tipo"
+" de ambiente que deseja usar para gerenciar o seu pacote. [Leia mais "
+"sobre as suas opções de gerenciamento de ambientes embutidas](https"
+"://python-poetry.org/docs/basic-usage/#using-your-virtual-environment)."
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Lock files"
-msgstr ""
+msgstr "Arquivos de lock"
#: ../../package-structure-code/python-package-build-tools.md:398
msgid ""
"Poetry creates a **poetry.lock** file that you can use if you need a lock"
" file for your build."
msgstr ""
+"O Poetry cria um arquivo **poetry.lock** que você pode usar caso precise "
+"de um arquivo de lock para a sua build."
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Poetry supports publishing to both test PyPI and PyPI"
-msgstr ""
+msgstr "O Poetry dá suporte à publicação tanto no test PyPI quanto no PyPI"
#: ../../package-structure-code/python-package-build-tools.md:398
msgid ""
@@ -3782,12 +5433,17 @@ msgid ""
"/poetry-dynamic-versioning) supports versioning using git tags with "
"Poetry."
msgstr ""
+"O plugin [Poetry dynamic versioning](https://github.com/mtkennerly"
+"/poetry-dynamic-versioning) dá suporte ao versionamento usando tags do "
+"git com o Poetry."
#: ../../package-structure-code/python-package-build-tools.md:398
msgid ""
"Poetry supports you bumping the version of your package using standard "
"semantic version terms patch; minor; major"
msgstr ""
+"O Poetry dá suporte ao incremento da versão do seu pacote usando os "
+"termos padrão de versionamento semântico patch; minor; major"
#: ../../package-structure-code/python-package-build-tools.md:398
msgid ""
@@ -3795,22 +5451,28 @@ msgid ""
"standards. However, not all standards are supported, and it also supports"
" the legacy Poetry format. Read below for more."
msgstr ""
+"Desde a versão 2.0, o Poetry dá suporte à maioria dos padrões atuais de "
+"metadados de projeto. No entanto, nem todos os padrões são suportados, e "
+"ele também dá suporte ao formato legado do Poetry. Leia abaixo para saber"
+" mais."
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Poetry supports installing your package in editable mode."
-msgstr ""
+msgstr "O Poetry dá suporte à instalação do seu pacote em modo editável."
#: ../../package-structure-code/python-package-build-tools.md:398
msgid "Poetry will build your sdist and wheel distributions using `poetry build`"
msgstr ""
+"O Poetry construirá as suas distribuições sdist e wheel usando `poetry "
+"build`"
#: ../../package-structure-code/python-package-build-tools.md:413
msgid "Challenges with Poetry"
-msgstr ""
+msgstr "Desafios com o Poetry"
#: ../../package-structure-code/python-package-build-tools.md:415
msgid "Some challenges of Poetry include:"
-msgstr ""
+msgstr "Alguns desafios do Poetry incluem:"
#: ../../package-structure-code/python-package-build-tools.md:417
msgid ""
@@ -3822,6 +5484,13 @@ msgid ""
"standardised and lets you group your dependencies into several optional "
"groups."
msgstr ""
+"O Poetry tem o seu próprio conceito de dependências agrupadas (`poetry "
+"add --group=GROUP_NAME DEPENDENCY`). As dependências adicionadas como "
+"dependências agrupadas não são opcionais e não há um padrão Python para "
+"esse tipo de dependência. Isso não deve ser confundido com as "
+"dependências \"opcionais\" (`poetry add --optional=GROUP_NAME "
+"DEPENDENCY`), que são padronizadas e permitem que você agrupe as suas "
+"dependências em vários grupos opcionais."
#: ../../package-structure-code/python-package-build-tools.md:418
msgid ""
@@ -3830,6 +5499,10 @@ msgid ""
"does not yet follow the standardised format for specifying such "
"dependencies."
msgstr ""
+"Embora o Poetry dê suporte a dependências de \"desenvolvimento\" (ou "
+"seja, dependências que você usa para o desenvolvimento, mas não para "
+"executar o código, como o `pytest`), o Poetry ainda não segue o formato "
+"padronizado para especificar tais dependências."
#: ../../package-structure-code/python-package-build-tools.md:419
msgid ""
@@ -3839,6 +5512,12 @@ msgid ""
"use `poetry add` as follows: `poetry add \"requests>=2.1\"` See breakout "
"below for more discussion on issues surrounding upper-bounds pinning."
msgstr ""
+"O Poetry, por padrão, fixa as dependências usando um limite \"superior\" "
+"(que é especificado com o símbolo `^` no formato legado). No entanto, "
+"esse comportamento pode ser sobrescrito especificando a dependência "
+"quando você usa `poetry add` da seguinte forma: `poetry add "
+"\"requests>=2.1\"` Veja o destaque abaixo para mais discussões sobre as "
+"questões em torno da fixação com limites superiores."
#: ../../package-structure-code/python-package-build-tools.md:421
msgid ""
@@ -3848,10 +5527,16 @@ msgid ""
"builds. If you use Poetry, we strongly suggest that you override the "
"default upper bound dependency option."
msgstr ""
+"O Poetry é uma ferramenta de packaging popular e introduziu muitos "
+"recursos bastante úteis. No entanto, se você decidir usá-lo, tenha "
+"cuidado ao adicionar dependências, pois a abordagem de fixação do Poetry "
+"pode ser problemática para muitas builds. Se você usar o Poetry, "
+"sugerimos fortemente que você sobrescreva a opção padrão de dependências "
+"com limite superior."
#: ../../package-structure-code/python-package-build-tools.md:426
msgid "Challenges with Poetry dependency pinning"
-msgstr ""
+msgstr "Desafios com a fixação de dependências do Poetry"
#: ../../package-structure-code/python-package-build-tools.md:429
msgid ""
@@ -3862,6 +5547,13 @@ msgid ""
"never bump the dependency to 2.0 even if there is a new major version of "
"the package. Poetry will instead bump up to 1.9.x."
msgstr ""
+"Por padrão, o Poetry fixa as dependências usando `^`. Esse símbolo `^` "
+"significa que há um \"limite superior\" para a dependência. Assim, o "
+"poetry não incrementará a versão de uma dependência para uma nova versão "
+"major. Portanto, se o seu pacote usa uma dependência que está na versão "
+"1.2.3, o Poetry nunca incrementará a dependência para 2.0, mesmo que haja"
+" uma nova versão major do pacote. Em vez disso, o Poetry incrementará até"
+" 1.9.x."
#: ../../package-structure-code/python-package-build-tools.md:435
msgid ""
@@ -3872,6 +5564,13 @@ msgid ""
"problematic by many of our core scientific "
"packages.](https://iscinumpy.dev/post/bound-version-constraints/)"
msgstr ""
+"O Poetry faz isso porque adere ao versionamento semântico estrito, que "
+"afirma que um incremento de versão major (de 1.0 para 2.0, por exemplo) "
+"significa que há mudanças que quebram a compatibilidade na ferramenta. No"
+" entanto, nem todas as ferramentas seguem o versionamento semântico "
+"estrito. [Essa abordagem foi considerada problemática por muitos dos "
+"nossos principais pacotes científicos.](https://iscinumpy.dev/post/bound-"
+"version-constraints/)"
#: ../../package-structure-code/python-package-build-tools.md:440
msgid ""
@@ -3879,10 +5578,13 @@ msgid ""
"instance, some tools use [calver](https://calver.org/) which creates new "
"versions based on the date."
msgstr ""
+"Essa abordagem também não dará suporte a outras formas de versionar "
+"ferramentas; por exemplo, algumas ferramentas usam o "
+"[calver](https://calver.org/), que cria novas versões com base na data."
#: ../../package-structure-code/python-package-build-tools.md:445
msgid "Using Setuptools back-end for Python packaging with Build front-end"
-msgstr ""
+msgstr "Usando o back-end Setuptools para packaging Python com o front-end Build"
#: ../../package-structure-code/python-package-build-tools.md:447
msgid ""
@@ -3894,6 +5596,14 @@ msgid ""
" Hatch offer. As such you will need to use other tools such as **build** "
"to create your package distributions and **twine** to publish to PyPI."
msgstr ""
+"O [Setuptools](https://setuptools.pypa.io/en/latest/) é a ferramenta de "
+"build de packaging Python mais madura, com [desenvolvimento que remonta a"
+" 2009 e antes](https://setuptools.pypa.io/en/latest/history.html#). O "
+"Setuptools também tem o maior número de usuários na comunidade (de acordo"
+" com a pesquisa da PyPA). O Setuptools não oferece um front-end de "
+"usuário como o Flit, o Poetry e o Hatch oferecem. Por isso, você "
+"precisará usar outras ferramentas, como o **build** para criar as "
+"distribuições do seu pacote e o **twine** para publicar no PyPI."
#: ../../package-structure-code/python-package-build-tools.md:455
msgid ""
@@ -3901,50 +5611,61 @@ msgid ""
"maintainers to consider using a more modern tool for packaging such as "
"Poetry, Hatch or PDM."
msgstr ""
+"Embora o setuptools seja a ferramenta mais comumente usada, incentivamos "
+"os mantenedores de pacotes a considerarem usar uma ferramenta mais "
+"moderna para packaging, como o Poetry, o Hatch ou o PDM."
#: ../../package-structure-code/python-package-build-tools.md:458
msgid ""
"We discuss setuptools here because it's commonly found in the ecosystem "
"and contributors may benefit from understanding it."
msgstr ""
+"Discutimos o setuptools aqui porque ele é comumente encontrado no "
+"ecossistema e os contribuidores podem se beneficiar de entendê-lo."
#: ../../package-structure-code/python-package-build-tools.md:461
msgid "Setuptools features"
-msgstr ""
+msgstr "Recursos do Setuptools"
#: ../../package-structure-code/python-package-build-tools.md:463
msgid "Some of features of setuptools include:"
-msgstr ""
+msgstr "Alguns dos recursos do setuptools incluem:"
#: ../../package-structure-code/python-package-build-tools.md:465
msgid "Fully customizable build workflow"
-msgstr ""
+msgstr "Fluxo de trabalho de build totalmente personalizável"
#: ../../package-structure-code/python-package-build-tools.md:466
msgid "Many scientific Python packages use it."
-msgstr ""
+msgstr "Muitos pacotes científicos em Python o utilizam."
#: ../../package-structure-code/python-package-build-tools.md:467
msgid ""
"It offers version control based package versioning using "
"**setuptools_scm**"
msgstr ""
+"Ele oferece versionamento de pacotes baseado em controle de versão usando"
+" o **setuptools_scm**"
#: ../../package-structure-code/python-package-build-tools.md:468
msgid "It supports modern packaging using **pyproject.toml** for metadata"
msgstr ""
+"Ele dá suporte ao packaging moderno usando o **pyproject.toml** para "
+"metadados"
#: ../../package-structure-code/python-package-build-tools.md:469
msgid "Supports backwards compatibly for older packaging approaches."
msgstr ""
+"Dá suporte à compatibilidade retroativa com abordagens de packaging mais "
+"antigas."
#: ../../package-structure-code/python-package-build-tools.md:471
msgid "Challenges using setuptools"
-msgstr ""
+msgstr "Desafios ao usar o setuptools"
#: ../../package-structure-code/python-package-build-tools.md:475
msgid "Setuptools has a few challenges:"
-msgstr ""
+msgstr "O Setuptools tem alguns desafios:"
#: ../../package-structure-code/python-package-build-tools.md:477
msgid ""
@@ -3957,6 +5678,14 @@ msgid ""
"features such as tab / auto completion when using an IDE like VSCODE or "
"pycharm (as long as your version of pip is current!)."
msgstr ""
+"Por padrão, o Setuptools não dá suporte a recursos interativos como auto "
+"/ tab completion se você estiver trabalhando em uma IDE como o VSCODE e "
+"usando uma instalação editável para desenvolvimento. [Veja as notas aqui "
+"sobre o suporte do pylance](https://github.com/microsoft/pylance-"
+"release/blob/main/TROUBLESHOOTING.md#editable-install-modules-not-found)."
+" Em comparação, ferramentas como flit, hatch e PDM dão suporte a recursos"
+" interativos como tab / auto completion ao usar uma IDE como o VSCODE ou "
+"o pycharm (desde que a sua versão do pip seja atual!)."
#: ../../package-structure-code/python-package-build-tools.md:478
msgid ""
@@ -3964,30 +5693,42 @@ msgid ""
"range of packages, it is not as flexible in its adoption of modern Python"
" packaging standards."
msgstr ""
+"Como o **setuptools** precisa manter a compatibilidade retroativa com uma"
+" variedade de pacotes, ele não é tão flexível na adoção dos padrões "
+"modernos de packaging Python."
#: ../../package-structure-code/python-package-build-tools.md:481
msgid ""
"The above-mentioned backwards compatibility makes for a more complex "
"code-base."
msgstr ""
+"A compatibilidade retroativa mencionada acima resulta em uma base de "
+"código mais complexa."
#: ../../package-structure-code/python-package-build-tools.md:482
msgid ""
"Your experience as a user will be less streamlined and simple using "
"setuptools compared to other tools discussed on this page."
msgstr ""
+"A sua experiência como usuário será menos enxuta e simples usando o "
+"setuptools em comparação com as outras ferramentas discutidas nesta "
+"página."
#: ../../package-structure-code/python-package-build-tools.md:484
msgid ""
"There are also some problematic default settings that users should be "
"aware of when using setuptools. For instance:"
msgstr ""
+"Há também algumas configurações padrão problemáticas que os usuários "
+"devem conhecer ao usar o setuptools. Por exemplo:"
#: ../../package-structure-code/python-package-build-tools.md:487
msgid ""
"setuptools will build a project without a name or version if you are not "
"using a **pyproject.toml** file to store metadata."
msgstr ""
+"o setuptools construirá um projeto sem nome ou versão se você não estiver"
+" usando um arquivo **pyproject.toml** para armazenar os metadados."
#: ../../package-structure-code/python-package-build-tools.md:489
msgid ""
@@ -3995,10 +5736,13 @@ msgid ""
"if you do not explicitly tell it to exclude files using a **MANIFEST.in**"
" file"
msgstr ""
+"o setuptools também incluirá todos os arquivos do repositório do seu "
+"pacote se você não disser explicitamente para excluir arquivos usando um "
+"arquivo **MANIFEST.in**"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:1
msgid "Learn about Building a Python Package"
-msgstr ""
+msgstr "Aprenda sobre como construir um pacote Python"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:8
msgid ""
@@ -4008,6 +5752,11 @@ msgid ""
"build your package on conda-forge. You do not need to rebuild your "
"package to publish to conda-forge."
msgstr ""
+"Depois que você tiver publicado ambas as distribuições do pacote (a "
+"distribuição de código-fonte e a wheel) no PyPI, você pode então publicar"
+" no conda-forge. O conda-forge requer uma distribuição de código-fonte no"
+" PyPI para construir o seu pacote no conda-forge. Você não precisa "
+"reconstruir o seu pacote para publicar no conda-forge."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:11
msgid ""
@@ -4018,20 +5767,29 @@ msgid ""
"PyPI in order for conda-forge to properly build your package "
"automatically."
msgstr ""
+"Você precisa construir o seu pacote Python para publicá-lo no PyPI (ou em"
+" um canal conda). O processo de build organiza o seu código e os "
+"metadados em um formato de distribuição que pode ser enviado ao PyPI e, "
+"posteriormente, baixado e instalado pelos usuários. NOTA: você precisa "
+"publicar um sdist no PyPI para que o conda-forge construa o seu pacote "
+"corretamente de forma automática."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:14
msgid "What is building a Python package?"
-msgstr ""
+msgstr "O que é construir um pacote Python?"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:16
msgid ""
"To [publish your Python package](publish-python-package-pypi-conda) and "
"make it easy for anyone to install, you first need to build it."
msgstr ""
+"Para [publicar o seu pacote Python](publish-python-package-pypi-conda) e "
+"facilitar a instalação para qualquer pessoa, você primeiro precisa "
+"construí-lo."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:18
msgid "But, what does it mean to build a Python package?"
-msgstr ""
+msgstr "Mas o que significa construir um pacote Python?"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:20
msgid ""
@@ -4041,6 +5799,12 @@ msgid ""
"and metadata about the package, in the format required by the Python "
"Package Index, so that it can be installed by tools like pip."
msgstr ""
+"[Como mostrado na figura acima](#pypi-conda-channels), quando você "
+"constrói o seu pacote Python, você converte os arquivos de código-fonte "
+"em algo chamado de pacote de distribuição. Um pacote de distribuição "
+"contém o seu código-fonte e metadados sobre o pacote, no formato exigido "
+"pelo Python Package Index, para que ele possa ser instalado por "
+"ferramentas como o pip."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:23
msgid ""
@@ -4049,6 +5813,10 @@ msgid ""
" Authority](https://www.pypa.io/en/latest/) and refer to the product of "
"the build step as a **distribution package**."
msgstr ""
+"O termo pacote costumava significar muitas coisas diferentes em Python e "
+"em outras linguagens. Nesta página, adotamos a convenção da [Python "
+"Packaging Authority](https://www.pypa.io/en/latest/) e nos referimos ao "
+"produto da etapa de build como um **pacote de distribuição**."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:27
msgid ""
@@ -4056,10 +5824,13 @@ msgid ""
" and metadata into a format that both pip and PyPI can use, is called a "
"build step."
msgstr ""
+"Esse processo de organizar e formatar o seu código, documentação, testes "
+"e metadados em um formato que tanto o pip quanto o PyPI possam usar é "
+"chamado de etapa de build."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:31
msgid "Project metadata and PyPI"
-msgstr ""
+msgstr "Metadados do projeto e o PyPI"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:33
msgid ""
@@ -4068,6 +5839,10 @@ msgid ""
"](pyproject-toml-python-package-metadata). This metadata is used for "
"several purposes:"
msgstr ""
+"Os metadados que tanto as ferramentas de build quanto o PyPI usam para "
+"descrever e entender o seu pacote geralmente são armazenados em um "
+"[arquivo pyproject.toml](pyproject-toml-python-package-metadata). Esses "
+"metadados são usados para várias finalidades:"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:35
msgid ""
@@ -4076,6 +5851,11 @@ msgid ""
"poetry, PDM or Hatch) understand how to build your package. Information "
"it provides to your build tool includes:"
msgstr ""
+"Eles ajudam qualquer ferramenta que você usar para construir o seu pacote"
+" (pip, [o Build da pypa](https://pypi.org/project/build/) ou uma "
+"ferramenta de ponta a ponta como poetry, PDM ou Hatch) a entender como "
+"construir o seu pacote. As informações que eles fornecem à sua ferramenta"
+" de build incluem:"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:37
msgid ""
@@ -4083,12 +5863,17 @@ msgid ""
"[build backend tool](build_backends) you wish to use for creating your "
"sdist and wheel distributions."
msgstr ""
+"A tabela `[build-system]` no seu arquivo pyproject.toml informa ao pip "
+"qual [ferramenta de build backend](build_backends) você deseja usar para "
+"criar as suas distribuições sdist e wheel."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:45
msgid ""
"And the dependencies section of your project table tells the build tool "
"and PyPI what dependencies your project requires."
msgstr ""
+"E a seção de dependências da sua tabela project informa à ferramenta de "
+"build e ao PyPI quais dependências o seu projeto requer."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:54
msgid ""
@@ -4096,6 +5881,10 @@ msgid ""
" you publish on PyPI), it also creates a METADATA file which PyPI can "
"read and use to help users find your package. For example:"
msgstr ""
+"Quando a ferramenta de build cria o arquivo de distribuição do seu pacote"
+" (o arquivo que você publica no PyPI), ela também cria um arquivo "
+"METADATA que o PyPI pode ler e usar para ajudar os usuários a encontrar o"
+" seu pacote. Por exemplo:"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:56
msgid ""
@@ -4104,10 +5893,14 @@ msgid ""
"filter for packages that address different topics or that support "
"specific versions of python."
msgstr ""
+"A seção `classifiers = ` da sua tabela `[project]` no arquivo "
+"pyproject.toml fornece informações que os usuários no PyPI podem usar "
+"para filtrar pacotes que abordam diferentes tópicos ou que dão suporte a "
+"versões específicas do python."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:72
msgid "What happened to setup.py and setup.cfg for metadata?"
-msgstr ""
+msgstr "O que aconteceu com o setup.py e o setup.cfg para metadados?"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:75
msgid ""
@@ -4116,10 +5909,15 @@ msgid ""
"metadata is to use a pyproject.toml file. [Learn more about the "
"pyproject.toml file here.](pyproject-toml-python-package-metadata)"
msgstr ""
+"Os metadados do projeto costumavam ser armazenados em um arquivo setup.py"
+" ou em um arquivo setup.cfg. A prática recomendada atualmente para "
+"armazenar os metadados do pacote é usar um arquivo pyproject.toml. [Saiba"
+" mais sobre o arquivo pyproject.toml aqui.](pyproject-toml-python-"
+"package-metadata)"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:78
msgid "An example - xclim"
-msgstr ""
+msgstr "Um exemplo - xclim"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:80
msgid ""
@@ -4135,6 +5933,18 @@ msgid ""
"distribution file that allows PyPI to read the metadata and print it out "
"on their website."
msgstr ""
+"Quando você publica no PyPI, vai notar que cada pacote tem metadados "
+"listados. Vamos dar uma olhada no "
+"[xclim](https://pypi.org/project/xclim/), um dos nossos [pacotes do "
+"pyOpenSci](https://www.pyopensci.org/python-packages.html). Note que na "
+"página inicial do PyPI você vê alguns metadados sobre o pacote, incluindo"
+" python, informações do mantenedor e mais. O PyPI consegue preencher "
+"esses metadados porque eles foram definidos usando a sintaxe e os "
+"classifiers corretos pelos mantenedores do Xclim, [arquivo "
+"pyproject.toml](https://github.com/Ouranosinc/xclim/blob/master/pyproject.toml)."
+" Esses metadados, quando o pacote xclim é construído, são traduzidos em "
+"um arquivo de distribuição que permite ao PyPI ler os metadados e exibi-"
+"los no site deles."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:93
msgid ""
@@ -4147,6 +5957,15 @@ msgid ""
"connect to conda-forge for an automated build that sends distributions "
"from PyPI to conda-forge."
msgstr ""
+"Gráfico mostrando o fluxo de trabalho de packaging em alto nível. À "
+"esquerda você vê um gráfico com código, metadados e testes nele. Todos "
+"esses itens entram no seu pacote. Documentação e dados estão abaixo dessa"
+" caixa porque normalmente não são publicados na distribuição wheel do seu"
+" packaging. Uma seta para a direita leva você a uma caixa de construir "
+"arquivos de distribuição. Essa caixa leva você a publicar no TestPyPI ou "
+"no PyPI de verdade. A partir do PyPI, você pode então se conectar ao "
+"conda-forge para uma build automatizada que envia as distribuições do "
+"PyPI para o conda-forge."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:95
msgid ""
@@ -4157,6 +5976,12 @@ msgid ""
"PyPI in order for conda-forge to properly build your package "
"automatically."
msgstr ""
+"Você precisa construir o seu pacote Python para publicá-lo no PyPI (ou no"
+" Conda). O processo de build organiza o seu código e os metadados em um "
+"formato de distribuição que pode ser enviado ao PyPI e, posteriormente, "
+"baixado e instalado pelos usuários. NOTA: você precisa publicar um sdist "
+"no PyPI para que o conda-forge construa o seu pacote corretamente de "
+"forma automática."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:100
msgid ""
@@ -4165,10 +5990,14 @@ msgid ""
"keywords associated with the package and the base python version it "
"requires which is 3.8."
msgstr ""
+"Esta captura de tela mostra os metadados no PyPI para o pacote xclim. "
+"Nela você pode ver o nome da licença, os nomes do autor e do mantenedor, "
+"as palavras-chave associadas ao pacote e a versão base do python que ele "
+"requer, que é a 3.8."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:102
msgid "PyPI screenshot showing metadata for the xclim package."
-msgstr ""
+msgstr "Captura de tela do PyPI mostrando os metadados para o pacote xclim."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:109
msgid ""
@@ -4176,6 +6005,9 @@ msgid ""
"xclim there are three maintainers listed with their profile pictures and "
"github user names to the right."
msgstr ""
+"Aqui você vê os metadados do mantenedor como são exibidos no PyPI. Para o"
+" xclim, há três mantenedores listados com suas fotos de perfil e nomes de"
+" usuário do github à direita."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:111
msgid ""
@@ -4184,10 +6016,14 @@ msgid ""
"and then processed by your build tool and stored in your packages sdist "
"and wheel distributions."
msgstr ""
+"Nomes dos mantenedores e nomes de usuário do GitHub para o pacote xclim "
+"como são exibidos no PyPI. Essa informação é registrada no seu "
+"pyproject.toml e então processada pela sua ferramenta de build e "
+"armazenada nas distribuições sdist e wheel do seu pacote."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:114
msgid "How to create the distribution format that PyPI and Pip expects?"
-msgstr ""
+msgstr "Como criar o formato de distribuição que o PyPI e o Pip esperam?"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:116
msgid ""
@@ -4197,6 +6033,11 @@ msgid ""
"there are packages and tools that help you create package build "
"distribution files."
msgstr ""
+"Em teoria, você poderia criar os seus próprios scripts para organizar o "
+"seu código da forma que o PyPI deseja. No entanto, assim como há pacotes "
+"que lidam com estruturas conhecidas, como o Pandas para data frames e o "
+"Numpy para arrays, há pacotes e ferramentas que ajudam você a criar os "
+"arquivos de distribuição de build do pacote."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:120
msgid ""
@@ -4206,6 +6047,12 @@ msgid ""
"your sdist and wheel. Whereas tools like Hatch, PDM, Poetry and flit help"
" with other parts of the packaging process."
msgstr ""
+"Há um conjunto de ferramentas de packaging que podem ajudar você com todo"
+" o processo de packaging ou apenas com uma etapa do processo. Por "
+"exemplo, o setuptools é um back-end de build comumente usado que pode ser"
+" utilizado para criar o seu sdist e a sua wheel. Enquanto ferramentas "
+"como Hatch, PDM, Poetry e flit ajudam com outras partes do processo de "
+"packaging."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:126
msgid ""
@@ -4214,6 +6061,11 @@ msgid ""
"output (with minor differences that most users may not care about). Learn"
" more about those tools on this page."
msgstr ""
+"Embora isso possa causar alguma confusão e complexidade no ecossistema de"
+" packaging - na maioria das vezes, cada ferramenta fornece a mesma saída "
+"de distribuição (com pequenas diferenças com as quais a maioria dos "
+"usuários pode não se importar). Saiba mais sobre essas ferramentas nesta "
+"página."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:132
msgid ""
@@ -4221,6 +6073,9 @@ msgid ""
"you to publish: sdist and wheel. You will learn about their structure and"
" what files belong in each."
msgstr ""
+"Abaixo, você aprenderá sobre os dois arquivos de distribuição que o PyPI "
+"espera que você publique: sdist e wheel. Você aprenderá sobre a estrutura"
+" deles e quais arquivos pertencem a cada um."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:135
msgid ""
@@ -4230,10 +6085,16 @@ msgid ""
"wheel (.whl) contains the built / compiled files that can be directly "
"installed onto anyones' computer."
msgstr ""
+"Há dois arquivos de distribuição principais que você precisa criar para "
+"publicar o seu pacote Python no PyPI: a distribuição de código-fonte "
+"(frequentemente chamada de sdist) e a wheel. O sdist contém o código-"
+"fonte bruto do seu pacote. A wheel (.whl) contém os arquivos construídos "
+"/ compilados que podem ser instalados diretamente no computador de "
+"qualquer pessoa."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:141
msgid "Learn more about both distributions below."
-msgstr ""
+msgstr "Saiba mais sobre ambas as distribuições abaixo."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:144
msgid ""
@@ -4243,6 +6104,11 @@ msgid ""
"languages or is more complex in its build, the two distributions will be "
"very different."
msgstr ""
+"Se o seu pacote é um pacote Python puro sem etapas adicionais de build / "
+"compilação, então as distribuições sdist e wheel terão conteúdo "
+"semelhante. No entanto, se o seu pacote tem extensões em outras "
+"linguagens ou é mais complexo na sua build, as duas distribuições serão "
+"muito diferentes."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:149
msgid ""
@@ -4251,10 +6117,14 @@ msgid ""
"here.](https://docs.conda.io/projects/conda-build/en/latest/user-"
"guide/tutorials/index.html)"
msgstr ""
+"Observe também que não estamos discutindo fluxos de trabalho de build do "
+"conda nesta seção. [Você pode aprender mais sobre builds do conda "
+"aqui.](https://docs.conda.io/projects/conda-build/en/latest/user-"
+"guide/tutorials/index.html)"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:154
msgid "What is a source distribution (sdist)"
-msgstr ""
+msgstr "O que é uma distribuição de código-fonte (sdist)"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:156
msgid ""
@@ -4262,6 +6132,10 @@ msgid ""
"These are the \"raw / as-is\" files that you store on GitHub or whatever "
"platform you use to manage your code."
msgstr ""
+"**Arquivos de código-fonte** são os arquivos não construídos necessários "
+"para construir o seu pacote. Estes são os arquivos \"brutos / como "
+"estão\" que você armazena no GitHub ou em qualquer plataforma que você "
+"usa para gerenciar o seu código."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:160
msgid ""
@@ -4273,6 +6147,14 @@ msgid ""
"everything required to build a wheel (except for project dependencies) "
"without network access."
msgstr ""
+"As Distribuições de Código-Fonte (**S** + **Dist**) são chamadas de "
+"sdist. Como o nome indica, um SDIST contém o código-fonte; ele não foi "
+"construído nem compilado de forma alguma. Assim, quando um usuário "
+"instala a sua distribuição de código-fonte usando o pip, o pip precisa "
+"executar uma etapa de build primeiro. Por esse motivo, você poderia "
+"definir uma distribuição de código-fonte como um arquivo compactado que "
+"contém tudo o que é necessário para construir uma wheel (exceto as "
+"dependências do projeto) sem acesso à rede."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:164
msgid ""
@@ -4280,14 +6162,18 @@ msgid ""
"\"tarball\"). Thus, when a user installs your source distribution using "
"pip, pip needs to run a build step first."
msgstr ""
+"O sdist normalmente é armazenado como um arquivo `.tar.gz` "
+"(frequentemente chamado de \"tarball\"). Assim, quando um usuário instala"
+" a sua distribuição de código-fonte usando o pip, o pip precisa executar "
+"uma etapa de build primeiro."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:166
msgid "Below is an example sdist for the stravalib Python package:"
-msgstr ""
+msgstr "Abaixo está um exemplo de sdist para o pacote Python stravalib:"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:218
msgid "GitHub archive vs sdist"
-msgstr ""
+msgstr "Arquivo do GitHub vs sdist"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:220
msgid ""
@@ -4298,10 +6184,16 @@ msgid ""
"`setuptools_scm` or `hatch_vcs` the sdist may also contain a file that "
"stores the version."
msgstr ""
+"Quando você faz um release no GitHub, ele cria um `git archive` que "
+"contém todos os arquivos do seu repositório do GitHub. Embora esses "
+"arquivos sejam semelhantes a um sdist, esses dois arquivos não são "
+"iguais. O sdist contém alguns outros itens, incluindo um diretório de "
+"metadados e, se você usar o `setuptools_scm` ou o `hatch_vcs`, o sdist "
+"também pode conter um arquivo que armazena a versão."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:228
msgid "What is a Python wheel (whl):"
-msgstr ""
+msgstr "O que é uma wheel Python (whl):"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:230
msgid ""
@@ -4312,6 +6204,12 @@ msgid ""
"may be included in source distributions are not included in wheels "
"because it is a built distribution."
msgstr ""
+"Um arquivo wheel é um arquivo em formato ZIP cujo nome segue um formato "
+"específico (abaixo) e tem a extensão `.whl`. O arquivo `.whl` contém um "
+"conjunto específico de arquivos, incluindo metadados gerados a partir do "
+"arquivo pyproject.toml do seu projeto. O pyproject.toml e outros arquivos"
+" que podem ser incluídos nas distribuições de código-fonte não são "
+"incluídos nas wheels porque ela é uma distribuição construída."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:237
msgid ""
@@ -4323,6 +6221,14 @@ msgid ""
"thus faster to install - particularly if you have a package that requires"
" build steps."
msgstr ""
+"A wheel (.whl) é a sua distribuição binária construída. **Arquivos "
+"binários** são os arquivos de código-fonte construídos / compilados. "
+"Esses arquivos estão prontos para serem instalados. Uma wheel (**.whl**) "
+"é um arquivo **zip** que contém todos os arquivos necessários para "
+"instalar diretamente o seu pacote. Todos os arquivos em uma wheel são "
+"binários - isso significa que o código já está compilado / construído. As"
+" wheels são, portanto, mais rápidas de instalar - especialmente se você "
+"tem um pacote que requer etapas de build."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:239
msgid ""
@@ -4330,12 +6236,18 @@ msgid ""
" as **setup.cfg** or **pyproject.toml**. This distribution is already "
"built so it's ready to install."
msgstr ""
+"A wheel não contém nenhum dos arquivos de configuração do seu pacote, "
+"como o **setup.cfg** ou o **pyproject.toml**. Essa distribuição já está "
+"construída, então está pronta para instalar."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:243
msgid ""
"Because it is built, the wheel file will be faster to install for pure "
"Python projects and can lead to consistent installs across machines."
msgstr ""
+"Por já estar construída, a wheel será mais rápida de instalar para "
+"projetos Python puros e pode levar a instalações consistentes entre "
+"máquinas."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:251
msgid ""
@@ -4344,52 +6256,63 @@ msgid ""
"the wheel bundle are pre built, the user installing doesn't have to worry"
" about malicious code injections when it is installed."
msgstr ""
+"As wheels também são úteis no caso de um pacote precisar de um arquivo "
+"**setup.py** para dar suporte a uma build mais complexa. Nesse caso, como"
+" os arquivos no pacote wheel são pré-construídos, o usuário que faz a "
+"instalação não precisa se preocupar com injeções de código malicioso "
+"durante a instalação."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:258
msgid "The filename of a wheel contains important metadata about your package."
msgstr ""
+"O nome de arquivo de uma wheel contém metadados importantes sobre o seu "
+"pacote."
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:260
msgid "Example: **stravalib-1.1.0.post2-py3-none.whl**"
-msgstr ""
+msgstr "Exemplo: **stravalib-1.1.0.post2-py3-none.whl**"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:262
msgid "name: stravalib"
-msgstr ""
+msgstr "name: stravalib"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:263
msgid "version: 1.1.0"
-msgstr ""
+msgstr "version: 1.1.0"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:264
msgid ""
"build-number: 2 (post2) [(read more about post "
"here)](https://peps.python.org/pep-0440/#post-release-separators)"
msgstr ""
+"build-number: 2 (post2) [(leia mais sobre post "
+"aqui)](https://peps.python.org/pep-0440/#post-release-separators)"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:265
msgid "py3: supports Python 3.x"
-msgstr ""
+msgstr "py3: dá suporte ao Python 3.x"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:266
msgid "none: is not operating system specific (runs on windows, mac, linux)"
msgstr ""
+"none: não é específica de sistema operacional (roda em windows, mac, "
+"linux)"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:267
msgid "any: runs on any computer processor / architecture"
-msgstr ""
+msgstr "any: roda em qualquer processador / arquitetura de computador"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:269
msgid "What a wheel file looks like when unpacked (unzipped):"
-msgstr ""
+msgstr "Como é um arquivo wheel quando descompactado (unzipped):"
#: ../../package-structure-code/python-package-distribution-files-sdist-wheel.md:303
msgid "[Read more about the wheel format here](https://pythonwheels.com/)"
-msgstr ""
+msgstr "[Leia mais sobre o formato wheel aqui](https://pythonwheels.com/)"
#: ../../package-structure-code/python-package-structure.md:1
msgid "Python Package Structure & Layout"
-msgstr ""
+msgstr "Estrutura e Layout de Pacotes Python"
#: ../../package-structure-code/python-package-structure.md:3
msgid ""
@@ -4397,6 +6320,9 @@ msgid ""
"Python packaging ecosystem: src and flat layouts. Both layouts have "
"advantages for different groups of maintainers."
msgstr ""
+"Há dois layouts diferentes que você verá comumente dentro do ecossistema "
+"de packaging Python: os layouts src e flat. Ambos os layouts têm "
+"vantagens para diferentes grupos de mantenedores."
#: ../../package-structure-code/python-package-structure.md:8
msgid ""
@@ -4406,16 +6332,25 @@ msgid ""
"tutorial](https://packaging.python.org/en/latest/tutorials/packaging-"
"projects/)."
msgstr ""
+"Sugerimos fortemente, mas não exigimos, que você use o layout **src/** "
+"(discutido abaixo) para criar o seu pacote Python. Esse layout também é "
+"recomendado no [tutorial do guia de packaging da "
+"PyPA](https://packaging.python.org/en/latest/tutorials/packaging-"
+"projects/)."
#: ../../package-structure-code/python-package-structure.md:12
msgid "pyOpenSci will never require a specific package structure for peer review"
msgstr ""
+"O pyOpenSci nunca exigirá uma estrutura de pacote específica para a "
+"revisão por pares"
#: ../../package-structure-code/python-package-structure.md:15
msgid ""
"We understand that it would take significant effort for existing "
"maintainers to move to a new layout."
msgstr ""
+"Entendemos que seria necessário um esforço significativo para os "
+"mantenedores existentes migrarem para um novo layout."
#: ../../package-structure-code/python-package-structure.md:18
msgid ""
@@ -4424,10 +6359,14 @@ msgid ""
"package has a simple build and might be open to moving to a more fail-"
"proof approach."
msgstr ""
+"A visão geral nesta página apresenta recomendações que consideramos as "
+"melhores para alguém que está começando com o packaging Python ou para "
+"alguém cujo pacote tem uma build simples e que pode estar aberto a migrar"
+" para uma abordagem mais à prova de falhas."
#: ../../package-structure-code/python-package-structure.md:22
msgid "Other resources you can check out:"
-msgstr ""
+msgstr "Outros recursos que você pode conferir:"
#: ../../package-structure-code/python-package-structure.md:24
msgid ""
@@ -4435,30 +6374,38 @@ msgid ""
"layouts](https://packaging.python.org/en/latest/discussions/src-layout-"
"vs-flat-layout/)"
msgstr ""
+"[Visão geral da PyPA sobre os layouts src vs "
+"flat](https://packaging.python.org/en/latest/discussions/src-layout-vs-"
+"flat-layout/)"
#: ../../package-structure-code/python-package-structure.md:27
msgid ""
"You can use tools like Hatch to quickly create a modern Python package "
"structure. Check out our quickstart tutorial:"
msgstr ""
+"Você pode usar ferramentas como o Hatch para criar rapidamente uma "
+"estrutura moderna de pacote Python. Confira o nosso tutorial de início "
+"rápido:"
#: ../../package-structure-code/python-package-structure.md:29
msgid ""
"Want to learn how to create the structure to build your package? Click "
"here."
msgstr ""
+"Quer aprender como criar a estrutura para construir o seu pacote? Clique "
+"aqui."
#: ../../package-structure-code/python-package-structure.md:38
msgid "What is the Python package source layout?"
-msgstr ""
+msgstr "O que é o layout de código-fonte de um pacote Python?"
#: ../../package-structure-code/python-package-structure.md:40
msgid "An example of the **src/package** layout structure is below."
-msgstr ""
+msgstr "Abaixo está um exemplo da estrutura do layout **src/package**."
#: ../../package-structure-code/python-package-structure.md:62
msgid "Note the location of the following directories in the example above:"
-msgstr ""
+msgstr "Observe a localização dos seguintes diretórios no exemplo acima:"
#: ../../package-structure-code/python-package-structure.md:64
msgid ""
@@ -4466,6 +6413,10 @@ msgid ""
"user-facing documentation website. In a **src/** layout docs/ are "
"normally included at the same directory level as the **src/** folder."
msgstr ""
+"**docs/:** Discutido no nosso capítulo sobre documentação, este diretório"
+" contém o site de documentação voltado para o usuário. Em um layout "
+"**src/**, o docs/ normalmente é incluído no mesmo nível de diretório que "
+"a pasta **src/**."
#: ../../package-structure-code/python-package-structure.md:65
msgid ""
@@ -4473,12 +6424,17 @@ msgid ""
"**src/** layout, tests are normally included at the same directory level "
"as the **src/** folder."
msgstr ""
+"**tests/** Este diretório contém os testes para o código do seu projeto. "
+"Em um layout **src/**, os testes normalmente são incluídos no mesmo nível"
+" de diretório que a pasta **src/**."
#: ../../package-structure-code/python-package-structure.md:66
msgid ""
"**src/package/**: this is the directory that contains the code for your "
"Python project. \"Package\" is normally your project's name."
msgstr ""
+"**src/package/**: este é o diretório que contém o código do seu projeto "
+"Python. \"Package\" normalmente é o nome do seu projeto."
#: ../../package-structure-code/python-package-structure.md:68
msgid ""
@@ -4486,58 +6442,63 @@ msgid ""
"files that pyOpenSci requires live in the root of your project directory."
" These files include:"
msgstr ""
+"Também no exemplo acima, observe que todos os arquivos de documentação "
+"principais que o pyOpenSci exige ficam na raiz do diretório do seu "
+"projeto. Esses arquivos incluem:"
#: ../../package-structure-code/python-package-structure.md:72
msgid "CHANGELOG.md"
-msgstr ""
+msgstr "CHANGELOG.md"
#: ../../package-structure-code/python-package-structure.md:73
msgid "CODE_OF_CONDUCT.md"
-msgstr ""
+msgstr "CODE_OF_CONDUCT.md"
#: ../../package-structure-code/python-package-structure.md:74
msgid "CONTRIBUTING.md"
-msgstr ""
+msgstr "CONTRIBUTING.md"
#: ../../package-structure-code/python-package-structure.md:75
msgid "LICENSE.txt"
-msgstr ""
+msgstr "LICENSE.txt"
#: ../../package-structure-code/python-package-structure.md:76
msgid "README.md"
-msgstr ""
+msgstr "README.md"
#: ../../package-structure-code/python-package-structure.md:80
msgid "Click here to read about our packaging documentation requirements."
msgstr ""
+"Clique aqui para ler sobre os nossos requisitos de documentação de "
+"packaging."
#: ../../package-structure-code/python-package-structure.md:87
msgid "Example scientific packages that use **src/package** layout"
-msgstr ""
+msgstr "Exemplos de pacotes científicos que usam o layout **src/package**"
#: ../../package-structure-code/python-package-structure.md:89
msgid "[Sourmash](https://github.com/sourmash-bio/sourmash)"
-msgstr ""
+msgstr "[Sourmash](https://github.com/sourmash-bio/sourmash)"
#: ../../package-structure-code/python-package-structure.md:90
msgid "[bokeh](https://github.com/bokeh/bokeh)"
-msgstr ""
+msgstr "[bokeh](https://github.com/bokeh/bokeh)"
#: ../../package-structure-code/python-package-structure.md:91
msgid "[openscm](https://github.com/openscm/openscm-runner)"
-msgstr ""
+msgstr "[openscm](https://github.com/openscm/openscm-runner)"
#: ../../package-structure-code/python-package-structure.md:92
msgid "[awkward](https://github.com/scikit-hep/awkward)"
-msgstr ""
+msgstr "[awkward](https://github.com/scikit-hep/awkward)"
#: ../../package-structure-code/python-package-structure.md:93
msgid "[poliastro](https://github.com/poliastro/poliastro/)"
-msgstr ""
+msgstr "[poliastro](https://github.com/poliastro/poliastro/)"
#: ../../package-structure-code/python-package-structure.md:98
msgid "The src layout and testing"
-msgstr ""
+msgstr "O layout src e os testes"
#: ../../package-structure-code/python-package-structure.md:100
msgid ""
@@ -4547,6 +6508,12 @@ msgid ""
"files rather than the installed version of your package, you may be "
"missing issues that users encounter when your package is installed."
msgstr ""
+"O benefício de usar o layout **src/package** é que ele garante que os "
+"testes sejam executados contra a versão instalada do seu pacote, em vez "
+"dos arquivos no diretório de trabalho do seu pacote. Se você executar os "
+"seus testes nos seus arquivos em vez da versão instalada do seu pacote, "
+"você pode estar deixando passar problemas que os usuários encontram "
+"quando o seu pacote é instalado."
#: ../../package-structure-code/python-package-structure.md:106
msgid ""
@@ -4555,22 +6522,30 @@ msgid ""
"size slightly smaller, which places a smaller storage burden on PyPI, and"
" makes them faster to fetch."
msgstr ""
+"Se o `tests/` estiver fora do diretório **src/package**, ele não será "
+"incluído na [wheel](python-wheel) do pacote. Isso deixa o tamanho do seu "
+"pacote ligeiramente menor, o que impõe um ônus de armazenamento menor ao "
+"PyPI e os torna mais rápidos de baixar."
#: ../../package-structure-code/python-package-structure.md:108
msgid ""
"[Read more about reasons to use the **src/package** "
"layout](https://hynek.me/articles/testing-packaging/)"
msgstr ""
+"[Leia mais sobre as razões para usar o layout "
+"**src/package**](https://hynek.me/articles/testing-packaging/)"
#: ../../package-structure-code/python-package-structure.md:110
msgid "How Python discovers and prioritizes importing modules"
-msgstr ""
+msgstr "Como o Python descobre e prioriza a importação de módulos"
#: ../../package-structure-code/python-package-structure.md:112
msgid ""
"By default, Python adds a module in your current working directory to the"
" front of the Python module search path."
msgstr ""
+"Por padrão, o Python adiciona um módulo do seu diretório de trabalho "
+"atual ao início do caminho de busca de módulos do Python."
#: ../../package-structure-code/python-package-structure.md:114
msgid ""
@@ -4579,6 +6554,10 @@ msgid ""
"discover `package/module.py` file before it discovers the installed "
"package."
msgstr ""
+"Isso significa que, se você executar os seus testes no diretório de "
+"trabalho do seu pacote, usando um layout flat, `/package/module.py`, o "
+"Python descobrirá o arquivo `package/module.py` antes de descobrir o "
+"pacote instalado."
#: ../../package-structure-code/python-package-structure.md:116
msgid ""
@@ -4587,6 +6566,10 @@ msgid ""
"This means that when you import your package, Python will be forced to "
"search the active environment (which has your package installed)."
msgstr ""
+"No entanto, se o seu pacote ficar em uma estrutura de diretório src/ "
+"**src/package**, então ele não será adicionado ao caminho do Python por "
+"padrão. Isso significa que, quando você importar o seu pacote, o Python "
+"será forçado a buscar no ambiente ativo (que tem o seu pacote instalado)."
#: ../../package-structure-code/python-package-structure.md:118
msgid ""
@@ -4594,10 +6577,13 @@ msgid ""
"adjusted to ensure the priority is to use installed packages first (e.g.,"
" `PYTHONSAFEPATH`)."
msgstr ""
+"Nota: As versões 3.11 e superiores do Python têm uma configuração de "
+"caminho que pode ser ajustada para garantir que a prioridade seja usar "
+"primeiro os pacotes instalados (por exemplo, `PYTHONSAFEPATH`)."
#: ../../package-structure-code/python-package-structure.md:121
msgid "Don't include tests in your package wheel"
-msgstr ""
+msgstr "Não inclua os testes na wheel do seu pacote"
#: ../../package-structure-code/python-package-structure.md:123
msgid ""
@@ -4611,6 +6597,16 @@ msgid ""
"`tests/` directory into the **src/package** directory (see example "
"below)."
msgstr ""
+"Escrever [testes](tests-intro) para o seu pacote é importante; no "
+"entanto, por padrão, não recomendamos incluir os testes como parte da "
+"[wheel do seu pacote](python-wheel). Por outro lado, não incluir os "
+"testes na distribuição do seu pacote tornará mais difícil para outras "
+"pessoas, além de você, testar se o seu pacote roda corretamente no "
+"sistema delas. Se você tem um conjunto de testes pequeno (arquivos Python"
+" + dados) e acha que os seus usuários podem querer executar os testes "
+"localmente em seus sistemas, você pode incluir os testes movendo o "
+"diretório `tests/` para dentro do diretório **src/package** (veja o "
+"exemplo abaixo)."
#: ../../package-structure-code/python-package-structure.md:132
msgid ""
@@ -4618,6 +6614,8 @@ msgid ""
"ensures that tests will be included in your package's [wheel](python-"
"wheel)."
msgstr ""
+"Incluir o diretório **tests/** no seu diretório **src/package** garante "
+"que os testes sejam incluídos na [wheel](python-wheel) do seu pacote."
#: ../../package-structure-code/python-package-structure.md:134
msgid ""
@@ -4626,36 +6624,50 @@ msgid ""
"distribution](https://docs.pytest.org/en/7.2.x/explanation/goodpractices.html#choosing-a"
"-test-layout-import-rules)."
msgstr ""
+"Certifique-se de ler a [documentação do pytest para saber mais sobre como"
+" incluir os testes na distribuição do seu "
+"pacote](https://docs.pytest.org/en/7.2.x/explanation/goodpractices.html#choosing-a"
+"-test-layout-import-rules)."
#: ../../package-structure-code/python-package-structure.md:136
msgid "Challenges with including tests and data in a package wheel"
-msgstr ""
+msgstr "Desafios ao incluir testes e dados em uma wheel de pacote"
#: ../../package-structure-code/python-package-structure.md:139
msgid ""
"Tests, especially when accompanied by test data, can create a few small "
"challenges, including:"
msgstr ""
+"Os testes, especialmente quando acompanhados de dados de teste, podem "
+"criar alguns pequenos desafios, incluindo:"
#: ../../package-structure-code/python-package-structure.md:141
msgid ""
"Take up space in your distribution, which will build up over time as "
"storage space on PyPI"
msgstr ""
+"Ocupar espaço na sua distribuição, que se acumulará com o tempo como "
+"espaço de armazenamento no PyPI"
#: ../../package-structure-code/python-package-structure.md:142
msgid "Large file sizes can also slow down package installation."
msgstr ""
+"Arquivos de tamanho grande também podem deixar a instalação do pacote "
+"mais lenta."
#: ../../package-structure-code/python-package-structure.md:144
msgid ""
"However, in some cases, particularly in the scientific Python ecosystem, "
"you may need to include tests."
msgstr ""
+"No entanto, em alguns casos, particularmente no ecossistema científico do"
+" Python, você pode precisar incluir os testes."
#: ../../package-structure-code/python-package-structure.md:147
msgid "**Don't include test suite datasets in your package**"
msgstr ""
+"**Não inclua os conjuntos de dados do seu conjunto de testes no seu "
+"pacote**"
#: ../../package-structure-code/python-package-structure.md:149
msgid ""
@@ -4665,12 +6677,20 @@ msgid ""
"tool such as [Pooch](https://www.fatiando.org/pooch/latest/) to access "
"the data when you (or a user) runs tests."
msgstr ""
+"Se você incluir os seus testes na distribuição do seu pacote, "
+"desencorajamos fortemente que você inclua dados no diretório do seu "
+"conjunto de testes. Em vez disso, hospede os seus dados de teste em um "
+"repositório como o Figshare ou o Zenodo. Use uma ferramenta como o "
+"[Pooch](https://www.fatiando.org/pooch/latest/) para acessar os dados "
+"quando você (ou um usuário) executar os testes."
#: ../../package-structure-code/python-package-structure.md:155
msgid ""
"For more information about Python package tests, see the [tests section "
"of our guide](tests-intro)."
msgstr ""
+"Para mais informações sobre testes de pacotes Python, veja a [seção de "
+"testes do nosso guia](tests-intro)."
#: ../../package-structure-code/python-package-structure.md:157
msgid ""
@@ -4678,6 +6698,9 @@ msgid ""
"found in the **src/package** directory, `tests/` and `docs/`are in the "
"root directory."
msgstr ""
+"O layout **src/package** é semanticamente mais claro. O código é sempre "
+"encontrado no diretório **src/package**, e o `tests/` e o `docs/` ficam "
+"no diretório raiz."
#: ../../package-structure-code/python-package-structure.md:161
msgid ""
@@ -4687,24 +6710,33 @@ msgid ""
"repositories like PyPI and Anaconda.org that have to deal with thousands "
"of package uploads."
msgstr ""
+"Se os testes do seu pacote requerem dados, NÃO inclua esses dados dentro "
+"da estrutura do seu pacote. Incluir dados na estrutura do seu pacote "
+"aumenta o tamanho dos seus arquivos de distribuição. Isso impõe um ônus "
+"de manutenção a repositórios como o PyPI e o Anaconda.org, que precisam "
+"lidar com milhares de envios de pacotes."
#: ../../package-structure-code/python-package-structure.md:167
msgid "Click here for a quickstart tutorial on creating your Python package."
msgstr ""
+"Clique aqui para ver um tutorial de início rápido sobre como criar o seu "
+"pacote Python."
#: ../../package-structure-code/python-package-structure.md:176
msgid "What is the flat Python package layout?"
-msgstr ""
+msgstr "O que é o layout flat de pacote Python?"
#: ../../package-structure-code/python-package-structure.md:178
msgid "Many scientific packages use the **flat-layout** given:"
-msgstr ""
+msgstr "Muitos pacotes científicos usam o **flat-layout** porque:"
#: ../../package-structure-code/python-package-structure.md:180
msgid ""
"This layout is used by many core scientific Python packages such as "
"NumPy, SciPy, and Matplotlib."
msgstr ""
+"Esse layout é usado por muitos dos principais pacotes científicos em "
+"Python, como NumPy, SciPy e Matplotlib."
#: ../../package-structure-code/python-package-structure.md:181
msgid ""
@@ -4712,6 +6744,9 @@ msgid ""
"builds with compilation steps. Many maintainers prefer features of the "
"flat layout for more complex builds."
msgstr ""
+"Muitas ferramentas Python dependem de ferramentas em outras linguagens "
+"e/ou de builds complexas com etapas de compilação. Muitos mantenedores "
+"preferem os recursos do layout flat para builds mais complexas."
#: ../../package-structure-code/python-package-structure.md:185
msgid ""
@@ -4719,16 +6754,21 @@ msgid ""
" it's important to also understand the flat layout, especially if you "
"plan to contribute to a package that uses this layout."
msgstr ""
+"Embora sugiramos que você use o layout **src/package** discutido acima, é"
+" importante entender também o layout flat, especialmente se você planeja "
+"contribuir com um pacote que usa esse layout."
#: ../../package-structure-code/python-package-structure.md:188
msgid "Why most scientific Python packages do not use src/ layout"
-msgstr ""
+msgstr "Por que a maioria dos pacotes científicos em Python não usa o layout src/"
#: ../../package-structure-code/python-package-structure.md:191
msgid ""
"Migrating larger scientific packages that already use a flat layout would"
" consume significant time and resources."
msgstr ""
+"Migrar pacotes científicos maiores que já usam um layout flat consumiria "
+"tempo e recursos significativos."
#: ../../package-structure-code/python-package-structure.md:193
msgid ""
@@ -4736,6 +6776,9 @@ msgid ""
"beginner are significant. As such, we recommend that you use the "
"**src/package** layout if you are creating a new package."
msgstr ""
+"No entanto, as vantagens de usar o layout **src/package** para um "
+"iniciante são significativas. Por isso, recomendamos que você use o "
+"layout **src/package** se estiver criando um novo pacote."
#: ../../package-structure-code/python-package-structure.md:196
msgid ""
@@ -4743,48 +6786,59 @@ msgid ""
" layout](https://github.com/scikit-build/cmake-python-"
"distributions/pull/145)."
msgstr ""
+"Diversos pacotes no ecossistema [tiveram que migrar para um layout "
+"**src/package**](https://github.com/scikit-build/cmake-python-"
+"distributions/pull/145)."
#: ../../package-structure-code/python-package-structure.md:200
msgid "What does the flat layout structure look like?"
-msgstr ""
+msgstr "Como é a estrutura do layout flat?"
#: ../../package-structure-code/python-package-structure.md:202
msgid "The flat layout's primary characteristics are:"
-msgstr ""
+msgstr "As principais características do layout flat são:"
#: ../../package-structure-code/python-package-structure.md:204
msgid ""
"The source code for your package lives in a directory with your package's"
" name in the root of your directory"
msgstr ""
+"O código-fonte do seu pacote fica em um diretório com o nome do seu "
+"pacote na raiz do seu diretório"
#: ../../package-structure-code/python-package-structure.md:206
msgid ""
"Often the `tests/` directory also lives within that same `package` "
"directory."
msgstr ""
+"Frequentemente, o diretório `tests/` também fica dentro desse mesmo "
+"diretório `package`."
#: ../../package-structure-code/python-package-structure.md:208
msgid ""
"Below you can see the recommended structure of a scientific Python "
"package using the flat layout."
msgstr ""
+"Abaixo você pode ver a estrutura recomendada de um pacote científico em "
+"Python usando o layout flat."
#: ../../package-structure-code/python-package-structure.md:230
msgid "Benefits of using the flat layout in your Python package"
-msgstr ""
+msgstr "Benefícios de usar o layout flat no seu pacote Python"
#: ../../package-structure-code/python-package-structure.md:232
msgid ""
"There are some benefits to the scientific community in using the flat "
"layout."
-msgstr ""
+msgstr "Há alguns benefícios para a comunidade científica em usar o layout flat."
#: ../../package-structure-code/python-package-structure.md:234
msgid ""
"This structure has historically been used across the ecosystem and "
"packages using it are unlikely to change."
msgstr ""
+"Essa estrutura tem sido historicamente usada em todo o ecossistema e é "
+"improvável que os pacotes que a utilizam mudem."
#: ../../package-structure-code/python-package-structure.md:236
msgid ""
@@ -4794,38 +6848,43 @@ msgid ""
"against the installed version of your package. Rather, you are working "
"directly with the flat files."
msgstr ""
+"Você pode importar o pacote diretamente do diretório raiz. Para alguns, "
+"isso está enraizado em seus respectivos fluxos de trabalho. No entanto, "
+"para um iniciante, o perigo de fazer isso é que você não está "
+"desenvolvendo e testando contra a versão instalada do seu pacote. Em vez "
+"disso, você está trabalhando diretamente com os arquivos flat."
#: ../../package-structure-code/python-package-structure.md:242
msgid "Core scientific Python packages that use the flat layout"
-msgstr ""
+msgstr "Principais pacotes científicos em Python que usam o layout flat"
#: ../../package-structure-code/python-package-structure.md:245
msgid "[numpy](https://github.com/numpy/numpy)"
-msgstr ""
+msgstr "[numpy](https://github.com/numpy/numpy)"
#: ../../package-structure-code/python-package-structure.md:246
msgid "[scipy](https://github.com/scipy/scipy)"
-msgstr ""
+msgstr "[scipy](https://github.com/scipy/scipy)"
#: ../../package-structure-code/python-package-structure.md:247
msgid "[pandas](https://github.com/pandas-dev/pandas)"
-msgstr ""
+msgstr "[pandas](https://github.com/pandas-dev/pandas)"
#: ../../package-structure-code/python-package-structure.md:248
msgid "[xarray](https://github.com/pydata/xarray)"
-msgstr ""
+msgstr "[xarray](https://github.com/pydata/xarray)"
#: ../../package-structure-code/python-package-structure.md:249
msgid "[Jupyter-core](https://github.com/jupyter/jupyter_core)"
-msgstr ""
+msgstr "[Jupyter-core](https://github.com/jupyter/jupyter_core)"
#: ../../package-structure-code/python-package-structure.md:250
msgid "[Jupyter notebook](https://github.com/jupyter/notebook)"
-msgstr ""
+msgstr "[Jupyter notebook](https://github.com/jupyter/notebook)"
#: ../../package-structure-code/python-package-structure.md:251
msgid "[scikit-learn](https://github.com/scikit-learn/scikit-learn)"
-msgstr ""
+msgstr "[scikit-learn](https://github.com/scikit-learn/scikit-learn)"
#: ../../package-structure-code/python-package-structure.md:253
msgid ""
@@ -4833,10 +6892,14 @@ msgid ""
"these packages to a different layout. The potential benefits of the "
"source layout for these tools are not worth the maintenance investment."
msgstr ""
+"Seria um custo e um ônus de manutenção significativo migrar todos esses "
+"pacotes para um layout diferente. Os benefícios potenciais do layout de "
+"código-fonte para essas ferramentas não valem o investimento de "
+"manutenção."
#: ../../package-structure-code/python-package-structure.md:258
msgid "Multiple packages in a src/ folder"
-msgstr ""
+msgstr "Múltiplos pacotes em uma pasta src/"
#: ../../package-structure-code/python-package-structure.md:261
msgid ""
@@ -4846,14 +6909,19 @@ msgid ""
" However, for most beginners you will likely only have one sub-directory "
"in your **src/** folder."
msgstr ""
+"Em alguns casos mais avançados, você pode ter mais de um pacote no seu "
+"diretório **src/**. Veja o [repositório do Black no "
+"GitHub](https://github.com/psf/black/tree/main/src) para ver um exemplo "
+"disso. No entanto, para a maioria dos iniciantes, você provavelmente terá"
+" apenas um subdiretório na sua pasta **src/**."
#: ../../package-structure-code/python-package-versions.md:1
msgid "Creating New Versions of Your Python Package"
-msgstr ""
+msgstr "Criando Novas Versões do Seu Pacote Python"
#: ../../package-structure-code/python-package-versions.md:6
msgid "Key Takeways"
-msgstr ""
+msgstr "Principais Conclusões"
#: ../../package-structure-code/python-package-versions.md:8
msgid ""
@@ -4862,6 +6930,11 @@ msgid ""
"package version; for example a major version bump (version 1.0 --> 2.0) "
"equates to breaking changes in your package's code for a user."
msgstr ""
+"Siga as [diretrizes de versionamento semântico "
+"(SemVer)](https://semver.org/) ao incrementar (aumentar) a versão do seu "
+"pacote Python; por exemplo, um incremento de versão major (versão 1.0 -->"
+" 2.0) equivale a mudanças que quebram a compatibilidade no código do seu "
+"pacote para um usuário."
#: ../../package-structure-code/python-package-versions.md:9
msgid ""
@@ -4869,16 +6942,24 @@ msgid ""
"versions of your package - if you want to have a GitHub only release "
"workflow."
msgstr ""
+"Você pode querer considerar usar um plugin como o hatch_vsc para "
+"gerenciar as versões do seu pacote - se você quiser ter um fluxo de "
+"trabalho de release apenas no GitHub."
#: ../../package-structure-code/python-package-versions.md:10
msgid ""
"Otherwise most major package build tools such as Hatch, Flit and PDM have"
" a version feature that will help you update your package's version"
msgstr ""
+"Caso contrário, a maioria das principais ferramentas de build de pacotes,"
+" como Hatch, Flit e PDM, tem um recurso de versão que ajudará você a "
+"atualizar a versão do seu pacote"
#: ../../package-structure-code/python-package-versions.md:11
msgid "Avoid updating your packages version number manually by hand in your code!"
msgstr ""
+"Evite atualizar o número de versão do seu pacote manualmente, à mão, no "
+"seu código!"
#: ../../package-structure-code/python-package-versions.md:14
msgid ""
@@ -4888,6 +6969,11 @@ msgid ""
"/#semantic-versioning) when assigning release values to new versions of "
"your Python package."
msgstr ""
+"O pyOpenSci recomenda que você siga a [PEP 440 do "
+"Python](https://peps.python.org/pep-0440), que recomenda usar as "
+"[diretrizes de versionamento "
+"semântico](https://www.python.org/dev/peps/pep-0440/#semantic-versioning)"
+" ao atribuir valores de release a novas versões do seu pacote Python."
#: ../../package-structure-code/python-package-versions.md:18
msgid ""
@@ -4896,18 +6982,27 @@ msgid ""
"are making to the package code. Being consistent with how and when you "
"update your package versions is important as:"
msgstr ""
+"O [versionamento semântico](https://semver.org/) é uma abordagem para "
+"atualizar as versões de um pacote que considera o tipo e a extensão de "
+"uma mudança que você está fazendo no código do pacote. Ser consistente "
+"com como e quando você atualiza as versões do seu pacote é importante "
+"porque:"
#: ../../package-structure-code/python-package-versions.md:23
msgid ""
"It helps your users (which might include other developers that depend on "
"your package) understand the extent of changes to a package."
msgstr ""
+"Ajuda os seus usuários (que podem incluir outros desenvolvedores que "
+"dependem do seu pacote) a entender a extensão das mudanças em um pacote."
#: ../../package-structure-code/python-package-versions.md:24
msgid ""
"It helps your development team make decisions about when to bump a "
"package version based on standard rules."
msgstr ""
+"Ajuda a sua equipe de desenvolvimento a tomar decisões sobre quando "
+"incrementar a versão de um pacote com base em regras padrão."
#: ../../package-structure-code/python-package-versions.md:26
msgid ""
@@ -4918,10 +7013,17 @@ msgid ""
"code expressive](https://medium.com/@daniel.oliver.king/writing-"
"expressive-code-b69ef7a5a2fa)."
msgstr ""
+"Aumentos de versão consistentes que seguem as regras do semver significam"
+" que os valores da versão do seu pacote explicam a extensão das mudanças "
+"feitas na base de código de uma versão para outra. Assim, os números de "
+"versão do seu pacote tornam-se \"expressivos\" da mesma forma que nomear "
+"bem as variáveis de código pode [tornar o código "
+"expressivo](https://medium.com/@daniel.oliver.king/writing-expressive-"
+"code-b69ef7a5a2fa)."
#: ../../package-structure-code/python-package-versions.md:28
msgid "A note about versioning"
-msgstr ""
+msgstr "Uma nota sobre versionamento"
#: ../../package-structure-code/python-package-versions.md:29
msgid ""
@@ -4930,44 +7032,51 @@ msgid ""
"document how you version your code and if you can, also document your "
"deprecation policy for code."
msgstr ""
+"Em alguns casos, até mesmo pequenas mudanças de versão podem transformar "
+"uma atualização de pacote em uma mudança que quebra a compatibilidade "
+"para alguns usuários. O que também é importante é que você documente como"
+" versiona o seu código e, se possível, também documente a sua política de"
+" depreciação de código."
#: ../../package-structure-code/python-package-versions.md:38
msgid "SemVer rules"
-msgstr ""
+msgstr "Regras do SemVer"
#: ../../package-structure-code/python-package-versions.md:40
msgid "Following SemVer, your bump your package version to a:"
-msgstr ""
+msgstr "Seguindo o SemVer, você incrementa a versão do seu pacote para um:"
#: ../../package-structure-code/python-package-versions.md:42
msgid "patch (1.1.1 --> 1.1.**2**)"
-msgstr ""
+msgstr "patch (1.1.1 --> 1.1.**2**)"
#: ../../package-structure-code/python-package-versions.md:43
msgid "minor (1.1.1 --> 1.**2**.1)"
-msgstr ""
+msgstr "minor (1.1.1 --> 1.**2**.1)"
#: ../../package-structure-code/python-package-versions.md:44
msgid "major (1.1.1 --> **2**.1.1)"
-msgstr ""
+msgstr "major (1.1.1 --> **2**.1.1)"
#: ../../package-structure-code/python-package-versions.md:46
msgid "version number change based on the following rules:"
-msgstr ""
+msgstr "a mudança do número de versão é baseada nas seguintes regras:"
#: ../../package-structure-code/python-package-versions.md:48
msgid "Given a version number MAJOR.MINOR.PATCH, increment the:"
-msgstr ""
+msgstr "Dado um número de versão MAJOR.MINOR.PATCH, incremente o:"
#: ../../package-structure-code/python-package-versions.md:50
msgid "**MAJOR version** when you make incompatible API changes"
-msgstr ""
+msgstr "**versão MAJOR** quando você faz mudanças incompatíveis na API"
#: ../../package-structure-code/python-package-versions.md:51
msgid ""
"**MINOR version** when you add functionality in a backwards compatible "
"manner"
msgstr ""
+"**versão MINOR** quando você adiciona funcionalidade de forma "
+"retrocompatível"
#: ../../package-structure-code/python-package-versions.md:52
msgid ""
@@ -4975,6 +7084,9 @@ msgid ""
" labels for pre-release and build metadata are available as extensions to"
" the MAJOR.MINOR.PATCH format."
msgstr ""
+"**versão PATCH** quando você faz correções de bugs retrocompatíveis. "
+"Rótulos adicionais para pré-release e metadados de build estão "
+"disponíveis como extensões ao formato MAJOR.MINOR.PATCH."
#: ../../package-structure-code/python-package-versions.md:57
msgid ""
@@ -4984,16 +7096,25 @@ msgid ""
"provide a user with a sense of when a new version might break an existing"
" build. As such we still suggest semver."
msgstr ""
+"Algumas pessoas preferem usar o [calver](https://calver.org/index.html) "
+"para o versionamento. Pode ser um sistema mais simples de usar, já que se"
+" baseia em valores de data associados às versões lançadas. No entanto, o "
+"calver não dá ao usuário uma noção de quando uma nova versão pode quebrar"
+" uma build existente. Por isso, ainda sugerimos o semver."
#: ../../package-structure-code/python-package-versions.md:60
msgid ""
"pyOpenSci will never require semver in a peer review as long as a package"
" has a reasonable approach to versioning!"
msgstr ""
+"O pyOpenSci nunca exigirá o semver em uma revisão por pares, desde que um"
+" pacote tenha uma abordagem razoável para o versionamento!"
#: ../../package-structure-code/python-package-versions.md:64
msgid "Avoid manually updating Python package version numbers if you can"
msgstr ""
+"Evite atualizar manualmente os números de versão do pacote Python, se "
+"possível"
#: ../../package-structure-code/python-package-versions.md:66
msgid ""
@@ -5001,6 +7122,9 @@ msgid ""
"locations. One example of this is that it might be both an attribute in "
"your package **version** and also called in your documentation."
msgstr ""
+"Muitas vezes, você pode querer ter o valor da versão do seu pacote em "
+"vários locais. Um exemplo disso é que ele pode ser tanto um atributo na "
+"**versão** do seu pacote quanto também ser chamado na sua documentação."
#: ../../package-structure-code/python-package-versions.md:71
msgid ""
@@ -5008,6 +7132,9 @@ msgid ""
" to avoid human-error. It is better practice to keep your version number "
"in one location."
msgstr ""
+"Recomendamos que você evite atualizações manuais do número de versão do "
+"seu pacote para evitar erros humanos. É uma prática melhor manter o seu "
+"número de versão em um único local."
#: ../../package-structure-code/python-package-versions.md:75
msgid ""
@@ -5015,16 +7142,21 @@ msgid ""
"tool like hatch, PDM or bump2version that will update the version values "
"for you - throughout your package."
msgstr ""
+"Se você não conseguir implementar uma versão em um único local, então "
+"considere usar uma ferramenta como hatch, PDM ou bump2version, que "
+"atualizará os valores de versão para você - em todo o seu pacote."
#: ../../package-structure-code/python-package-versions.md:79
msgid ""
"Below we discuss some tools that you can use to manage updating Python "
"package versions."
msgstr ""
+"Abaixo, discutimos algumas ferramentas que você pode usar para gerenciar "
+"a atualização das versões de pacotes Python."
#: ../../package-structure-code/python-package-versions.md:85
msgid "Tools to manage versions for your Python package"
-msgstr ""
+msgstr "Ferramentas para gerenciar as versões do seu pacote Python"
#: ../../package-structure-code/python-package-versions.md:87
msgid ""
@@ -5033,16 +7165,23 @@ msgid ""
" tools are built into or work with your chosen [packaging build tools "
"that discussed in this chapter.](python-package-build-tools)"
msgstr ""
+"Há um punhado de ferramentas que são amplamente usadas no ecossistema "
+"científico e que você pode usar para gerenciar as versões do seu pacote. "
+"Algumas dessas ferramentas são embutidas ou funcionam com as [ferramentas"
+" de build de packaging que você escolher, discutidas neste capítulo"
+".](python-package-build-tools)"
#: ../../package-structure-code/python-package-versions.md:93
msgid "Below, we provide an overview of these tools."
-msgstr ""
+msgstr "Abaixo, fornecemos uma visão geral dessas ferramentas."
#: ../../package-structure-code/python-package-versions.md:99
msgid ""
"There are three general groups of tools that you can use to manage "
"package versions:"
msgstr ""
+"Há três grupos gerais de ferramentas que você pode usar para gerenciar as"
+" versões de um pacote:"
#: ../../package-structure-code/python-package-versions.md:102
msgid ""
@@ -5052,6 +7191,12 @@ msgid ""
"release.readthedocs.io/en/latest/) as a Python tool that implements a "
"semantic versioning approach."
msgstr ""
+"**ferramentas de semantic release:** Essas ferramentas determinam "
+"automagicamente qual tipo de incremento de versão usar com base no texto "
+"das suas mensagens de commit. Abaixo, discutimos o [Python Semantic "
+"Release](https://python-semantic-release.readthedocs.io/en/latest/) como "
+"uma ferramenta Python que implementa uma abordagem de versionamento "
+"semântico."
#: ../../package-structure-code/python-package-versions.md:104
msgid ""
@@ -5060,6 +7205,11 @@ msgid ""
"within your package. Normally this is implemented at the command link for"
" instance `hatch version major` would bump your project from 0.x to 1.0."
msgstr ""
+"**Ferramentas de incremento manual:** Ferramentas como o "
+"[Hatch](https://hatch.pypa.io/latest/version/) oferecem o incremento de "
+"versão dentro do seu pacote. Normalmente, isso é implementado na linha de"
+" comando; por exemplo, `hatch version major` incrementaria o seu projeto "
+"de 0.x para 1.0."
#: ../../package-structure-code/python-package-versions.md:105
msgid ""
@@ -5069,10 +7219,18 @@ msgid ""
"We discuss this option below assuming that you are using **.git tags** "
"and **GitHub** to manage your package repository."
msgstr ""
+"**Ferramentas de Sistema de Controle de Versão:** Por fim, há ferramentas"
+" que se baseiam no seu sistema de controle de versão para rastrear as "
+"versões. Essas ferramentas costumam ser plugins para a sua ferramenta de "
+"build de pacotes (ex: setuptools build ou hatchling). Discutimos essa "
+"opção abaixo, presumindo que você está usando **.git tags** e o "
+"**GitHub** para gerenciar o repositório do seu pacote."
#: ../../package-structure-code/python-package-versions.md:107
msgid "Semantic release, vs version control based vs manual version bumping"
msgstr ""
+"Semantic release vs. baseado em controle de versão vs. incremento manual "
+"de versão"
#: ../../package-structure-code/python-package-versions.md:109
msgid ""
@@ -5081,18 +7239,23 @@ msgid ""
"can create a workflow where a GitHub release and associated new version "
"tag is used to trigger an automated build that:"
msgstr ""
+"Em geral, as ferramentas de semantic release e de sistema de controle de "
+"versão podem ser configuradas para rodar automaticamente no GitHub usando"
+" o GitHub Actions. Isso significa que você pode criar um fluxo de "
+"trabalho em que um release do GitHub e a nova tag de versão associada são"
+" usados para disparar uma build automatizada que:"
#: ../../package-structure-code/python-package-versions.md:115
msgid "Builds your package and updates the version following the new tag"
-msgstr ""
+msgstr "Constrói o seu pacote e atualiza a versão de acordo com a nova tag"
#: ../../package-structure-code/python-package-versions.md:116
msgid "Tests the build and publishes to test PyPI"
-msgstr ""
+msgstr "Testa a build e publica no test PyPI"
#: ../../package-structure-code/python-package-versions.md:117
msgid "Publishes the package to PyPI"
-msgstr ""
+msgstr "Publica o pacote no PyPI"
#: ../../package-structure-code/python-package-versions.md:120
msgid ""
@@ -5100,46 +7263,56 @@ msgid ""
"version after a set number of changes have been made to it. For example, "
"you might bump from version 0.8 to 0.9 of a package or from 0.9 to 1.0."
msgstr ""
+"Incrementar a versão de um pacote refere-se à etapa de aumentar a versão "
+"do pacote depois que um certo número de mudanças foi feito nele. Por "
+"exemplo, você pode incrementar da versão 0.8 para a 0.9 de um pacote ou "
+"da 0.9 para a 1.0."
#: ../../package-structure-code/python-package-versions.md:124
msgid ""
"Using semantic versioning, there are three main \"levels\" of versions "
"that you might consider:"
msgstr ""
+"Usando o versionamento semântico, há três \"níveis\" principais de "
+"versões que você pode considerar:"
#: ../../package-structure-code/python-package-versions.md:127
msgid "Major, minor and patch. These are described in more detail below."
-msgstr ""
+msgstr "Major, minor e patch. Eles são descritos em mais detalhes abaixo."
#: ../../package-structure-code/python-package-versions.md:130
msgid "Tools for bumping Python package versions"
-msgstr ""
+msgstr "Ferramentas para incrementar as versões de pacotes Python"
#: ../../package-structure-code/python-package-versions.md:132
msgid ""
"In this section we discuss the following tools for managing your Python "
"package's version:"
msgstr ""
+"Nesta seção, discutimos as seguintes ferramentas para gerenciar a versão "
+"do seu pacote Python:"
#: ../../package-structure-code/python-package-versions.md:135
msgid "hatch &"
-msgstr ""
+msgstr "hatch &"
#: ../../package-structure-code/python-package-versions.md:136
msgid "hatch_vcs plugin for hatchling"
-msgstr ""
+msgstr "plugin hatch_vcs para o hatchling"
#: ../../package-structure-code/python-package-versions.md:137
msgid "setuptools-scm"
-msgstr ""
+msgstr "setuptools-scm"
#: ../../package-structure-code/python-package-versions.md:138
msgid "python-semantic-version"
-msgstr ""
+msgstr "python-semantic-version"
#: ../../package-structure-code/python-package-versions.md:140
msgid "Tool 1: Hatch and other build tools that offer incremental versioning"
msgstr ""
+"Ferramenta 1: Hatch e outras ferramentas de build que oferecem "
+"versionamento incremental"
#: ../../package-structure-code/python-package-versions.md:142
msgid ""
@@ -5149,14 +7322,20 @@ msgid ""
"implement version. Rather, they allow you to update the version at the "
"command line using commands such as:"
msgstr ""
+"Muitas das ferramentas de front-end de build modernas oferecem suporte a "
+"versões que seguem as regras de versionamento semântico. Essas "
+"ferramentas são diferentes do Python Semantic Version porque não requerem"
+" mensagens de commit específicas para implementar a versão. Em vez disso,"
+" elas permitem que você atualize a versão na linha de comando usando "
+"comandos como:"
#: ../../package-structure-code/python-package-versions.md:148
msgid "`tool-name version update major`"
-msgstr ""
+msgstr "`tool-name version update major`"
#: ../../package-structure-code/python-package-versions.md:149
msgid "`tool-name version update minor`"
-msgstr ""
+msgstr "`tool-name version update minor`"
#: ../../package-structure-code/python-package-versions.md:151
msgid ""
@@ -5165,28 +7344,34 @@ msgid ""
"incrementally. With **Hatch** the version value will be found in your "
"`pyproject.toml` file. "
msgstr ""
+"O [Hatch](https://hatch.pypa.io/latest/version/), por exemplo, oferece "
+"`hatch version minor`, que modificará a versão do seu pacote de forma "
+"incremental. Com o **Hatch**, o valor da versão será encontrado no seu "
+"arquivo `pyproject.toml`. "
#: ../../package-structure-code/python-package-versions.md:154
msgid "Hatch (or other tools like PDM) pros"
-msgstr ""
+msgstr "Prós do Hatch (ou de outras ferramentas como o PDM)"
#: ../../package-structure-code/python-package-versions.md:156
msgid "Easy to use version updates locally using a single tool!"
-msgstr ""
+msgstr "Atualizações de versão fáceis de usar localmente com uma única ferramenta!"
#: ../../package-structure-code/python-package-versions.md:158
msgid "Hatch (or other tools like PDM) cons"
-msgstr ""
+msgstr "Contras do Hatch (ou de outras ferramentas como o PDM)"
#: ../../package-structure-code/python-package-versions.md:160
msgid ""
"There will be some setup involved to ensure package version is updated "
"throughout your package"
msgstr ""
+"Haverá alguma configuração envolvida para garantir que a versão do pacote"
+" seja atualizada em todo o seu pacote"
#: ../../package-structure-code/python-package-versions.md:162
msgid "Tool 2: Hatch_vcs & hatchling build back-end"
-msgstr ""
+msgstr "Ferramenta 2: Hatch_vcs & o back-end de build hatchling"
#: ../../package-structure-code/python-package-versions.md:164
msgid ""
@@ -5195,6 +7380,10 @@ msgid ""
"creates a **\\_version.py** file in your package ecosystem that keeps "
"track of the package's current version."
msgstr ""
+"O [hatch_vcs](https://github.com/ofek/hatch-vcs) é uma ferramenta de "
+"versionamento que permite gerenciar as versões de um pacote usando **git "
+"tags**. O Hatch_vcs cria um arquivo **\\_version.py** no ecossistema do "
+"seu pacote que mantém o controle da versão atual do pacote."
#: ../../package-structure-code/python-package-versions.md:169
msgid ""
@@ -5204,6 +7393,11 @@ msgid ""
"This in turn eliminates potential error associated with manually updating"
" your package's version."
msgstr ""
+"O Hatch mantém o controle da versão do seu pacote em um arquivo "
+"`_version.py`. Armazenar a versão em um único arquivo gerenciado pelo "
+"Hatch fornece ao seu pacote um valor de \"fonte única da verdade\" para o"
+" número de versão. Isso, por sua vez, elimina o potencial erro associado "
+"à atualização manual da versão do seu pacote."
#: ../../package-structure-code/python-package-versions.md:175
msgid ""
@@ -5211,6 +7405,9 @@ msgid ""
" tag number for your package. If it has increased, it will update the "
"**\\_version.py** file with the new value."
msgstr ""
+"Quando você (ou o seu sistema de CI) constrói o seu pacote, o hatch "
+"verifica o número da tag atual do seu pacote. Se ela tiver aumentado, ele"
+" atualizará o arquivo **\\_version.py** com o novo valor."
#: ../../package-structure-code/python-package-versions.md:178
msgid ""
@@ -5218,12 +7415,17 @@ msgid ""
"your package, Hatch will access the new tag value and use it to update "
"your package version."
msgstr ""
+"Assim, quando você cria uma nova tag ou um novo release com uma tag e "
+"constrói o seu pacote, o Hatch acessará o valor da nova tag e o usará "
+"para atualizar a versão do seu pacote."
#: ../../package-structure-code/python-package-versions.md:181
msgid ""
"To use **hatch_vcs** you will need to use the **hatchling** build back "
"end."
msgstr ""
+"Para usar o **hatch_vcs**, você precisará usar o back-end de build "
+"**hatchling**."
#: ../../package-structure-code/python-package-versions.md:184
msgid ""
@@ -5233,13 +7435,15 @@ msgstr ""
#: ../../package-structure-code/python-package-versions.md:189
msgid "Hatch example setup in your pyproject.toml"
-msgstr ""
+msgstr "Exemplo de configuração do Hatch no seu pyproject.toml"
#: ../../package-structure-code/python-package-versions.md:198
msgid ""
"**Hatch_vcs** supports a fully automated package release and build, and "
"push to PyPI workflow on GitHub."
msgstr ""
+"O **Hatch_vcs** dá suporte a um fluxo de trabalho totalmente automatizado"
+" de release e build do pacote, e push para o PyPI no GitHub."
#: ../../package-structure-code/python-package-versions.md:208
msgid ""
@@ -5247,24 +7451,27 @@ msgid ""
"**hatchling** to be the modern equivalent to your current setuptools / "
"build workflow."
msgstr ""
+"Se você usa o **setuptools_scm**, então você pode achar que o "
+"**hatch_vcs** e o **hatchling** são o equivalente moderno do seu fluxo de"
+" trabalho atual de setuptools / build."
#: ../../package-structure-code/python-package-versions.md:211
msgid "hatch_vcs pros"
-msgstr ""
+msgstr "Prós do hatch_vcs"
#: ../../package-structure-code/python-package-versions.md:213
msgid "Hatch supports modern Python packaging standards"
-msgstr ""
+msgstr "O Hatch dá suporte aos padrões modernos de packaging Python"
#: ../../package-structure-code/python-package-versions.md:214
#: ../../package-structure-code/python-package-versions.md:240
msgid "It creates a single-source file that contains your package version."
-msgstr ""
+msgstr "Ele cria um arquivo de fonte única que contém a versão do seu pacote."
#: ../../package-structure-code/python-package-versions.md:215
#: ../../package-structure-code/python-package-versions.md:241
msgid "You never manually update the package version"
-msgstr ""
+msgstr "Você nunca atualiza a versão do pacote manualmente"
#: ../../package-structure-code/python-package-versions.md:216
#: ../../package-structure-code/python-package-versions.md:242
@@ -5272,6 +7479,8 @@ msgid ""
"You can automate writing the version anywhere in your package including "
"your documentation!"
msgstr ""
+"Você pode automatizar a escrita da versão em qualquer lugar do seu "
+"pacote, incluindo a sua documentação!"
#: ../../package-structure-code/python-package-versions.md:217
#: ../../package-structure-code/python-package-versions.md:243
@@ -5279,6 +7488,8 @@ msgid ""
"It supports a purely GitHub based release workflow. This simplifies "
"maintenance workflows."
msgstr ""
+"Ele dá suporte a um fluxo de trabalho de release puramente baseado no "
+"GitHub. Isso simplifica os fluxos de trabalho de manutenção."
#: ../../package-structure-code/python-package-versions.md:218
#: ../../package-structure-code/python-package-versions.md:244
@@ -5286,6 +7497,9 @@ msgid ""
"Version number is updated in your package via a hidden `_version.py` "
"file. There is no manual configuration updates required."
msgstr ""
+"O número de versão é atualizado no seu pacote por meio de um arquivo "
+"oculto `_version.py`. Não é necessária nenhuma atualização manual de "
+"configuração."
#: ../../package-structure-code/python-package-versions.md:219
#: ../../package-structure-code/python-package-versions.md:245
@@ -5294,10 +7508,14 @@ msgid ""
"below), we know that sometimes when maintaining a package specific "
"guidelines around commit messages can be hard to apply and manage."
msgstr ""
+"Embora gostemos de mensagens de commit detalhadas (Veja o Python Semantic"
+" Version abaixo), sabemos que, às vezes, ao manter um pacote, diretrizes "
+"específicas em torno das mensagens de commit podem ser difíceis de "
+"aplicar e gerenciar."
#: ../../package-structure-code/python-package-versions.md:221
msgid "hatch_vcs cons"
-msgstr ""
+msgstr "Contras do hatch_vcs"
#: ../../package-structure-code/python-package-versions.md:223
msgid ""
@@ -5305,10 +7523,14 @@ msgid ""
"version number via a tag on GitHub. But you could locally develop a build"
" to \"bump\" tag versions"
msgstr ""
+"Em um fluxo de trabalho de CI, você acabará inserindo ou criando "
+"manualmente o número de versão por meio de uma tag no GitHub. Mas você "
+"poderia desenvolver localmente uma build para \"incrementar\" as versões "
+"das tags"
#: ../../package-structure-code/python-package-versions.md:226
msgid "Tool 3: setuptools-scm versioning using git tags"
-msgstr ""
+msgstr "Ferramenta 3: versionamento do setuptools-scm usando git tags"
#: ../../package-structure-code/python-package-versions.md:228
msgid ""
@@ -5318,52 +7540,72 @@ msgid ""
"above) does. It stores a version in a **\\_version.py** file and relies "
"on (**git**) tags to determine the package's current version."
msgstr ""
+"O [`Setuptools_scm`](https://github.com/pypa/setuptools-scm/) é uma "
+"extensão que você pode usar com o setuptools para gerenciar as versões de"
+" um pacote. O **Setuptools_scm** opera da mesma forma que o **hatch_vcs**"
+" (discutido acima). Ele armazena uma versão em um arquivo "
+"**\\_version.py** e se baseia em tags (**git**) para determinar a versão "
+"atual do pacote."
#: ../../package-structure-code/python-package-versions.md:234
msgid ""
"If you are using **setuptools** as your primary build tool, then "
"`*setuptools-scm` is a good choice as:"
msgstr ""
+"Se você está usando o **setuptools** como a sua ferramenta de build "
+"principal, então o `*setuptools-scm` é uma boa escolha porque:"
#: ../../package-structure-code/python-package-versions.md:238
msgid "setuptools_scm Pros"
-msgstr ""
+msgstr "Prós do setuptools_scm"
#: ../../package-structure-code/python-package-versions.md:246
msgid "**setuptools** is still the most commonly used Python packaging build tool"
msgstr ""
+"O **setuptools** ainda é a ferramenta de build de packaging Python mais "
+"comumente usada"
#: ../../package-structure-code/python-package-versions.md:248
msgid "setuptools_scm cons"
-msgstr ""
+msgstr "Contras do setuptools_scm"
#: ../../package-structure-code/python-package-versions.md:250
msgid ""
"In a CI workflow you will end up manually entering or creating the "
"version number via a tag on GitHub."
msgstr ""
+"Em um fluxo de trabalho de CI, você acabará inserindo ou criando "
+"manualmente o número de versão por meio de uma tag no GitHub."
#: ../../package-structure-code/python-package-versions.md:251
msgid "Not well documented"
-msgstr ""
+msgstr "Não é bem documentado"
#: ../../package-structure-code/python-package-versions.md:252
msgid ""
"Because setuptools will always have to support backwards compatibility it"
" will always be slower in adopting modern Python packaging conventions."
msgstr ""
+"Como o setuptools sempre terá que dar suporte à compatibilidade "
+"retroativa, ele sempre será mais lento em adotar as convenções modernas "
+"de packaging Python."
#: ../../package-structure-code/python-package-versions.md:254
msgid ""
"As such you might consider using a more modern tool such as **hatch_vcs**"
" and **hatchling** to build your package and manage package versions."
msgstr ""
+"Por isso, você pode considerar usar uma ferramenta mais moderna, como o "
+"**hatch_vcs** e o **hatchling**, para construir o seu pacote e gerenciar "
+"as versões do pacote."
#: ../../package-structure-code/python-package-versions.md:266
msgid ""
"Tool 4: [Python semantic release](https://python-semantic-"
"release.readthedocs.io/en/latest/)"
msgstr ""
+"Ferramenta 4: [Python semantic release](https://python-semantic-"
+"release.readthedocs.io/en/latest/)"
#: ../../package-structure-code/python-package-versions.md:268
msgid ""
@@ -5372,12 +7614,18 @@ msgid ""
"As the name implies, Python Semantic Release follows semver release "
"rules."
msgstr ""
+"O Python semantic release usa um fluxo de trabalho de mensagens de commit"
+" que atualiza a versão do seu pacote com base em palavras-chave "
+"encontradas nas suas mensagens de commit. Como o nome indica, o Python "
+"Semantic Release segue as regras de release do semver."
#: ../../package-structure-code/python-package-versions.md:273
msgid ""
"With Python Semantic Release, versions are triggered using specific "
"language found in a git commit message."
msgstr ""
+"Com o Python Semantic Release, as versões são disparadas usando uma "
+"linguagem específica encontrada em uma mensagem de commit do git."
#: ../../package-structure-code/python-package-versions.md:276
msgid ""
@@ -5387,12 +7635,19 @@ msgid ""
" fix(text-here), Python Semantic Release would bump your package to "
"version 1.1.1."
msgstr ""
+"Por exemplo, as palavras `fix(attribute_warning):` fazem o Python "
+"Semantic Release implementar um incremento de versão **patch**. Por "
+"exemplo, se o seu pacote estivesse na versão 1.1.0 e você fizesse o "
+"commit abaixo com as palavras fix(text-here), o Python Semantic Release "
+"incrementaria o seu pacote para a versão 1.1.1."
#: ../../package-structure-code/python-package-versions.md:286
msgid ""
"Similarly a feature (`feat()`) triggers a minor version bump. For example"
" from version 1.1 to version 1.2"
msgstr ""
+"De forma semelhante, uma funcionalidade (`feat()`) dispara um incremento "
+"de versão minor. Por exemplo, da versão 1.1 para a versão 1.2"
#: ../../package-structure-code/python-package-versions.md:294
msgid ""
@@ -5402,14 +7657,20 @@ msgid ""
"since 2020 and will potentially be updated in the future! But for now, "
"some of the commands are dated but the content is still excellent."
msgstr ""
+"Você pode encontrar uma discussão criteriosa sobre o python semantic "
+"version [neste guia de pacotes Python](https://py-pkgs.org/07-releasing-"
+"versioning#automatic-version-bumping). Note que o guia não é atualizado "
+"desde 2020 e, potencialmente, será atualizado no futuro! Mas, por "
+"enquanto, alguns dos comandos estão desatualizados, embora o conteúdo "
+"ainda seja excelente."
#: ../../package-structure-code/python-package-versions.md:297
msgid "Python Semantic Release pros"
-msgstr ""
+msgstr "Prós do Python Semantic Release"
#: ../../package-structure-code/python-package-versions.md:299
msgid "Follows semver versioning closely"
-msgstr ""
+msgstr "Segue de perto o versionamento semver"
#: ../../package-structure-code/python-package-versions.md:300
msgid ""
@@ -5417,10 +7678,13 @@ msgid ""
" troubleshooting and ensure a cleaner and more self-describing git "
"history."
msgstr ""
+"Obriga os mantenedores a usar mensagens de commit descritivas, o que pode"
+" simplificar a resolução de problemas e garantir um histórico do git mais"
+" limpo e autoexplicativo."
#: ../../package-structure-code/python-package-versions.md:302
msgid "Python Semantic Release cons"
-msgstr ""
+msgstr "Contras do Python Semantic Release"
#: ../../package-structure-code/python-package-versions.md:304
msgid ""
@@ -5429,6 +7693,10 @@ msgid ""
"specificity in commit messages (NOTE: there are bots that will check git "
"commit messages in a repo)"
msgstr ""
+"Requer uma linguagem de commit muito específica para funcionar. Na "
+"prática, alguns mantenedores e contribuidores podem não conseguir manter "
+"esse nível de especificidade nas mensagens de commit (NOTA: há bots que "
+"verificam as mensagens de commit do git em um repositório)"
#: ../../package-structure-code/python-package-versions.md:305
msgid ""
@@ -5436,9 +7704,15 @@ msgid ""
"GitHub based release workflow as the wrong commit message could trigger a"
" release."
msgstr ""
+"O release acontece na linha de comando. Isso torna mais difícil "
+"implementar um fluxo de trabalho de release baseado no GitHub, pois a "
+"mensagem de commit errada poderia disparar um release."
#: ../../package-structure-code/python-package-versions.md:306
msgid ""
"The version number is manually updated in a configuration file such as "
"`pyproject.toml` vs. in a package **\\_version.py** file."
msgstr ""
+"O número de versão é atualizado manualmente em um arquivo de configuração"
+" como o `pyproject.toml`, em vez de em um arquivo **\\_version.py** do "
+"pacote."
diff --git a/locales/pt/LC_MESSAGES/tutorials.po b/locales/pt/LC_MESSAGES/tutorials.po
index f247368b3..2b81eb889 100644
--- a/locales/pt/LC_MESSAGES/tutorials.po
+++ b/locales/pt/LC_MESSAGES/tutorials.po
@@ -22,17 +22,19 @@ msgstr ""
#: ../../tutorials/add-license-coc.md:6
msgid "Add a `LICENSE` & `CODE_OF_CONDUCT` to your Python package"
-msgstr ""
+msgstr "Adicione uma `LICENSE` e um `CODE_OF_CONDUCT` ao seu pacote Python"
#: ../../tutorials/add-license-coc.md:8
msgid "In the [previous lesson](add-readme) you:"
-msgstr ""
+msgstr "Na [lição anterior](add-readme) você:"
#: ../../tutorials/add-license-coc.md:10
msgid ""
" "
"Created a basic `README.md` file for your scientific Python package"
msgstr ""
+" Criou um "
+"arquivo `README.md` básico para o seu pacote Python científico"
#: ../../tutorials/add-license-coc.md:12
msgid ""
@@ -40,53 +42,65 @@ msgid ""
"Learned about the core components that are useful to have in a `README` "
"file."
msgstr ""
+" Aprendeu "
+"sobre os componentes principais que são úteis ter em um arquivo `README`."
#: ../../tutorials/add-license-coc.md:14 ../../tutorials/add-readme.md:15
msgid "Learning objectives"
-msgstr ""
+msgstr "Objetivos de aprendizagem"
#: ../../tutorials/add-license-coc.md:17 ../../tutorials/add-readme.md:17
#: ../../tutorials/pyproject-toml.md:30
msgid "In this lesson you will learn:"
-msgstr ""
+msgstr "Nesta lição você aprenderá:"
#: ../../tutorials/add-license-coc.md:19
msgid ""
"How to select a license and add a `LICENSE` file to your package "
"repository, with a focus on the GitHub interface."
msgstr ""
+"Como selecionar uma licença e adicionar um arquivo `LICENSE` ao repositório "
+"do seu pacote, com foco na interface do GitHub."
#: ../../tutorials/add-license-coc.md:20
msgid "How to add a `CODE_OF_CONDUCT` file to your package repository."
-msgstr ""
+msgstr "Como adicionar um arquivo `CODE_OF_CONDUCT` ao repositório do seu pacote."
#: ../../tutorials/add-license-coc.md:21
msgid ""
"How you can use the Contributors Covenant website to add generic language"
" as a starting place for your `CODE_OF_CONDUCT`."
msgstr ""
+"Como você pode usar o site Contributors Covenant para adicionar uma "
+"linguagem genérica como ponto de partida para o seu `CODE_OF_CONDUCT`."
#: ../../tutorials/add-license-coc.md:24
msgid "What is a license?"
-msgstr ""
+msgstr "O que é uma licença?"
#: ../../tutorials/add-license-coc.md:26
msgid ""
"A license contains legal language about how users can use and reuse your "
"software. To set the `LICENSE` for your project, you:"
msgstr ""
+"Uma licença contém linguagem jurídica sobre como os usuários podem usar e "
+"reutilizar seu software. Para definir o `LICENSE` do seu projeto, você:"
#: ../../tutorials/add-license-coc.md:28
msgid ""
"Create a `LICENSE` file in your project directory that specifies the "
"license that you choose for your package."
msgstr ""
+"Cria um arquivo `LICENSE` no diretório do projeto que especifica a licença "
+"que você escolher para o seu pacote."
#: ../../tutorials/add-license-coc.md:29
msgid ""
"Describe your choice of license in your `pyproject.toml` data where "
"metadata are set."
msgstr ""
+"Descreve sua escolha de licença nos dados do `pyproject.toml`, onde os "
+"metadata são definidos."
#: ../../tutorials/add-license-coc.md:31
msgid ""
@@ -96,10 +110,15 @@ msgid ""
"is also used in your GitHub repository's landing page interface, and "
"makes its way into your distributions."
msgstr ""
+"Ao adicionar esses metadata ao arquivo [pyproject.toml](pyproject-toml), a "
+"escolha de licença será incluída nos metadata do seu pacote, que são usados "
+"para popular a página do PyPI do seu pacote. O arquivo `LICENSE` também é "
+"usado na interface da página inicial do repositório no GitHub e acaba sendo "
+"incluído nas suas distribuições."
#: ../../tutorials/add-license-coc.md:36
msgid "What license should you use?"
-msgstr ""
+msgstr "Qual licença você deve usar?"
#: ../../tutorials/add-license-coc.md:38
msgid ""
@@ -109,20 +128,26 @@ msgid ""
"generally recommended license on "
"[choosealicense.com](https://choosealicense.com/)."
msgstr ""
+"Sugerimos que você use uma licença permissiva que acomode as outras "
+"licenças mais comumente usadas no ecossistema Python científico (MIT[^mit] "
+"e BSD-3-Clause[^bsd3]). Se não tiver certeza, use MIT, pois é a licença "
+"geralmente recomendada em [choosealicense.com](https://choosealicense.com/)."
#: ../../tutorials/add-license-coc.md:41
msgid "Licenses for the scientific Python ecosystem"
-msgstr ""
+msgstr "Licenças para o ecossistema Python científico"
#: ../../tutorials/add-license-coc.md:42
msgid ""
"[We discuss licenses for the scientific Python ecosystem in more detail "
"here in our guidebook.](../documentation/repository-files/license-files)"
msgstr ""
+"[Discutimos licenças para o ecossistema Python científico com mais detalhes "
+"aqui no nosso guia.](../documentation/repository-files/license-files)"
#: ../../tutorials/add-license-coc.md:45
msgid "Where should the `LICENSE` file live"
-msgstr ""
+msgstr "Onde o arquivo `LICENSE` deve ficar"
#: ../../tutorials/add-license-coc.md:47
msgid ""
@@ -131,12 +156,18 @@ msgid ""
"automagically discover it and provide users with a direct link to your "
"`LICENSE` file within your GitHub repository."
msgstr ""
+"Seu arquivo `LICENSE` deve ficar na raiz do repositório do seu "
+"pacote. Quando você adiciona o `LICENSE` na raiz, o GitHub o "
+"descobrirá automaticamente e fornecerá aos usuários um link direto parao seu "
+"arquivo `LICENSE` dentro do repositório no GitHub."
#: ../../tutorials/add-license-coc.md:53
msgid ""
"Image showing the GitHub repository for SunPy an accepted pyOpenSci "
"package."
msgstr ""
+"Imagem mostrando o repositório no GitHub do SunPy, um pacote "
+"pyOpenSciaceito."
#: ../../tutorials/add-license-coc.md:55
msgid ""
@@ -146,14 +177,19 @@ msgid ""
"uses. These files are discovered by GitHub because they are placed in the"
" root of the project directory using standard naming conventions."
msgstr ""
+"Observe que na parte superior da seção README da página inicial do GitHub, "
+"há três abas com links diretos para o arquivo `README`, que está visível, o "
+"arquivo `CODE_OF_CONDUCT` e uma que especifica a licença usada pelo SunPy. "
+"Esses arquivos são descobertos pelo GitHub porque estão na raiz do "
+"diretório do projeto, seguindo convenções de nomenclatura padrão."
#: ../../tutorials/add-license-coc.md:62
msgid "How to add a `LICENSE` file to your package directory"
-msgstr ""
+msgstr "Como adicionar um arquivo `LICENSE` ao diretório do seu pacote"
#: ../../tutorials/add-license-coc.md:64
msgid "There are several ways to add a `LICENSE` file:"
-msgstr ""
+msgstr "Há várias maneiras de adicionar um arquivo `LICENSE`:"
#: ../../tutorials/add-license-coc.md:66
msgid ""
@@ -161,6 +197,9 @@ msgid ""
"to add a `LICENSE` file at that time. If you select yes, it will create "
"the file for you."
msgstr ""
+"Quando você cria um novo repositório no GitHub, ele perguntará se deseja "
+"adicionar um arquivo `LICENSE` naquele momento. Se você selecionar sim, ele "
+"criará o arquivo para você."
#: ../../tutorials/add-license-coc.md:67
msgid ""
@@ -169,22 +208,26 @@ msgid ""
"here](https://docs.github.com/en/communities/setting-up-your-project-for-"
"healthy-contributions/adding-a-license-to-a-repository)."
msgstr ""
+"Você pode adicionar um `LICENSE` pela GUI do GitHub seguindo as [ instruções "
+"aqui](https://docs.github.com/en/communities/setting-up-your-project-for-hea"
+"lthy-contributions/adding-a-license-to-a-repository)."
#: ../../tutorials/add-license-coc.md:68
msgid "You can add the file manually as we are doing in this lesson."
-msgstr ""
+msgstr "Você pode adicionar o arquivo manualmente, como estamos fazendo nesta lição."
#: ../../tutorials/add-license-coc.md:71
msgid "If you completed the past lessons including"
-msgstr ""
+msgstr "Se você concluiu as lições anteriores, incluindo"
#: ../../tutorials/add-license-coc.md:73
msgid "[Making your code installable](create-python-package.md) and"
-msgstr ""
+msgstr "[Tornar seu código instalável](create-python-package.md) e"
#: ../../tutorials/add-license-coc.md:74
msgid "[publishing your package to PyPI](publish-pypi.md)"
-msgstr ""
+msgstr "[publicar seu pacote no PyPI](publish-pypi.md)"
#: ../../tutorials/add-license-coc.md:76
msgid ""
@@ -192,16 +235,20 @@ msgid ""
"license in your Python package. Thus you can skip to the next section of "
"this tutorial which walks you through adding a `CODE_OF_CONDUCT`."
msgstr ""
+"então você já tem um arquivo `LICENSE` contendo o texto da licença MIT no "
+"seu pacote Python. Assim, você pode pular para a próxima seção deste "
+"tutorial, que orienta a adicionar um `CODE_OF_CONDUCT`."
#: ../../tutorials/add-license-coc.md:78
msgid ""
"If you don't yet have a `LICENSE` file in your directory, then continue "
"reading."
msgstr ""
+"Se você ainda não tem um arquivo `LICENSE` no seu diretório, continue lendo."
#: ../../tutorials/add-license-coc.md:81
msgid "How to add a `LICENSE` to your package - the manual way"
-msgstr ""
+msgstr "Como adicionar um `LICENSE` ao seu pacote — a maneira manual"
#: ../../tutorials/add-license-coc.md:83
msgid ""
@@ -209,38 +256,44 @@ msgid ""
"platform such as GitHub or GitLab, then you can create a `LICENSE` file "
"by"
msgstr ""
+"Se você ainda não tem um arquivo `LICENSE` e ainda não usa uma plataforma "
+"como GitHub ou GitLab, pode criar um arquivo `LICENSE`"
#: ../../tutorials/add-license-coc.md:85
msgid "Create a new file called `LICENSE`. If you are using shell you can type:"
-msgstr ""
+msgstr "Crie um novo arquivo chamado `LICENSE`. Se estiver usando o shell, digite:"
#: ../../tutorials/add-license-coc.md:92
msgid "Go to [choosealicense.com](https://choosealicense.com/)"
-msgstr ""
+msgstr "Acesse [choosealicense.com](https://choosealicense.com/)"
#: ../../tutorials/add-license-coc.md:93
msgid "Select permissive license"
-msgstr ""
+msgstr "Selecione uma licença permissiva"
#: ../../tutorials/add-license-coc.md:94
msgid ""
"It will suggest that you use the [MIT "
"license](https://choosealicense.com/licenses/mit/)."
msgstr ""
+"Irá sugerir que você use a [licença "
+"MIT](https://choosealicense.com/licenses/mit/)."
#: ../../tutorials/add-license-coc.md:95
msgid ""
"Copy the license text that it provides into your `LICENSE` file that you "
"created above."
msgstr ""
+"Copie o texto da licença fornecido para o arquivo `LICENSE` que você criou "
+"acima."
#: ../../tutorials/add-license-coc.md:96
msgid "Save your file. You're all done!"
-msgstr ""
+msgstr "Salve o arquivo. Pronto!"
#: ../../tutorials/add-license-coc.md:98
msgid "An overview of licenses in the scientific Python ecosystem"
-msgstr ""
+msgstr "Uma visão geral das licenças no ecossistema Python científico"
#: ../../tutorials/add-license-coc.md:101
msgid ""
@@ -250,6 +303,11 @@ msgid ""
"are most commonly used for scientific software and how to select the "
"correct license."
msgstr ""
+"No [guia de empacotamento](../documentation/repository-files/license-files) "
+"do pyOpenSci, fornecemos uma visão geral das licenças no ecossistema Python "
+"científico. Revisamos por que os arquivos de licença são importantes, quais "
+"são mais comumente usados para software científico e como selecionar a "
+"licença correta."
#: ../../tutorials/add-license-coc.md:103
msgid ""
@@ -258,20 +316,27 @@ msgid ""
" side of things.](https://opensource.guide/legal/#just-give-me-the-tldr-"
"on-what-i-need-to-protect-my-project)"
msgstr ""
+"Se quiser uma visão geral ampla de por que as licenças são importantes para "
+"proteger software de código aberto, [confira esta postagem de blog que "
+"apresenta o lado "
+"jurídico.](https://opensource.guide/legal/#just-give-me-the-tldr-on-what-i-n"
+"eed-to-protect-my-project)"
#: ../../tutorials/add-license-coc.md
msgid "Instructions for adding a `LICENSE` file within the GitHub interface"
-msgstr ""
+msgstr "Instruções para adicionar um arquivo `LICENSE` na interface do GitHub"
#: ../../tutorials/add-license-coc.md
msgid "Add license: new GitHub repository"
-msgstr ""
+msgstr "Adicionar licença: novo repositório no GitHub"
#: ../../tutorials/add-license-coc.md:114
msgid ""
"When you create a new GitHub repository you can add a `LICENSE` file "
"through the GitHub interface."
msgstr ""
+"Quando você cria um novo repositório no GitHub, pode adicionar um arquivo "
+"`LICENSE` pela interface do GitHub."
#: ../../tutorials/add-license-coc.md:119
msgid ""
@@ -283,16 +348,25 @@ msgid ""
"you. At the very bottom there is a line to add a .gitignore file and "
"another to choose a license."
msgstr ""
+"Captura de tela da interface de criação de novo repositório do GitHub. Os "
+"elementos são o proprietário e o nome do repositório para o novo repo. "
+"Abaixo disso, você pode adicionar uma descrição do repositório. Mais "
+"abaixo, pode definir como público ou privado. Na parte inferior da "
+"interface há uma caixa de seleção Adicionar um README, que adicionaum "
+"arquivo readme em branco para você. Na parte debaixo há uma linha para "
+"adicionar um arquivo .gitignore e outra paraescolher uma licença."
#: ../../tutorials/add-license-coc.md:121
msgid ""
"Image showing the GitHub interface that allows you to add a `LICENSE` and"
" `README` file when you create a new repository."
msgstr ""
+"Imagem mostrando a interface do GitHub que permite adicionar um arquivo "
+"`LICENSE` e um `README` ao criar um novo repositório."
#: ../../tutorials/add-license-coc.md
msgid "Add `LICENSE`: Existing GitHub repository"
-msgstr ""
+msgstr "Adicionar `LICENSE`: repositório GitHub existente"
#: ../../tutorials/add-license-coc.md:127
msgid ""
@@ -300,6 +374,9 @@ msgid ""
"add a `LICENSE` using the GitHub interface by adding a new file to the "
"repository."
msgstr ""
+"Se você já tem um repositório no GitHub para o seu pacote, pode adicionar "
+"um `LICENSE` pela interface do GitHub, criando um novo arquivo no "
+"repositório."
#: ../../tutorials/add-license-coc.md:129
msgid ""
@@ -308,6 +385,10 @@ msgid ""
"/setting-up-your-project-for-healthy-contributions/adding-a-license-"
"to-a-repository) ."
msgstr ""
+"Siga as instruções para selecionar e adicionar uma licença ao seu "
+"repositório na [página LICENSE do "
+"GitHub](https://docs.github.com/en/communities/setting-up-your-project-for-h"
+"ealthy-contributions/adding-a-license-to-a-repository)."
#: ../../tutorials/add-license-coc.md:130
msgid ""
@@ -315,6 +396,9 @@ msgid ""
"repository with the repository on GitHub.com. This means running `git "
"pull` to update your local branch."
msgstr ""
+"Depois de adicionar o arquivo `LICENSE`, sincronize o repositório git local "
+"com o repositório em GitHub.com. Isso significa executar `git pull` para "
+"atualizar seu branch local."
#: ../../tutorials/add-license-coc.md:133
msgid ""
@@ -325,12 +409,19 @@ msgid ""
"license. At the bottom of the image, the actual text for the license is "
"shown in the LICENSE file."
msgstr ""
+"Imagem mostrando como o arquivo LICENSE aparece na interface do GitHub. No "
+"topo, você vê a licença em si — nesta imagem, BSD 3-clause New or revised "
+"license. Em seguida, há um texto descrevendo o que é a licença e as "
+"permissões associadas a ela. Na parte inferior da imagem,o texto completo "
+"da licença é exibido no arquivo LICENSE."
#: ../../tutorials/add-license-coc.md:135
msgid ""
"You can view a summary of the `LICENSE` chosen on your project's GitHub "
"landing page."
msgstr ""
+"Você pode ver um resumo do `LICENSE` escolhido na página inicial do GitHub "
+"do seu projeto."
#: ../../tutorials/add-license-coc.md:142
msgid ""
@@ -338,10 +429,13 @@ msgid ""
"about the `CODE_OF_CONDUCT.md` file and how to add it to your package "
"directory."
msgstr ""
+"Agora você sabe como adicionar um `LICENSE` ao seu projeto. Em seguida, "
+"aprenderá sobre o arquivo `CODE_OF_CONDUCT.md` e como adicioná-lo ao "
+"diretório do seu pacote."
#: ../../tutorials/add-license-coc.md:147
msgid "What is a code of conduct file?"
-msgstr ""
+msgstr "O que é um arquivo de código de conduta?"
#: ../../tutorials/add-license-coc.md:149
#, python-brace-format
@@ -349,32 +443,41 @@ msgid ""
"A `CODE_OF_CONDUCT` file is a {term}`Code of conduct` used to establish "
"guidelines for how people in your community interact."
msgstr ""
+"Um arquivo `CODE_OF_CONDUCT` é um {term}`Código de conduta` usado "
+"para estabelecer diretrizes sobre como as pessoas da sua comunidade "
+"interagem."
#: ../../tutorials/add-license-coc.md:152
msgid ""
"This file is critical to supporting your community as it grows. The "
"`CODE_OF_CONDUCT`:"
msgstr ""
+"Este arquivo é fundamental para apoiar sua comunidade conforme ela cresce. "
+"O `CODE_OF_CONDUCT`:"
#: ../../tutorials/add-license-coc.md:155
msgid ""
"Establishes guidelines for how users and contributors interact with each "
"other and you in your software repository."
msgstr ""
+"Estabelece diretrizes sobre como usuários e contribuidores interagem entre "
+"si e com você no repositório do software."
#: ../../tutorials/add-license-coc.md:156
msgid "Identifies negative behaviors that you don't want in your interactions."
-msgstr ""
+msgstr "Identifica comportamentos negativos que você não quer nas interações."
#: ../../tutorials/add-license-coc.md:158
msgid ""
"You can use your code of conduct as a tool that can be referenced when "
"moderating challenging conversations."
msgstr ""
+"Você pode usar seu código de conduta como ferramenta de referência ao "
+"moderar conversas difíceis."
#: ../../tutorials/add-license-coc.md:160
msgid "What to put in your `CODE_OF_CONDUCT` file"
-msgstr ""
+msgstr "O que incluir no seu arquivo `CODE_OF_CONDUCT`"
#: ../../tutorials/add-license-coc.md:162
msgid ""
@@ -383,32 +486,43 @@ msgid ""
"language](https://www.contributor-"
"covenant.org/version/2/1/code_of_conduct/) as a starting place."
msgstr ""
+"Se não souber que linguagem adicionar ao arquivo `CODE_OF_CONDUCT`, "
+"sugerimos adotar a [linguagem do Contributors "
+"Covenant](https://www.contributor-covenant.org/version/2/1/code_of_conduct/)"
+"como ponto de partida."
#: ../../tutorials/add-license-coc.md:165
msgid ""
""
msgstr ""
+""
#: ../../tutorials/add-license-coc.md:165
msgid "Contributor Covenant"
-msgstr ""
+msgstr "Contributor Covenant"
#: ../../tutorials/add-license-coc.md:167
msgid ""
"The `CODE_OF_CONDUCT.md` should be placed at the root of your project "
"directory, similar to the `LICENSE` file."
msgstr ""
+"O `CODE_OF_CONDUCT.md` deve ficar na raiz do diretório do projeto, assim "
+"como o arquivo `LICENSE`."
#: ../../tutorials/add-license-coc.md:169
msgid "How to add a `CODE_OF_CONDUCT` file to your package directory"
-msgstr ""
+msgstr "Como adicionar um arquivo `CODE_OF_CONDUCT` ao diretório do seu pacote"
#: ../../tutorials/add-license-coc.md:171
msgid ""
"Add a `CODE_OF_CONDUCT.md` file to the root of your repository if it "
"doesn't already exist."
msgstr ""
+"Adicione um arquivo `CODE_OF_CONDUCT.md` na raiz do seu repositório, se ele "
+"ainda não existir."
#: ../../tutorials/add-license-coc.md:177
msgid ""
@@ -420,14 +534,21 @@ msgid ""
"information. Read the text closely to ensure you both understand it and "
"also agree with its contents!"
msgstr ""
+"Visite o [site do Contributors "
+"Covenant](https://www.contributor-covenant.org/) e adicione [a versão em "
+"markdown do código de "
+"conduta](https://www.contributor-covenant.org/version/2/1/code_of_conduct/co"
+"de_of_conduct.md)ao seu arquivo `CODE_OF_CONDUCT.md`. Preencha qualquer "
+"informação placeholder. Leia o texto com atenção para garantir que entende e "
+"concorda com o conteúdo!"
#: ../../tutorials/add-license-coc.md:179
msgid "That's it - you've now added a code of conduct to your package directory."
-msgstr ""
+msgstr "É isso — você adicionou um código de conduta ao diretório do seu pacote."
#: ../../tutorials/add-license-coc.md:181
msgid "Additional Code of Conduct resources"
-msgstr ""
+msgstr "Recursos adicionais sobre código de conduta"
#: ../../tutorials/add-license-coc.md:184
msgid ""
@@ -435,6 +556,9 @@ msgid ""
"files](https://docs.github.com/en/communities/setting-up-your-project-"
"for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
msgstr ""
+"[ Guia: arquivos "
+"`CODE_OF_CONDUCT.md`](https://docs.github.com/en/communities/setting-up-your"
+"-project-for-healthy-contributions/adding-a-code-of-conduct-to-your-project)"
#: ../../tutorials/add-license-coc.md:185
msgid ""
@@ -442,28 +566,31 @@ msgid ""
"overview](https://www.pyopensci.org/python-package-guide/documentation"
"/repository-files/code-of-conduct-file.html)"
msgstr ""
+"[Visão geral do `CODE_OF_CONDUCT.md` no guia de pacotes do "
+"pyOpenSci](https://www.pyopensci.org/python-package-guide/documentation/repo"
+"sitory-files/code-of-conduct-file.html)"
#: ../../tutorials/add-license-coc.md:188 ../../tutorials/add-readme.md:240
#: ../../tutorials/publish-conda-forge.md:475
#: ../../tutorials/pyproject-toml.md:699
msgid " Wrap up"
-msgstr ""
+msgstr " Encerramento"
#: ../../tutorials/add-license-coc.md:190
msgid "In this lesson and the [last lesson](add-readme), you have added a:"
-msgstr ""
+msgstr "Nesta lição e na [lição anterior](add-readme), você adicionou um:"
#: ../../tutorials/add-license-coc.md:192
msgid "`README` file;"
-msgstr ""
+msgstr "arquivo `README`;"
#: ../../tutorials/add-license-coc.md:193
msgid "`LICENSE` file and a"
-msgstr ""
+msgstr "arquivo `LICENSE` e um"
#: ../../tutorials/add-license-coc.md:194
msgid "`CODE_OF_CONDUCT` file."
-msgstr ""
+msgstr "arquivo `CODE_OF_CONDUCT`."
#: ../../tutorials/add-license-coc.md:196
msgid ""
@@ -471,23 +598,30 @@ msgid ""
"repository. These files help users understand how to use your package and"
" interact with package maintainers."
msgstr ""
+"Esses são arquivos fundamentais para todo repositório de pacote "
+"Python científico. Eles ajudam os usuários a entender como usar seu pacote e "
+"interagir com os mantenedores(as) do pacote."
#: ../../tutorials/add-license-coc.md:200
#: ../../tutorials/create-python-package.md:455
msgid "In the upcoming lessons, you will:"
-msgstr ""
+msgstr "Nas próximas lições, você irá:"
#: ../../tutorials/add-license-coc.md:202
msgid ""
"[Add more metadata to your `pyproject.toml` file](pyproject-toml) to "
"support building and publishing your package on PyPI."
msgstr ""
+"[Adicionar mais metadata ao arquivo `pyproject.toml`](pyproject-toml) para "
+"apoiar o build e a publicação do seu pacote no PyPI."
#: ../../tutorials/add-license-coc.md:203
msgid ""
"Publish a new version of your Python package to the test PyPI to preview "
"the updated metadata landing page."
msgstr ""
+"Publicar uma nova versão do seu pacote Python no test PyPI para visualizar "
+"a página de metadata atualizada."
#: ../../tutorials/add-license-coc.md:208
#: ../../tutorials/create-python-package.md:550
@@ -495,52 +629,54 @@ msgstr ""
#: ../../tutorials/publish-pypi.md:419
#: ../../tutorials/trusted-publishing.md:347
msgid "Footnotes"
-msgstr ""
+msgstr "Notas de rodapé"
#: ../../tutorials/add-license-coc.md:210
msgid "https://opensource.org/license/mit/"
-msgstr ""
+msgstr "https://opensource.org/license/mit/"
#: ../../tutorials/add-license-coc.md:211
msgid "https://opensource.org/license/bsd-3-clause/"
-msgstr ""
+msgstr "https://opensource.org/license/bsd-3-clause/"
#: ../../tutorials/add-readme.md:6
#, python-brace-format
msgid "Add a {term}`README` file to your {term}`Python package`"
msgstr ""
+"Adicione um arquivo {term}`README` ao seu {term}`pacote Python "
+"`"
#: ../../tutorials/add-readme.md:8
msgid "In the previous lessons you learned:"
-msgstr ""
+msgstr "Nas lições anteriores você aprendeu:"
#: ../../tutorials/add-readme.md:10
msgid "[What a Python package is](intro.md)"
-msgstr ""
+msgstr "[O que é um pacote Python](intro.md)"
#: ../../tutorials/add-readme.md:11
msgid "[How to make your code installable](create-python-package)"
-msgstr ""
+msgstr "[Como tornar seu código instalável](create-python-package)"
#: ../../tutorials/add-readme.md:12
msgid "[How to publish your package to (test) PyPI](publish-pypi.md)"
-msgstr ""
+msgstr "[Como publicar seu pacote no (test) PyPI](publish-pypi.md)"
#: ../../tutorials/add-readme.md:13
msgid "[How to publish your package to conda-forge](publish-conda-forge.md)"
-msgstr ""
+msgstr "[Como publicar seu pacote no conda-forge](publish-conda-forge.md)"
#: ../../tutorials/add-readme.md:19
msgid "How to add a **README.md** file to your package."
-msgstr ""
+msgstr "Como adicionar um arquivo **README.md** ao seu pacote."
#: ../../tutorials/add-readme.md:20
msgid "What the core elements of a **README.md** file are."
-msgstr ""
+msgstr "Quais são os elementos principais de um arquivo **README.md**."
#: ../../tutorials/add-readme.md:23
msgid "What is a README file?"
-msgstr ""
+msgstr "O que é um arquivo README?"
#: ../../tutorials/add-readme.md:25
#, python-brace-format
@@ -548,10 +684,12 @@ msgid ""
"The `README.md` file is the project's {term}`README` and is located at "
"the root of your project directory. It helps a user understand:"
msgstr ""
+"O arquivo `README.md` é o {term}`README` do projeto e fica na raiz do "
+"diretório do projeto. Ele ajuda o usuário a entender:"
#: ../../tutorials/add-readme.md:29
msgid "You package's name"
-msgstr ""
+msgstr "O nome do seu pacote"
#: ../../tutorials/add-readme.md:30
msgid ""
@@ -559,22 +697,24 @@ msgid ""
"problem(s) that your software is designed to solve and its target "
"audience."
msgstr ""
+"O que o pacote faz. Seu README deve deixar claro o(s) problema(s) que seu "
+"software resolve e o público-alvo."
#: ../../tutorials/add-readme.md:31
msgid "The current development \"state\" of the package (through badges)"
-msgstr ""
+msgstr "O \"estado\" atual de desenvolvimento do pacote (por meio de badges)"
#: ../../tutorials/add-readme.md:32
msgid "How to get started with using your package."
-msgstr ""
+msgstr "Como começar a usar seu pacote."
#: ../../tutorials/add-readme.md:33
msgid "How to contribute to your package"
-msgstr ""
+msgstr "Como contribuir para o seu pacote"
#: ../../tutorials/add-readme.md:34
msgid "How to cite your package"
-msgstr ""
+msgstr "Como citar seu pacote"
#: ../../tutorials/add-readme.md:36
msgid ""
@@ -582,6 +722,9 @@ msgid ""
"someone sees before they install your package. The README file is also "
"used to populate your PyPI landing page."
msgstr ""
+"Seu arquivo **README.md** é importante, pois costuma ser a primeira coisa "
+"que alguém vê antes de instalar seu pacote. O README também é usado para "
+"popular a página do PyPI."
#: ../../tutorials/add-readme.md:38
msgid ""
@@ -589,82 +732,94 @@ msgid ""
"However, this tutorial outlines the sections that we suggest that you "
"include in your README file."
msgstr ""
+"Note que não há uma estrutura de conteúdo específica para arquivos README. "
+"No entanto, este tutorial descreve as seções que sugerimos incluir no seu "
+"README."
#: ../../tutorials/add-readme.md:42
msgid "Create a README.md file for your package"
-msgstr ""
+msgstr "Crie um arquivo README.md para o seu pacote"
#: ../../tutorials/add-readme.md:44
msgid "It's time to add a `README.md` file to your project directory."
-msgstr ""
+msgstr "É hora de adicionar um arquivo `README.md` ao diretório do seu projeto."
#: ../../tutorials/add-readme.md:46
msgid "Step 0: Create a README file"
-msgstr ""
+msgstr "Passo 0: Crie um arquivo README"
#: ../../tutorials/add-readme.md:47
msgid ""
"To get started, if you don't already have a README.md file in your "
"project directory, create one."
msgstr ""
+"Para começar, se ainda não tiver um arquivo README.md no diretório do "
+"projeto, crie um."
#: ../../tutorials/add-readme.md:50
msgid "If you created your project directory from"
-msgstr ""
+msgstr "Se você criou o diretório do projeto a partir de"
#: ../../tutorials/add-readme.md:52
msgid "a GitHub repository online"
-msgstr ""
+msgstr "um repositório no GitHub online"
#: ../../tutorials/add-readme.md:53
msgid "using `hatch init`"
-msgstr ""
+msgstr "usando `hatch init`"
#: ../../tutorials/add-readme.md:55
msgid "Then you may already have a README.MD file in your project directory."
-msgstr ""
+msgstr "Então você pode já ter um arquivo README.MD no diretório do projeto."
#: ../../tutorials/add-readme.md:61
msgid "Step 1: Add the name of your package as the README title"
-msgstr ""
+msgstr "Passo 1: Adicione o nome do seu pacote como título do README"
#: ../../tutorials/add-readme.md:63
msgid "At the top of the `README.md` file, add the name of your package."
-msgstr ""
+msgstr "No topo do arquivo `README.md`, adicione o nome do seu pacote."
#: ../../tutorials/add-readme.md:65
msgid ""
"If you are using markdown it should be a header 1 (H1) tag which is "
"denoted with a single `#` sign."
msgstr ""
+"Se estiver usando markdown, deve ser um título H1 (header 1), indicado com "
+"um único `#`."
#: ../../tutorials/add-readme.md:67
msgid "`# Package-title-here`"
-msgstr ""
+msgstr "`# Package-title-here`"
#: ../../tutorials/add-readme.md:69
msgid "Step 2: add badges to the top of your README file"
-msgstr ""
+msgstr "Passo 2: adicione badges ao topo do seu arquivo README"
#: ../../tutorials/add-readme.md:71
msgid ""
"It's common for maintainers to add badges to the top of their README "
"files. Badges allow you and your package users to track things like:"
msgstr ""
+"É comum os mantenedores adicionarem badges ao topo dos arquivos README. Os "
+"badges permitem que você e os pessoas usuárias do pacote acompanhem coisas "
+"como:"
#: ../../tutorials/add-readme.md:73
msgid "Broken documentation and test builds."
-msgstr ""
+msgstr "Falhas em builds de documentação e testes."
#: ../../tutorials/add-readme.md:74
msgid "Versions of your package that are on PyPI and conda."
-msgstr ""
+msgstr "Versões do seu pacote no PyPI e no conda."
#: ../../tutorials/add-readme.md:75
msgid ""
"Whether your package has been reviewed and vetted by an organization such"
" as pyOpenSci and/or JOSS."
msgstr ""
+"Se o seu pacote foi revisado e validado por uma organização como pyOpenSci "
+"e/ou JOSS."
#: ../../tutorials/add-readme.md:77
msgid ""
@@ -673,50 +828,64 @@ msgid ""
"/py-pi-version). This badge will dynamically update as you release new "
"versions of your package to PyPI."
msgstr ""
+"Se você já publicou seu pacote em pypi.org, pode usar [shields.io para criar "
+"um badge de versão do pacote](https://shields.io/badges/py-pi-version). "
+"Esse badge será atualizado dinamicamente conforme você publica novas "
+"versões do pacote no PyPI."
#: ../../tutorials/add-readme.md:79
msgid ""
"If not, you can leave the top empty for now and add badges to your README"
" at a later point as they make sense."
msgstr ""
+"Caso contrário, pode deixar o topo vazio por enquanto e adicionar badges ao "
+"README mais tarde, quando fizer sentido."
#: ../../tutorials/add-readme.md:81
msgid "Step 3: Add a description of what your package does"
-msgstr ""
+msgstr "Passo 3: Adicione uma descrição do que seu pacote faz"
#: ../../tutorials/add-readme.md:83
msgid ""
"Below the badges (if you have them), add a section of text that provides "
"an easy-to-understand overview of what your package does."
msgstr ""
+"Abaixo dos badges (se houver), adicione um trecho de texto com uma visão "
+"geral fácil de entender do que seu pacote faz."
#: ../../tutorials/add-readme.md:87
msgid "Keep this section short."
-msgstr ""
+msgstr "Mantenha esta seção curta."
#: ../../tutorials/add-readme.md:88
msgid "Try to avoid jargon."
-msgstr ""
+msgstr "Tente evitar jargão."
#: ../../tutorials/add-readme.md:89
msgid ""
"Define technical terms that you use to make the description accessible to"
" more people."
msgstr ""
+"Defina termos técnicos que usar para tornar a descrição acessível a mais "
+"pessoas."
#: ../../tutorials/add-readme.md:91
msgid ""
"Remember that the more people understand what your package does, the more"
" people will use it."
msgstr ""
+"Lembre-se: quanto mais pessoas entenderem o que seu pacote faz, mais "
+"pessoas o usarão."
#: ../../tutorials/add-readme.md:93
msgid "Step 4: Add package installation instructions"
-msgstr ""
+msgstr "Passo 4: Adicione instruções de instalação do pacote"
#: ../../tutorials/add-readme.md:95
msgid "Next, add instructions that tell users how to install your package."
msgstr ""
+"Em seguida, adicione instruções que expliquem aos usuários como instalar seu "
+"pacote."
#: ../../tutorials/add-readme.md:97
#, python-brace-format
@@ -724,24 +893,28 @@ msgid ""
"For example, can they use {term}`pip` to install your package? `python -m"
" pip install packagename`"
msgstr ""
+"Por exemplo, dá para instalar o pacote com {term}`pip`? `python -m "
+"pip install packagename`"
#: ../../tutorials/add-readme.md:100
msgid "or conda?"
-msgstr ""
+msgstr "ou conda?"
#: ../../tutorials/add-readme.md:102
msgid "`conda install -c conda-forge packagename`."
-msgstr ""
+msgstr "`conda install -c conda-forge packagename`."
#: ../../tutorials/add-readme.md:104
msgid ""
"If you haven't yet published your package to pypi.org then you can skip "
"this section and come back and add these instructions later."
msgstr ""
+"Se você ainda não publicou seu pacote em pypi.org, pode pular esta seção e "
+"voltar depois para adicionar essas instruções."
#: ../../tutorials/add-readme.md:108
msgid "Step 5: Any additional setup"
-msgstr ""
+msgstr "Passo 5: Configuração adicional"
#: ../../tutorials/add-readme.md:110
msgid ""
@@ -749,30 +922,38 @@ msgid ""
"tools in order to use your package. If that is the case, be sure to add a"
" section on additional setup to your README file."
msgstr ""
+"Em alguns casos, os usuários do pacote podem precisar "
+"instalar manualmente outras ferramentas para usá-lo. Nesse caso, adicione "
+"uma seção sobre configuração adicional ao README."
#: ../../tutorials/add-readme.md:115
msgid ""
"Here, briefly document (or link to documentation for) any additional "
"setup that is required to use your package. This might include:"
msgstr ""
+"Aqui, documente brevemente (ou inclua um link para documentação "
+"sobre) qualquer configuração adicional necessária para usar seu "
+"pacote. Isso pode incluir:"
#: ../../tutorials/add-readme.md:119
msgid "authentication information, if it is applicable to your package."
-msgstr ""
+msgstr "informações de autenticação, se aplicável ao seu pacote."
#: ../../tutorials/add-readme.md:120
msgid "additional tool installations, such as GDAL."
-msgstr ""
+msgstr "instalação de ferramentas adicionais, como GDAL."
#: ../../tutorials/add-readme.md:123
msgid ""
"Many packages won't need an additional setup section in their README. In "
"that case you can always skip this section."
msgstr ""
+"Muitos pacotes não precisam de uma seção de configuração adicional "
+"no README. Nesse caso, você sempre pode pular esta seção."
#: ../../tutorials/add-readme.md:128
msgid "Step 6: Add a get started section"
-msgstr ""
+msgstr "Passo 6: Adicione uma seção de primeiros passos"
#: ../../tutorials/add-readme.md:130
msgid ""
@@ -780,32 +961,43 @@ msgid ""
"example that demonstrates importing and using some of the functionality "
"in your package."
msgstr ""
+"Em seguida, adicione uma seção de primeiros passos. Nela, inclua um pequeno "
+"exemplo de código que demonstre o import e o uso de alguma funcionalidade "
+"do seu pacote."
#: ../../tutorials/add-readme.md:133
msgid "Provide a fully functional code snippet if possible"
-msgstr ""
+msgstr "Forneça um trecho de código totalmente funcional, se possível"
#: ../../tutorials/add-readme.md:136
msgid ""
"It is important to try to make the code examples that you provide your "
"users as useful as possible."
msgstr ""
+"É importante tentar tornar os exemplos de código que você fornece aos "
+"usuários o mais úteis possível."
#: ../../tutorials/add-readme.md:138
msgid ""
"Be sure to provide a copy/paste code example that will work as-is when "
"pasted into a Jupyter Notebook or .py file if that is possible."
msgstr ""
+"Forneça um exemplo de código para copiar/colar que funcione como está "
+"quando colado em um Jupyter Notebook ou arquivo .py, se isso for possível."
#: ../../tutorials/add-readme.md:140
msgid ""
"If there are tokens and other steps needed to run your package, be sure "
"to be clear about what those steps are."
msgstr ""
+"Se forem necessários tokens e outras etapas para executar seu pacote, deixe "
+"claras quais são."
#: ../../tutorials/add-readme.md:143
msgid "For the pyosPackage, a short get started demo might look like this:"
msgstr ""
+"Para o pyosPackage, uma demonstração curta de primeiros passos pode ficar "
+"assim:"
#: ../../tutorials/add-readme.md:151
msgid ""
@@ -813,16 +1005,20 @@ msgid ""
"created. If you don't have this yet, you can leave it empty for the time "
"being."
msgstr ""
+"Ou pode ser simplesmente um link para um tutorial de primeiros passos que "
+"você criou. Se ainda não tiver isso, pode deixar em branco por enquanto."
#: ../../tutorials/add-readme.md:154
msgid ""
"This would also be a great place to add links to tutorials that help "
"users understand how to use your package for common workflows."
msgstr ""
+"Este também seria um ótimo lugar para adicionar links para tutoriais que "
+"ajudem os usuários a entender como usar seu pacote em workflows comuns."
#: ../../tutorials/add-readme.md:159
msgid "Step 7: Community section"
-msgstr ""
+msgstr "Passo 7: Seção de comunidade"
#: ../../tutorials/add-readme.md:161
msgid ""
@@ -830,6 +1026,9 @@ msgid ""
"information for users who may want to engage with your project. This "
"engagement will likely happen on a platform like GitHub or GitLab."
msgstr ""
+"A seção de comunidade do README é o lugar para incluir informações para "
+"usuários que queiram se envolver com o projeto. Esse engajamento "
+"provavelmente acontecerá em uma plataforma como GitHub ou GitLab."
#: ../../tutorials/add-readme.md:163
msgid ""
@@ -837,6 +1036,9 @@ msgid ""
"and `CODE_OF_CONDUCT.md`. You will create a code of conduct file in the "
"[next lesson](add-license-coc)."
msgstr ""
+"Na seção de comunidade, você adicionará links para o guia de contribuição e "
+"para o `CODE_OF_CONDUCT.md`. Você criará um arquivo de código de conduta na "
+"[próxima lição](add-license-coc)."
#: ../../tutorials/add-readme.md:167
msgid ""
@@ -844,32 +1046,37 @@ msgid ""
"that contributors and your maintainer team will follow. The development "
"guide outlines how to perform maintenance tasks such as:"
msgstr ""
+"Conforme seu pacote cresce, você também pode ter um link para um guia de "
+"desenvolvimento que contribuidores e a equipe de mantenedores seguirão. O "
+"guia de desenvolvimento descreve como realizar tarefas de manutenção, como:"
#: ../../tutorials/add-readme.md:170
msgid "running tests"
-msgstr ""
+msgstr "executar testes"
#: ../../tutorials/add-readme.md:171
msgid "making package releases"
-msgstr ""
+msgstr "fazer releases do pacote"
#: ../../tutorials/add-readme.md:172
msgid "building documentation"
-msgstr ""
+msgstr "gerar documentação"
#: ../../tutorials/add-readme.md:173
msgid "and more."
-msgstr ""
+msgstr "e mais."
#: ../../tutorials/add-readme.md:177
msgid "Step 8: Citation information"
-msgstr ""
+msgstr "Passo 8: Informações de citação"
#: ../../tutorials/add-readme.md:179
msgid ""
"Finally it is important to let users know how to cite your package. You "
"can communicate citation information in a few different ways."
msgstr ""
+"Por fim, é importante informar aos usuários como citar seu pacote. Você "
+"pode comunicar informações de citação de algumas formas diferentes."
#: ../../tutorials/add-readme.md:182
msgid ""
@@ -878,6 +1085,11 @@ msgid ""
"GitHub. [Check out this short tutorial that covers setting that "
"up.](https://coderefinery.github.io/github-without-command-line/doi/)"
msgstr ""
+"Você pode usar uma ferramenta como o zenodo para criar um DOI e informações "
+"de citação associadas ao seu pacote se ele estiver hospedado em uma "
+"plataforma como o GitHub. [Confira este tutorial curto que explica como "
+"configurar "
+"isso.](https://coderefinery.github.io/github-without-command-line/doi/)"
#: ../../tutorials/add-readme.md:186
msgid ""
@@ -888,14 +1100,21 @@ msgid ""
" get a cross-ref DOI through [our partnership with the Journal of Open "
"Source Software.](https://www.pyopensci.org/about-peer-review/index.html)"
msgstr ""
+"Alternativamente, se você submeter seu pacote a um processo de revisão por "
+"pares, como [o liderado pelo "
+"pyOpenSci](https://www.pyopensci.org/about-peer-review/index.html). Depois "
+"de aceito pelo pyOpenSci, se seu pacote estiver no escopo, você pode ser "
+"aceito pelo Journal of Open Source Software e obter um DOI cross-ref por "
+"meio da [nossa parceria com o Journal of Open "
+"SourceSoftware.](https://www.pyopensci.org/about-peer-review/index.html)"
#: ../../tutorials/add-readme.md:190
msgid "The finished README file"
-msgstr ""
+msgstr "O README finalizado"
#: ../../tutorials/add-readme.md:192
msgid "Your finished `README.md` file should look something like this:"
-msgstr ""
+msgstr "Seu arquivo `README.md` finalizado deve ficar parecido com isto:"
#: ../../tutorials/add-readme.md:242
msgid ""
@@ -906,6 +1125,11 @@ msgid ""
"this file as you further develop your package and as a community begins "
"to use your package."
msgstr ""
+"É importante considerar as informações que um novo usuário ou contribuidor "
+"pode precisar ao criar seu arquivo `README.md`. Embora não exista um "
+"template perfeito, acima está um conjunto de recomendações para quando você "
+"está começando. Você pode precisar adicionar outros elementos a este "
+"arquivo conforme desenvolve mais o pacote e uma comunidade começa a usá-lo."
#: ../../tutorials/add-readme.md:248
msgid ""
@@ -913,18 +1137,21 @@ msgid ""
"your Python package. A license file is critical as it tells users how "
"they legally can (and can't) use your package. It also:"
msgstr ""
+"Na [próxima lição](add-license-coc.md), você adicionará um arquivo LICENSE "
+"ao seu pacote Python. Um arquivo de licença é fundamental, pois informa aos "
+"usuários como podem (e não podem) usar seu pacote legalmente. Ele também:"
#: ../../tutorials/add-readme.md:252
msgid "Builds trust with your users"
-msgstr ""
+msgstr "Gera confiança com seus usuários"
#: ../../tutorials/add-readme.md:253
msgid "Discourages misuse of your package and associated code"
-msgstr ""
+msgstr "Desencoraja o uso indevido do seu pacote e do código associado"
#: ../../tutorials/command-line-reference.md:6 ../../tutorials/intro.md:63
msgid "Command Line Reference Guide"
-msgstr ""
+msgstr "Guia de referência da linha de comando"
#: ../../tutorials/command-line-reference.md:9
msgid ""
@@ -934,6 +1161,11 @@ msgid ""
"installing [Hatch](get-to-know-hatch) to publishing the package on [PyPI"
"](publish-pypi) and conda-forge."
msgstr ""
+"**O que são estas tabelas:** Estas tabelas resumem as entradas de linha de "
+"comando (por exemplo, `pipx install hatch`, `hatch build` ou `python -m "
+"build`) necessárias para concluir todas as etapas do processo de criação de "
+"pacote, desde a instalação do [Hatch](get-to-know-hatch) até a publicação "
+"do pacote no [PyPI](publish-pypi) e no conda-forge."
#: ../../tutorials/command-line-reference.md:14
#, python-brace-format
@@ -942,6 +1174,10 @@ msgid ""
"non-automated steps (e.g., create a PyPI account, create a {term}`API "
"token`) you have to complete throughout the package creation process."
msgstr ""
+"**O que estas tabelas não são:** Estas tabelas não cobrem as etapas manuais "
+"ou não automatizadas (por exemplo, criar uma conta no PyPI, criar um "
+"{term}`API token`) que você precisa concluir ao longo do processo de "
+"criação do pacote."
#: ../../tutorials/command-line-reference.md:18
msgid ""
@@ -951,31 +1187,36 @@ msgid ""
" the command, e.g., [COMMAND_DESCRIPTION] (Windows). Corresponding "
"commands for macOS and Linux will be added in the future."
msgstr ""
+"**Nota sobre sistema operacional:** A versão atual deste guia foi testada "
+"apenas no Windows. Muitos comandos são específicos do Windows. Comandos "
+"específicos por SO são indicados com parênteses após a descrição do "
+"comando, por exemplo, [DESCRIÇÃO_DO_COMANDO] (Windows). Os comandos "
+"correspondentes para macOS e Linux serão adicionados no futuro."
#: ../../tutorials/command-line-reference.md:21
msgid "Environment Setup"
-msgstr ""
+msgstr "Configuração do ambiente"
#: ../../tutorials/command-line-reference.md:43
msgid "Package Development"
-msgstr ""
+msgstr "Desenvolvimento do pacote"
#: ../../tutorials/command-line-reference.md:62
msgid "Package Publishing"
-msgstr ""
+msgstr "Publicação do pacote"
#: ../../tutorials/command-line-reference.md:81
msgid "Versions and Environments"
-msgstr ""
+msgstr "Versões e ambientes"
#: ../../tutorials/create-python-package.md:7
msgid "Create a pure Python package"
-msgstr ""
+msgstr "Crie um pacote Python puro"
#: ../../tutorials/create-python-package.md:9
#: ../../tutorials/develop-python-package-hatch.md:9
msgid "About this lesson"
-msgstr ""
+msgstr "Sobre esta lição"
#: ../../tutorials/create-python-package.md:13
#, python-brace-format
@@ -985,23 +1226,31 @@ msgid ""
"locally and remotely from a website such as GitHub (or GitLab) into a "
"Python environment."
msgstr ""
+"Esta lição usa o template copier de pacote Python do pyOpenSci para criar "
+"um {term}`pacote Python ` rapidamente. Seu pacote será "
+"instalável localmente e remotamente a partir de um site como GitHub (ou "
+"GitLab) em um ambiente Python."
#: ../../tutorials/create-python-package.md:18
#: ../../tutorials/setup-py-to-pyproject-toml.md:23
msgid "In this lesson, you will learn:"
-msgstr ""
+msgstr "Nesta lição, você aprenderá:"
#: ../../tutorials/create-python-package.md:20
msgid ""
"How to make your code installable into any Python environment, both "
"locally and from GitHub"
msgstr ""
+"Como tornar seu código instalável em qualquer ambiente Python, localmente e "
+"a partir do GitHub"
#: ../../tutorials/create-python-package.md:21
msgid ""
"How to update a [pyproject.toml file](pyproject-toml), which contains the"
" metadata needed to build, install, and publish your package."
msgstr ""
+"Como atualizar um [arquivo pyproject.toml](pyproject-toml), que contém os "
+"metadata necessários para fazer build, instalar e publicar seu pacote."
#: ../../tutorials/create-python-package.md:23
#, python-brace-format
@@ -1009,14 +1258,16 @@ msgid ""
"How to declare a {term}`Build backend` which will be used to [build"
"](build-package) and install your package"
msgstr ""
+"Como declarar um {term}`backend de construção ` que será "
+"usado para fazer [build](build-package) e instalar seu pacote"
#: ../../tutorials/create-python-package.md:25
msgid "How to install your package in editable mode for interactive development"
-msgstr ""
+msgstr "Como instalar seu pacote em modo editável para desenvolvimento interativo"
#: ../../tutorials/create-python-package.md:28
msgid "**What you need to complete this lesson**"
-msgstr ""
+msgstr "**O que você precisa para concluir esta lição**"
#: ../../tutorials/create-python-package.md:30
msgid ""
@@ -1025,6 +1276,10 @@ msgid ""
"[Copier](https://copier.readthedocs.io/en/stable/) and [Hatch installed"
"](get-to-know-hatch) to complete the lesson successfully."
msgstr ""
+"Para concluir esta lição, você precisará de um ambiente Python local e de um "
+"shell no seu computador. Será necessário ter o "
+"[Copier](https://copier.readthedocs.io/en/stable/) e o [Hatch "
+"instalado](get-to-know-hatch) para concluir a lição com sucesso."
#: ../../tutorials/create-python-package.md:35
msgid ""
@@ -1034,6 +1289,11 @@ msgid ""
"[gitbash](https://gitforwindows.org/) for any Shell and git-related "
"steps."
msgstr ""
+"Se você usa Windows ou não está familiarizado com Shell, pode querer "
+"conferir a lição de shell da Carpentries[^shell-lesson]. Usuários de "
+"Windows provavelmente precisarão configurar uma ferramenta como "
+"[gitbash](https://gitforwindows.org/) para qualquer etapa relacionada a "
+"Shell e git."
#: ../../tutorials/create-python-package.md:41
msgid ""
@@ -1043,6 +1303,11 @@ msgid ""
"environment. It them lists your-package along with a few other core "
"packages such as Matplotlib, NumPy, Pandas, Xarray and GeoPandas."
msgstr ""
+"Este diagrama tem duas caixas menores com setas apontando para a direita em "
+"direção a um ambiente Python. As caixas pequenas mostram seu-pacote e pip "
+"install pacote. A caixa do ambiente à direita diz — seu ambiente Python. Em "
+"seguida, lista seu-pacote junto com alguns outros pacotes principais, como "
+"Matplotlib, NumPy, Pandas, Xarray e GeoPandas."
#: ../../tutorials/create-python-package.md:43
msgid ""
@@ -1054,10 +1319,17 @@ msgid ""
"directly from there. [Scroll to the bottom of the page to learn more "
"about the basic elements of a Python package.](package-overview)."
msgstr ""
+"Em uma [lição anterior, você aprendeu o que é um pacote Python](intro). "
+"Criar um pacote Python permite instalar seu código em qualquer ambiente "
+"Python no seu computador. Em seguida, você pode importá-lo em workflows da "
+"mesma forma que importaria um pacote como Pandas ou GeoPandas. Se você "
+"enviar seu código para GitHub ou GitLab, também pode instalá-lo diretamente "
+"de lá. [Role até o final da página para saber mais sobre os elementos "
+"básicos de um pacote Python.](package-overview)."
#: ../../tutorials/create-python-package.md:49
msgid "Create your Python package"
-msgstr ""
+msgstr "Crie seu pacote Python"
#: ../../tutorials/create-python-package.md:51
msgid ""
@@ -1068,14 +1340,20 @@ msgid ""
"directory structure, and associated key files (`__init__.py` and "
"`pyproject.toml`)."
msgstr ""
+"Abaixo, você criará um pacote Python puro usando o [template copier "
+"dopyOpenSci](https://github.com/pyOpenSci/pyos-package-template). Nosso "
+"template usa Hatch como ferramenta de empacotamento padrão. No final desta "
+"lição, você aprenderá mais sobre o básico da estrutura de diretórios de um "
+"pacote Python e os arquivos principais associados (`__init__.py` e "
+"`pyproject.toml`)."
#: ../../tutorials/create-python-package.md:53
msgid "Step 1: Set Up the Package Directory Structure"
-msgstr ""
+msgstr "Passo 1: Configure a estrutura de diretórios do pacote"
#: ../../tutorials/create-python-package.md:55
msgid "Open your shell or preferred terminal."
-msgstr ""
+msgstr "Abra seu shell ou terminal preferido."
#: ../../tutorials/create-python-package.md:56
msgid ""
@@ -1083,20 +1361,25 @@ msgid ""
"where you'd like your package to live. Our template will create the "
"package directory structure for you"
msgstr ""
+"Use o comando `cd` do shell para navegar até o local onde você quer que seu "
+"pacote fique. Nosso template criará a estrutura de diretórios do pacote para "
+"você"
#: ../../tutorials/create-python-package.md:57
msgid "Choose a name for your package. The name should:"
-msgstr ""
+msgstr "Escolha um nome para seu pacote. O nome deve:"
#: ../../tutorials/create-python-package.md:58
msgid "Have no spaces (*Required*)"
-msgstr ""
+msgstr "Não ter espaços (*Obrigatório*)"
#: ../../tutorials/create-python-package.md:59
msgid ""
"Use all lowercase characters (*Recommended*). For this tutorial, we will "
"use `pyospackage`."
msgstr ""
+"Usar apenas letras minúsculas (*Recomendado*). Para este tutorial, usaremos "
+"`pyospackage`."
#: ../../tutorials/create-python-package.md:60
msgid ""
@@ -1104,6 +1387,9 @@ msgid ""
"the name `pyos*package` is not an acceptable name. However, the names "
"`pyos_package` or `pyos-package` are both OK."
msgstr ""
+"Use apenas letras e os caracteres _ ou - no nome. Isso significa que o nome "
+"`pyos*package` não é aceitável. Porém, os nomes `pyos_package` "
+"ou`pyos-package` estão OK."
#: ../../tutorials/create-python-package.md:62
msgid ""
@@ -1111,12 +1397,16 @@ msgid ""
"prompts that will ask you questions and help you to customize your Python"
" package."
msgstr ""
+"No seu terminal, **execute o comando abaixo**. Isso iniciará uma série de "
+"prompts que farão perguntas e ajudarão você a personalizar seu pacote Python."
#: ../../tutorials/create-python-package.md:68
msgid ""
"After running the command above, the template will walk you through a "
"series of questions."
msgstr ""
+"Depois de executar o comando acima, o template guiará você por uma série de "
+"perguntas."
#: ../../tutorials/create-python-package.md:70
msgid ""
@@ -1126,6 +1416,10 @@ msgid ""
" of your package that contains documentation, tests and a example module "
"for you to use."
msgstr ""
+"Observe que, quando chegar ao prompt \"Do you want to answer one more "
+"question, and skip the rest, using the default values?\", você pode escolher "
+"Yes, but with a minimal setup para criar a versão mais básica do "
+"seu pacote, contendo documentação, testes e um example module para você usar."
#: ../../tutorials/create-python-package.md:72
msgid ""
@@ -1133,20 +1427,25 @@ msgid ""
"username and will then create a package with basic tests, documentation, "
"and GitHub configuration setup for you."
msgstr ""
+"Após essa pergunta, o template pedirá seu nome de usuário do GitHub "
+"preferido e criará um pacote com testes básicos, documentação e "
+"configuração do GitHub para você."
#: ../../tutorials/create-python-package.md:93
msgid ""
"The template will then begin to copy files into the directory that used "
"above. (`.` means current working directory.)"
msgstr ""
+"O template então começará a copiar arquivos para o diretório usado acima. "
+"(`.` significa diretório de trabalho atual.)"
#: ../../tutorials/create-python-package.md:101
msgid "The final package structure will look like this:"
-msgstr ""
+msgstr "A estrutura final do pacote ficará assim:"
#: ../../tutorials/create-python-package.md
msgid "A full package with tests, docs, and GitHub infrastructure"
-msgstr ""
+msgstr "Um pacote completo com testes, docs e infraestrutura do GitHub"
#: ../../tutorials/create-python-package.md:119
msgid ""
@@ -1157,14 +1456,20 @@ msgid ""
"platform you wish to host it on (GitHub vs GitLab), whether you want "
"typing, what documentation engine you want to use, and more."
msgstr ""
+"Se você usar a opção padrão \"bells and whistles\" ao responder aos prompts "
+"do template, nosso template criará uma configuração completa do pacote com "
+"GitHub CI Actions, typing, testes, ambientes e mais usando o Hatch. Se "
+"você personalizar o pacote inteiro, poderá selecionar em qual plataforma "
+"deseja hospedá-lo (GitHub vs GitLab), caso queira typing, qual engine de "
+"documentação quer usar, e mais."
#: ../../tutorials/create-python-package.md:123
msgid "The resulting package directory looks like this:"
-msgstr ""
+msgstr "O diretório do pacote resultante fica assim:"
#: ../../tutorials/create-python-package.md:146
msgid "The default tools that your package uses are:"
-msgstr ""
+msgstr "As ferramentas padrão que seu pacote usa são:"
#: ../../tutorials/create-python-package.md:148
msgid ""
@@ -1172,14 +1477,17 @@ msgid ""
"/hosting-tools/sphinx-python-package-documentation-tools.html) with the "
"PyData Sphinx Theme for documentation"
msgstr ""
+"[Sphinx](https://www.pyopensci.org/python-package-guide/documentation/hostin"
+"g-tools/sphinx-python-package-documentation-tools.html) com o PyData Sphinx "
+"Theme para documentação"
#: ../../tutorials/create-python-package.md:149
msgid "pytest for testing"
-msgstr ""
+msgstr "pytest para testes"
#: ../../tutorials/create-python-package.md:150
msgid "Hatch for environment setup"
-msgstr ""
+msgstr "Hatch para configuração de ambiente"
#: ../../tutorials/create-python-package.md:152
msgid ""
@@ -1187,26 +1495,29 @@ msgid ""
"package setup, choose `No, I want to fully customize the template.`. "
"This will allow you to select:"
msgstr ""
+"**Personalização completa** Se você quiser personalizar qualquer elemento "
+"da configuração do seu pacote, escolha `No, I want to fully customize the "
+"template.`. Isso permitirá que você selecione:"
#: ../../tutorials/create-python-package.md:155
msgid "Sphinx vs [MkDocs](https://www.mkdocs.org/) vs no documentation"
-msgstr ""
+msgstr "Sphinx vs [MkDocs](https://www.mkdocs.org/) vs sem documentação"
#: ../../tutorials/create-python-package.md:156
msgid "GitHub vs GitLab"
-msgstr ""
+msgstr "GitHub vs GitLab"
#: ../../tutorials/create-python-package.md:157
msgid "VCS versioning"
-msgstr ""
+msgstr "versionamento VCS"
#: ../../tutorials/create-python-package.md:158
msgid "and more"
-msgstr ""
+msgstr "e mais"
#: ../../tutorials/create-python-package.md:161
msgid "Step 2: Explore the existing module in your package"
-msgstr ""
+msgstr "Passo 2: Explore o módulo existente no seu pacote"
#: ../../tutorials/create-python-package.md:163
#, python-brace-format
@@ -1216,18 +1527,22 @@ msgid ""
"you have an `example.py` module that you can use to test out your package"
" quickly."
msgstr ""
+"Um {term}`módulo ` refere-se a um arquivo `.py` contendo o código "
+"que você quer que seu pacote acesse e execute. No subdiretório "
+"`pyospackage`, você tem um module `example.py` que pode usar para testar "
+"seu pacote rapidamente."
#: ../../tutorials/create-python-package.md:167
msgid "Notice that the code in the example.py module, has a few features:"
-msgstr ""
+msgstr "Observe que o código no module example.py tem algumas características:"
#: ../../tutorials/create-python-package.md:169
msgid "It has a [numpy-style docstring](numpy-docstring)"
-msgstr ""
+msgstr "Ele tem uma [numpy-style docstring](numpy-docstring)"
#: ../../tutorials/create-python-package.md:170
msgid "It uses [typing](type-hints)"
-msgstr ""
+msgstr "Ele usa [typing](type-hints)"
#: ../../tutorials/create-python-package.md:171
msgid ""
@@ -1242,24 +1557,29 @@ msgid ""
"Style Docstring[^googledoc], and the Epytext Style "
"Docstrings[^epytextdoc]."
msgstr ""
+"Python suporta diferentes formatos de docstring. Os formatos mais populares "
+"para documentar objetos Python são NumPy Style Docstring[^numpydoc], Google "
+"Style Docstring[^googledoc] e Epytext Style Docstrings[^epytextdoc]."
#: ../../tutorials/create-python-package.md:175
msgid "**pyOpenSci recommends using the NumPy Docstring convention.**"
-msgstr ""
+msgstr "**A pyOpenSci recomenda usar a convenção NumPy Docstring.**"
#: ../../tutorials/create-python-package.md:177
msgid ""
"[Learn more about docstrings here](api-docstrings) for an overview of "
"both topics."
msgstr ""
+"[Saiba mais sobre docstrings aqui](api-docstrings) para uma visão geral de "
+"ambos os tópicos."
#: ../../tutorials/create-python-package.md:206
msgid "Python modules and the `__init__.py` file"
-msgstr ""
+msgstr "Módulos Python e o arquivo `__init__.py`"
#: ../../tutorials/create-python-package.md:210
msgid "The word module refers to a `.py` file containing Python code."
-msgstr ""
+msgstr "A palavra módulo refere-se a um arquivo `.py` contendo código Python."
#: ../../tutorials/create-python-package.md:212
msgid ""
@@ -1267,10 +1587,13 @@ msgid ""
"at least one module that may be imported and used in your code. A package"
" can have multiple modules[^python-modules]."
msgstr ""
+"O `__init__.py` permite que o Python reconheça que um diretório contém pelo "
+"menos um módulo que pode ser importado e usado no seu código. Um pacote "
+"pode ter vários módulos[^python-modules]."
#: ../../tutorials/create-python-package.md:217
msgid "Step 3: Optional -- Add code to your module"
-msgstr ""
+msgstr "Passo 3: Opcional -- Adicione código ao seu módulo"
#: ../../tutorials/create-python-package.md:219
msgid ""
@@ -1278,10 +1601,13 @@ msgid ""
"a simple function. For example, write a second function that multiplies "
"numbers."
msgstr ""
+"Se quiser, adicione uma segunda função ao módulo `example.py`. Pode ser "
+"uma função simples. Por exemplo, escreva uma segunda função que "
+"multiplique números."
#: ../../tutorials/create-python-package.md:222
msgid "Step 4: Check out the metadata in your `pyproject.toml` file"
-msgstr ""
+msgstr "Passo 4: Confira o metadata no seu arquivo `pyproject.toml`"
#: ../../tutorials/create-python-package.md:224
msgid ""
@@ -1290,6 +1616,10 @@ msgid ""
"to-know-hatch), which will build your package. You can also specify "
"metadata for your package."
msgstr ""
+"Um arquivo [pyproject.toml](pyproject-toml) armazena metadata que fornece "
+"instruções a várias ferramentas que interagem com ele, incluindo "
+"[Hatch](get-to-know-hatch), que fará o build do seu pacote. Você também pode "
+"especificar metadata para o seu pacote."
#: ../../tutorials/create-python-package.md:229
msgid ""
@@ -1297,26 +1627,33 @@ msgid ""
" when you add additional metadata/information to this file.](pyproject-"
"toml.md)"
msgstr ""
+"Você aprenderá mais sobre o formato `pyproject.toml` na [próxima lição, "
+"quando adicionar metadata/informações adicionais a este "
+"arquivo.](pyproject-toml.md)"
#: ../../tutorials/create-python-package.md:232
msgid ""
"The metadata in your generated `pyproject.toml` is already setup for you "
"using the information you provided the copier template above."
msgstr ""
+"O metadata no seu `pyproject.toml` gerado já está configurado para você com "
+"as informações que você forneceu ao copiar o template acima."
#: ../../tutorials/create-python-package.md:234
msgid "Brief overview of the TOML file"
-msgstr ""
+msgstr "Visão geral breve do arquivo TOML"
#: ../../tutorials/create-python-package.md:237
msgid ""
"[The TOML format](https://toml.io/en/) consists of tables and variables. "
"Tables are sections of information denoted by square brackets:"
msgstr ""
+"[O formato TOML](https://toml.io/en/) consiste em tabelas e "
+"variáveis. Tabelas são seções de informação indicadas por colchetes:"
#: ../../tutorials/create-python-package.md:239
msgid "`[this-is-a-table]`."
-msgstr ""
+msgstr "`[this-is-a-table]`."
#: ../../tutorials/create-python-package.md:241
msgid ""
@@ -1324,6 +1661,9 @@ msgid ""
"an `=` sign. For instance, a `build-system` table most often holds two "
"(2) variables:"
msgstr ""
+"Tabelas podem conter variáveis definidas por um nome de variável e um sinal "
+"de `=`. Por exemplo, uma tabela `build-system` geralmente contém duas (2) "
+"variáveis:"
#: ../../tutorials/create-python-package.md:244
msgid ""
@@ -1331,34 +1671,45 @@ msgid ""
"prior to building your package. In this case "
"[hatchling](https://pypi.org/project/hatchling/)."
msgstr ""
+"`requires = `, que informa a uma ferramenta de build quais ferramentas ela "
+"precisa instalar antes de fazer o build do seu pacote. Neste caso, "
+"[hatchling](https://pypi.org/project/hatchling/)."
#: ../../tutorials/create-python-package.md:246
msgid ""
"`build-backend = `, which is used to define the specific build-backend "
"name, (in this example we are using `hatchling.build`)."
msgstr ""
+"`build-backend = `, que é usado para definir o nome específico do "
+"build-backend (neste exemplo estamos usando `hatchling.build`)."
#: ../../tutorials/create-python-package.md:255
msgid ""
"TOML organizes data structures, defining relationships within a "
"configuration file."
msgstr ""
+"TOML organiza estruturas de dados, definindo relacionamentos dentro de um "
+"arquivo de configuração."
#: ../../tutorials/create-python-package.md:258
msgid "[Learn more about the pyproject.toml format here.](pyprojecttoml-metadata)"
-msgstr ""
+msgstr "[Saiba mais sobre o formato pyproject.toml aqui.](pyprojecttoml-metadata)"
#: ../../tutorials/create-python-package.md:261
msgid ""
"Open up the `pyproject.toml` file that Hatch created in your favorite "
"text editor. It should look something like the example below."
msgstr ""
+"Abra o arquivo `pyproject.toml` que o Hatch criou no seu editor de texto "
+"favorito. Ele deve parecer algo como o exemplo abaixo."
#: ../../tutorials/create-python-package.md:262
msgid ""
"Make sure the package version, package name, and author name look "
"correct. The email is optional."
msgstr ""
+"Verifique se a versão do pacote, o nome do pacote e o nome do autor estão "
+"corretos. O e-mail é opcional."
#: ../../tutorials/create-python-package.md:300
msgid ""
@@ -1366,10 +1717,13 @@ msgid ""
"see a section that defines Hatch environments. We will cover Hatch "
"environments in a later lesson."
msgstr ""
+"Na parte inferior do arquivo `pyproject.toml` gerado pelo template, você "
+"verá uma seção que define ambientes Hatch. Abordaremos ambientes Hatch "
+"em uma lição posterior."
#: ../../tutorials/create-python-package.md:302
msgid "The bare minimum needed in a pyproject.toml file"
-msgstr ""
+msgstr "O mínimo necessário em um arquivo pyproject.toml"
#: ../../tutorials/create-python-package.md:305
msgid ""
@@ -1378,42 +1732,53 @@ msgid ""
"suggest that you flesh out your metadata early on in the `pyproject.toml`"
" file."
msgstr ""
+"As informações essenciais que você precisa em um arquivo `pyproject.toml` "
+"para publicar no PyPI são o **nome do pacote** e a **versão**. Porém, "
+"sugerimos que você preencha seu metadata logo no início no arquivo "
+"`pyproject.toml`."
#: ../../tutorials/create-python-package.md:307
msgid ""
"Once you have your project metadata in the `pyproject.toml` file, you "
"will rarely update it."
msgstr ""
+"Depois que você tiver o metadata do projeto no arquivo `pyproject.toml`, "
+"raramente precisará atualizá-lo."
#: ../../tutorials/create-python-package.md:311
msgid "Step 5: Install your package locally"
-msgstr ""
+msgstr "Passo 5: Instale seu pacote localmente"
#: ../../tutorials/create-python-package.md:313
msgid "At this point, you should have:"
-msgstr ""
+msgstr "Neste ponto, você deve ter:"
#: ../../tutorials/create-python-package.md:315
msgid "A project directory structure with a `pyproject.toml` file at the root"
msgstr ""
+"Uma estrutura de diretório de projeto com um arquivo `pyproject.toml` na "
+"raiz"
#: ../../tutorials/create-python-package.md:316
msgid "A package directory containing an empty `__init__.py` file and"
-msgstr ""
+msgstr "Um diretório de pacote contendo um arquivo `__init__.py` vazio e"
#: ../../tutorials/create-python-package.md:317
msgid "At least one Python module (e.g. `example.py`)"
-msgstr ""
+msgstr "Pelo menos um Python module (por exemplo, `example.py`)"
#: ../../tutorials/create-python-package.md:319
msgid "You are now ready to install (and build) your Python package!"
-msgstr ""
+msgstr "Agora você está pronto para instalar (e fazer o build) do seu pacote Python!"
#: ../../tutorials/create-python-package.md:321
msgid ""
"While you can do this using Hatch, we will use pip for this lesson, so "
"you can see how to install your tool into your preferred environment."
msgstr ""
+"Embora você possa fazer isso usando Hatch, usaremos pip nesta lição, para "
+"que você veja como instalar sua ferramenta no ambiente de sua "
+"preferência."
#: ../../tutorials/create-python-package.md:323
msgid ""
@@ -1421,14 +1786,17 @@ msgid ""
"GitBash) and `cd` into your project directory if you are not already "
"there."
msgstr ""
+"Primeiro, abra seu shell preferido (usuários do Windows podem usar algo "
+"como GitBash) e use `cd` para ir ao diretório do projeto, se ainda não "
+"estiver lá."
#: ../../tutorials/create-python-package.md:324
msgid "Activate the Python environment that you wish to use."
-msgstr ""
+msgstr "Ative o ambiente Python que deseja usar."
#: ../../tutorials/create-python-package.md:325
msgid "Run `python -m pip install -e .`"
-msgstr ""
+msgstr "Execute `python -m pip install -e .`"
#: ../../tutorials/create-python-package.md:327
#: ../../tutorials/create-python-package.md:560
@@ -1437,21 +1805,23 @@ msgstr ""
#: ../../tutorials/publish-pypi.md:9 ../../tutorials/publish-pypi.md:185
#: ../../tutorials/publish-pypi.md:358 ../../tutorials/pyproject-toml.md:744
msgid "Todo"
-msgstr ""
+msgstr "Todo"
#: ../../tutorials/create-python-package.md:328
msgid "Add this back in when the lesson is published"
-msgstr ""
+msgstr "Adicionar isso de volta quando a lição for publicada"
#: ../../tutorials/create-python-package.md:329
msgid ""
"Activate the Python environment that you wish to use. If you need help "
"with working with virtual environments check out this lesson (add link)."
msgstr ""
+"Ative o ambiente Python que deseja usar. Se precisar de ajuda para "
+"trabalhar com ambiente virtual, confira esta lição (adicionar link)."
#: ../../tutorials/create-python-package.md:355
msgid "What does `python -m pip install -e .` do?"
-msgstr ""
+msgstr "O que `python -m pip install -e .` faz?"
#: ../../tutorials/create-python-package.md:358
msgid ""
@@ -1462,20 +1832,28 @@ msgid ""
"important caveat of editable mode is that every time you update your "
"code, you need to restart Python."
msgstr ""
+"`python -m pip install -e .` instala seu pacote no ambiente Python ativo "
+"atual em **modo editável** (`-e`). Instalar seu pacote em modo editável "
+"permite que você trabalhe no seu código e teste as atualizações de forma "
+"interativa na sua interface Python favorita. Uma ressalva importante do modo "
+"editável é que, sempre que atualizar seu código, você precisa reiniciar o "
+"Python."
#: ../../tutorials/create-python-package.md:363
msgid ""
"If you wish to install the package regularly (not in editable mode) you "
"can use:"
msgstr ""
+"Se quiser instalar o pacote normalmente (não em modo editável), você pode "
+"usar:"
#: ../../tutorials/create-python-package.md:366
msgid "`python -m pip install . `"
-msgstr ""
+msgstr "`python -m pip install . `"
#: ../../tutorials/create-python-package.md:368
msgid "**Using `python -m` when calling `pip`**"
-msgstr ""
+msgstr "**Usando `python -m` ao chamar `pip`**"
#: ../../tutorials/create-python-package.md:370
msgid ""
@@ -1483,6 +1861,9 @@ msgid ""
"current active environment. `python -m` is important to ensure that you "
"are calling the version of pip installed in your current environment."
msgstr ""
+"Acima, você usa`python -m` para chamar a versão do pip instalada no seu "
+"ambiente ativo atual. `python -m` é importante para garantir que você "
+"está chamando a versão do pip instalada no seu ambiente atual."
#: ../../tutorials/create-python-package.md:374
msgid ""
@@ -1492,10 +1873,15 @@ msgid ""
"directory on your computer instead of the `.` which tells pip to use the "
"current working directory."
msgstr ""
+"IMPORTANTE: pip também pode ser usado para instalar pacotes do PyPI. Porém, "
+"neste caso, você está dizendo ao pip para instalar seu pacote apartir de "
+"uma pasta local usando o `.`. Você também poderia especificar um caminho "
+"para o diretório do projeto no seu computador em vez do `.`, que informa ao "
+"pip para usar o diretório de trabalho atual."
#: ../../tutorials/create-python-package.md:377
msgid "Look for pyospackage in your environment"
-msgstr ""
+msgstr "Procure pyospackage no seu ambiente"
#: ../../tutorials/create-python-package.md:379
msgid ""
@@ -1503,16 +1889,21 @@ msgid ""
"environment. If you are using `venv` or `conda`, `pip` list will return a"
" list of packages in the current active environment."
msgstr ""
+"Depois de instalar seu pacote, você pode visualizá-lo no seu ambiente "
+"atual. Se estiver usando `venv` ou `conda`, `pip list` retornará uma lista "
+"de pacotes no ambiente ativo atual."
#: ../../tutorials/create-python-package.md:383
msgid ""
"Note that because `pyospackage` is installed in editable mode (`-e`), pip"
" will show you the directory path to your project's code"
msgstr ""
+"Observe que, como `pyospackage` está instalado em modo editável (`-e`), o "
+"pip mostrará o caminho do diretório para o código do seu projeto"
#: ../../tutorials/create-python-package.md:411
msgid "Step 6: Test out your new package"
-msgstr ""
+msgstr "Passo 6: Teste seu novo pacote"
#: ../../tutorials/create-python-package.md:413
msgid ""
@@ -1520,34 +1911,41 @@ msgid ""
"your chosen terminal to start a Python session in your active Python "
"environment."
msgstr ""
+"Depois de instalar seu pacote, digite \"python\" no prompt de comando no "
+"terminal escolhido para iniciar uma sessão Python no seu ambiente Python "
+"ativo."
#: ../../tutorials/create-python-package.md:416
msgid "You can now import your package and access the `add_numbers` function."
-msgstr ""
+msgstr "Agora você pode importar seu pacote e acessar a função `add_numbers`."
#: ../../tutorials/create-python-package.md:428
msgid "Installing packages from GitHub"
-msgstr ""
+msgstr "Instalando pacotes do GitHub"
#: ../../tutorials/create-python-package.md:430
msgid ""
"If you wish to share your code without publishing to PyPI you can always "
"install packages directly from GitHub using the syntax:"
msgstr ""
+"Se quiser compartilhar seu código sem publicar no PyPI, você sempre pode "
+"instalar pacotes diretamente do GitHub usando a sintaxe:"
#: ../../tutorials/create-python-package.md:437
msgid "To make your package GitHub installable, you can:"
-msgstr ""
+msgstr "Para tornar seu pacote instalável pelo GitHub, você pode:"
#: ../../tutorials/create-python-package.md:439
msgid "Create a new GitHub repository"
-msgstr ""
+msgstr "Criar um novo repositório do GitHub"
#: ../../tutorials/create-python-package.md:440
msgid ""
"Push the contents of the project directory that you created above, to "
"GitHub"
msgstr ""
+"Fazer push do conteúdo do diretório do projeto que você criou acima para o "
+"GitHub"
#: ../../tutorials/create-python-package.md:441
msgid ""
@@ -1555,80 +1953,97 @@ msgid ""
" use the command above, don't forget to substitute the user, repo, and "
"branch_or_tag with your specific values."
msgstr ""
+"Por fim, instale o pacote do GitHub usando o comando acima. Ao usar "
+"o comando acima, não se esqueça de substituir user, repo e "
+"branch_or_tag pelos seus valores específicos."
#: ../../tutorials/create-python-package.md:443
msgid ""
"For instance below you install the pyospackage from the main branch of "
"the pyOpenSci repository."
msgstr ""
+"Por exemplo, abaixo você instala o pyospackage da branch main do repositório "
+"da pyOpenSci."
#: ../../tutorials/create-python-package.md:446
msgid "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
-msgstr ""
+msgstr "`python -m pip install git+https://github.com/user/repo.git@branch_or_tag`"
#: ../../tutorials/create-python-package.md:450
msgid "Congratulations! You created your first Python package"
-msgstr ""
+msgstr "Parabéns! Você criou seu primeiro pacote Python"
#: ../../tutorials/create-python-package.md:452
msgid ""
"You have now created a Python package that you can install into any "
"Python environment."
msgstr ""
+"Agora você criou um pacote Python que pode instalar em qualquer "
+"ambiente Python."
#: ../../tutorials/create-python-package.md:457
msgid ""
"Add a [README file](add-readme.md) and [LICENSE](add-license-coc.md) to "
"your package"
msgstr ""
+"Adicione um [README file](add-readme.md) e [LICENSE](add-license-coc.md) ao "
+"seu pacote"
#: ../../tutorials/create-python-package.md:458
msgid ""
"[Add more metadata to your `pyproject.toml`](pyproject-toml.md) file to "
"support PyPI publication."
msgstr ""
+"[Adicione mais metadata ao seu `pyproject.toml`](pyproject-toml.md) para "
+"suportar a publicação no PyPI."
#: ../../tutorials/create-python-package.md:459
msgid ""
"[Learn how to build your package distribution](publish-pypi) files "
"(**sdist** and **wheel**) and publish to **test PyPI**."
msgstr ""
+"[Aprenda a fazer o build dos arquivos de distribuição do seu "
+"pacote](publish-pypi) (**sdist** e **wheel**) e publicar no **test PyPI**."
#: ../../tutorials/create-python-package.md:460
msgid ""
"Finally you will learn how to [publish to **conda-forge**](publish-conda-"
"forge) from **PyPI**."
msgstr ""
+"Por fim, você aprenderá a [publicar no "
+"**conda-forge**](publish-conda-forge) a partir do **PyPI**."
#: ../../tutorials/create-python-package.md:464
msgid "About the Python package directory structure"
-msgstr ""
+msgstr "Sobre a estrutura de diretório de um pacote Python"
#: ../../tutorials/create-python-package.md:466
msgid ""
"To make your Python code installable you need to create a specific "
"directory structure with the following elements:"
msgstr ""
+"Para tornar seu código Python instalável, você precisa criar uma estrutura "
+"de diretório específica com os seguintes elementos:"
#: ../../tutorials/create-python-package.md:468
msgid "A `pyproject.toml` file."
-msgstr ""
+msgstr "Um arquivo `pyproject.toml`."
#: ../../tutorials/create-python-package.md:469
msgid "A specific directory structure."
-msgstr ""
+msgstr "Uma estrutura de diretório específica."
#: ../../tutorials/create-python-package.md:470
msgid "Some code."
-msgstr ""
+msgstr "Algum código."
#: ../../tutorials/create-python-package.md:471
msgid "An `__init__.py` file in your code directory."
-msgstr ""
+msgstr "Um arquivo `__init__.py` no diretório do seu código."
#: ../../tutorials/create-python-package.md:473
msgid "The directory structure you'll create in this lesson will look like this:"
-msgstr ""
+msgstr "A estrutura de diretório que você criará nesta lição ficará assim:"
#: ../../tutorials/create-python-package.md:488
msgid ""
@@ -1637,6 +2052,10 @@ msgid ""
" code, create package structure, add metadata to pyproject.toml and pip "
"install package."
msgstr ""
+"Diagrama mostrando os passos básicos para criar um pacote instalável. Há 4 "
+"caixas com setas apontando para a direita. As caixas dizem: seu código, "
+"criar estrutura do pacote, adicionar metadata ao pyproject.toml e pip "
+"install pacote."
#: ../../tutorials/create-python-package.md:490
msgid ""
@@ -1644,14 +2063,17 @@ msgid ""
"file structure), you can `pip install` your package into any Python "
"environment on your computer."
msgstr ""
+"Depois que você tiver os itens básicos de um pacote Python (código, "
+"metadata e uma estrutura de arquivos), você pode `pip install` seu pacote "
+"em qualquer Python environment no seu computador."
#: ../../tutorials/create-python-package.md:493
msgid "About the basic package directory structure"
-msgstr ""
+msgstr "Sobre a estrutura básica de diretório do pacote"
#: ../../tutorials/create-python-package.md:495
msgid "Notice a few things about the above layout:"
-msgstr ""
+msgstr "Observe algumas coisas sobre o layout acima:"
#: ../../tutorials/create-python-package.md:497
msgid ""
@@ -1661,6 +2083,12 @@ msgid ""
"code](https://www.pyopensci.org/python-package-guide/package-structure-"
"code/python-package-structure.html#the-src-layout-and-testing)."
msgstr ""
+"O código do seu pacote fica dentro de um diretório "
+"`src/packagename`. Sugerimos que você use o diretório `src` (abreviação de "
+"**source code**) porque [garante que você está executando testes na versão "
+"instalada do seu "
+"código](https://www.pyopensci.org/python-package-guide/package-structure-cod"
+"e/python-package-structure.html#the-src-layout-and-testing)."
#: ../../tutorials/create-python-package.md:498
msgid ""
@@ -1669,16 +2097,22 @@ msgid ""
" will be the name for importing your package in Python code once "
"installed."
msgstr ""
+"Dentro do diretório `src`, você tem um diretório de pacote chamado "
+"`pyospackage`. Use o nome do seu pacote para esse diretório. Este será o "
+"nome para importar seu pacote no código Python depois de instalado."
#: ../../tutorials/create-python-package.md:499
msgid ""
"In your package directory, you have an `__init__.py` file and all of your"
" Python modules. You will learn more about the `__init__.py` file below."
msgstr ""
+"No diretório do seu pacote, você tem um arquivo `__init__.py` e todos os "
+"seus Python modules. Você aprenderá mais sobre o arquivo `__init__.py` "
+"abaixo."
#: ../../tutorials/create-python-package.md:500
msgid "The `pyproject.toml` file lives at the root directory of your package."
-msgstr ""
+msgstr "O arquivo `pyproject.toml` fica no diretório raiz do seu pacote."
#: ../../tutorials/create-python-package.md:501
msgid ""
@@ -1687,10 +2121,14 @@ msgid ""
"see that the GitHub / GitLab repository and the root directory name are "
"the same as the package name."
msgstr ""
+"O nome do diretório raiz do pacote é **pyospackage**, que é o nome "
+"do pacote. Isso não é obrigatório, mas você verá com frequência que o "
+"repositório do GitHub / GitLab e o nome do diretório raiz são os mesmos que o "
+"nome do pacote."
#: ../../tutorials/create-python-package.md:503
msgid "What is an `__init__.py` file?"
-msgstr ""
+msgstr "O que é um arquivo `__init__.py`?"
#: ../../tutorials/create-python-package.md:505
msgid ""
@@ -1699,31 +2137,40 @@ msgid ""
" imported directly into Python. The `__init__.py` file does not need to "
"contain any code in order for Python to recognize it; it can be empty."
msgstr ""
+"O arquivo `__init__.py` informa ao Python que um diretório deve ser tratado "
+"como um pacote Python. Assim, um diretório com um arquivo `__init__.py` "
+"pode ser importado diretamente no Python. O arquivo `__init__.py` não "
+"precisa conter nenhum código para o Python reconhecê-lo; ele pode estar "
+"vazio."
#: ../../tutorials/create-python-package.md:509
msgid ""
"For example, following the file structure example above which has an "
"`__init__.py` file within it, you can run:"
msgstr ""
+"Por exemplo, seguindo o exemplo de estrutura de arquivos acima, que tem um "
+"arquivo `__init__.py` dentro dele, você pode executar:"
#: ../../tutorials/create-python-package.md:515
#: ../../tutorials/pyproject-toml.md:56
msgid "What is a pyproject.toml file?"
-msgstr ""
+msgstr "O que é um arquivo pyproject.toml?"
#: ../../tutorials/create-python-package.md:517
msgid "The **pyproject.toml** file is:"
-msgstr ""
+msgstr "O arquivo **pyproject.toml** é:"
#: ../../tutorials/create-python-package.md:519
msgid ""
"Where you define your project's metadata (including its name, authors, "
"license, etc)"
msgstr ""
+"Onde você define o metadata do seu projeto (incluindo nome, autores, "
+"license, etc.)"
#: ../../tutorials/create-python-package.md:520
msgid "Where you define dependencies (the packages that it depends on)"
-msgstr ""
+msgstr "Onde você define dependências (os pacotes dos quais ele depende)"
#: ../../tutorials/create-python-package.md:521
msgid ""
@@ -1731,6 +2178,10 @@ msgid ""
"[build your package](../package-structure-code/python-package-"
"distribution-files-sdist-wheel)."
msgstr ""
+"Usado para especificar e configurar qual build backend você quer usar para "
+"[fazer o build do seu "
+"pacote](../package-structure-code/python-package-distribution-files-sdist-wh"
+"eel)."
#: ../../tutorials/create-python-package.md:523
msgid ""
@@ -1740,18 +2191,23 @@ msgid ""
"have a few basic items defined for the package to be installable "
"including:"
msgstr ""
+"Depois que os arquivos `__init__.py` e `pyproject.toml` forem adicionados, "
+"seu pacote pode ser construído e distribuído como um pacote Python "
+"instalável usando ferramentas como pip. Observe que o arquivo "
+"`pyproject.toml` precisa ter alguns itens básicos definidos para o pacote "
+"ser instalável, incluindo:"
#: ../../tutorials/create-python-package.md:529
msgid "The `build-backend` that you want to use,"
-msgstr ""
+msgstr "O `build-backend` que você quer usar,"
#: ../../tutorials/create-python-package.md:530
msgid "The project `name` and `version`."
-msgstr ""
+msgstr "O `name` e a `version` do projeto."
#: ../../tutorials/create-python-package.md:532
msgid "Why the pyproject.toml file is important"
-msgstr ""
+msgstr "Por que o arquivo pyproject.toml é importante"
#: ../../tutorials/create-python-package.md:535
msgid ""
@@ -1759,24 +2215,33 @@ msgid ""
"`setup.py` file and `setup.cfg` files. If you try to pip install a "
"package with no `pyproject.toml`, you will get the following error:"
msgstr ""
+"O arquivo `pyproject.toml` substitui parte da funcionalidade dos arquivos "
+"`setup.py` e `setup.cfg`. Se você tentar pip install um pacote sem "
+"`pyproject.toml`, receberá o seguinte erro:"
#: ../../tutorials/create-python-package.md:545
msgid ""
"If your project already has a `setup.py` file, Hatch can be used to "
"automatically create a `pyproject.toml`."
msgstr ""
+"Se o seu projeto já tiver um arquivo `setup.py`, o Hatch pode ser usado "
+"para criar automaticamente um `pyproject.toml`."
#: ../../tutorials/create-python-package.md:546
msgid ""
"See [Using Hatch to Migrate setup.py to a pyproject.toml](setup-py-to-"
"pyproject-toml.md)"
msgstr ""
+"Veja [Using Hatch to Migrate setup.py to a "
+"pyproject.toml](setup-py-to-pyproject-toml.md)"
#: ../../tutorials/create-python-package.md:561
msgid ""
"Is it clear where to add commands? Bash vs. Python console Bash vs. Zsh "
"is different"
msgstr ""
+"Está claro onde adicionar comandos? Bash vs. console Python Bash vs. Zsh é "
+"diferente"
#: ../../tutorials/create-python-package.md:563
msgid ""
@@ -1786,10 +2251,15 @@ msgid ""
"in Python, but a quick break-out with an explanation of what a package "
"can consist of would be helpful."
msgstr ""
+"ADICIONAR: nota sobre o que torna algo \"package worthy\", com um equívoco "
+"comum de que um pacote deve ser código pronto para produção valioso para um "
+"público amplo. Isso pode não ser um equívoco generalizado em Python, mas um "
+"break-out rápido com uma explicação do que um pacote pode consistir seria "
+"útil."
#: ../../tutorials/create-python-package.md:564
msgid "They can use a codespace to complete this lesson too."
-msgstr ""
+msgstr "Eles também podem usar um codespace para completar esta lição."
#: ../../tutorials/create-python-package.md:568
msgid ""
@@ -1797,32 +2267,37 @@ msgid ""
"automate defining a package version using git tags in the version and "
"release your package lesson."
msgstr ""
+"Quando esta lição existir, descomente esta admonition. Você aprenderá "
+"a automatizar a definição da versão de um pacote usando git tags na lição de "
+"versionar e lançar seu pacote."
#: ../../tutorials/create-python-package.md:552
msgid "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
-msgstr ""
+msgstr "[Carpentries shell lesson](https://swcarpentry.github.io/shell-novice/)"
#: ../../tutorials/create-python-package.md:556
msgid "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
-msgstr ""
+msgstr "[Numpy style docs](https://numpydoc.readthedocs.io/en/latest/format.html)"
#: ../../tutorials/create-python-package.md:555
msgid "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
-msgstr ""
+msgstr "[Google docstring style](https://google.github.io/styleguide/pyguide.html)"
#: ../../tutorials/create-python-package.md:557
msgid "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
-msgstr ""
+msgstr "[epydoc](https://epydoc.sourceforge.net/epytext.html)"
#: ../../tutorials/create-python-package.md:554
msgid ""
"[Python module "
"docs](https://docs.python.org/3/tutorial/modules.html#packages)"
msgstr ""
+"[Python module "
+"docs](https://docs.python.org/3/tutorial/modules.html#packages)"
#: ../../tutorials/develop-python-package-hatch.md:7
msgid "Use Hatch environments with your pure Python package"
-msgstr ""
+msgstr "Use ambientes Hatch com seu pacote puro Python"
#: ../../tutorials/develop-python-package-hatch.md:13
msgid ""
@@ -1831,6 +2306,10 @@ msgid ""
"lesson, you'll learn how to manage and use the Hatch environments set up "
"by de **What you need to complete this lesson**"
msgstr ""
+"[Em uma lição anterior](create-pure-python-package), você aprendeu a criar "
+"um pacote Python usando o copier template da pyOpenSci. Nesta lição, você "
+"aprenderá a gerenciar e usar os ambientes Hatch configurados no **O que "
+"você precisa para completar esta lição**"
#: ../../tutorials/develop-python-package-hatch.md:16
msgid ""
@@ -1839,6 +2318,10 @@ msgid ""
"our pyOpenSci copier template. You should also have [Hatch installed"
"](get-to-know-hatch)."
msgstr ""
+"Para completar esta lição, você precisará de um Python environment local e "
+"shell no seu computador. Você precisará ter criado um pacote usando nosso "
+"copier template da pyOpenSci. Você também deve ter "
+"[Hatch instalado](get-to-know-hatch)."
#: ../../tutorials/develop-python-package-hatch.md:20
msgid ""
@@ -1848,6 +2331,12 @@ msgid ""
"as [GitBash](https://gitforwindows.org/) for any Shell and git-related "
"steps."
msgstr ""
+"Se estiver usando Windows ou não estiver familiarizado com Shell, "
+"pode querer conferir a [Carpentries shell "
+"lesson](https://swcarpentry.github.io/shell-novice/). Usuários do Windows "
+"provavelmente precisarão configurar uma ferramenta como "
+"[GitBash](https://gitforwindows.org/) para qualquer passo relacionado a "
+"Shell e git."
#: ../../tutorials/develop-python-package-hatch.md:23
msgid ""
@@ -1855,6 +2344,9 @@ msgid ""
"with using [Hatch](get-to-know-hatch) to run tests, build and check your "
"package, and build your documentation."
msgstr ""
+"Boas-vindas ao seu novo pacote! Esta página ajudará você a começar a usar "
+"[Hatch](get-to-know-hatch) para executar testes, fazer o build e verificar "
+"seu pacote e construir sua documentação."
#: ../../tutorials/develop-python-package-hatch.md:27
#, python-brace-format
@@ -1863,20 +2355,23 @@ msgid ""
"your package directory. This file contains the configuration for your "
"package and is written using {term}`TOML` format. Here's the TL&DR:"
msgstr ""
+"Para começar, dê uma olhada no arquivo [pyproject.toml](pyproject-toml) no "
+"diretório do seu pacote. Este arquivo contém a configuração do seu pacote e "
+"é escrito no formato {term}`TOML`. Aqui vai o TL&DR:"
#: ../../tutorials/develop-python-package-hatch.md:31
msgid "Each `[]` section in the toml file is called a table."
-msgstr ""
+msgstr "Cada seção `[]` no arquivo toml é chamada de tabela."
#: ../../tutorials/develop-python-package-hatch.md:32
msgid "You can nest tables with double brackets like this`[[]]`"
-msgstr ""
+msgstr "Você pode aninhar tabelas com colchetes duplos assim`[[]]`"
#: ../../tutorials/develop-python-package-hatch.md:33
msgid ""
"Tables contain information about a certain thing that you want to "
"configure."
-msgstr ""
+msgstr "Tabelas contêm informações sobre algo que você quer configurar."
#: ../../tutorials/develop-python-package-hatch.md:36
msgid ""
@@ -1884,18 +2379,23 @@ msgid ""
"UV is a package manager built in Rust. It is fast and will significantly "
"speed up environment creation."
msgstr ""
+"Você pode configurar o Hatch para usar UV por padrão para gerenciamento de "
+"ambiente. UV é um gerenciador de pacotes construído em Rust. É rápido e "
+"acelerará significativamente a criação de ambientes."
#: ../../tutorials/develop-python-package-hatch.md:38
msgid ""
"To use UV with Hatch, configure Hatch in the \"tools\" section of your "
"`pyproject.toml` file."
msgstr ""
+"Para usar UV com Hatch, configure o Hatch na seção \"tools\" do seu arquivo "
+"`pyproject.toml`."
#: ../../tutorials/develop-python-package-hatch.md:46
msgid ""
"Using Hatch for developing, building, and maintaining your pure Python "
"package"
-msgstr ""
+msgstr "Usando Hatch para desenvolver, fazer o build, e manter seu pacote Python puro"
#: ../../tutorials/develop-python-package-hatch.md:48
#, python-brace-format
@@ -1905,50 +2405,67 @@ msgid ""
"[hatch environment](https://hatch.pypa.io/1.13/environment/) section, "
"that looks like this:"
msgstr ""
+"No template de pacote Python da pyOpenSci, configuramos definições "
+"de{term}`Hatch environment`. Você notará na parte inferior do arquivo uma "
+"seção [hatch environment](https://hatch.pypa.io/1.13/environment/), que se "
+"parece com isto:"
#: ../../tutorials/develop-python-package-hatch.md:59
msgid ""
"Hatch allows you to configure and run environments and scripts similar to"
" a workflow tool like tox or nox."
msgstr ""
+"Hatch permite que você configure e execute ambientes e scripts de forma "
+"semelhante a uma ferramenta de workflow como tox ou nox."
#: ../../tutorials/develop-python-package-hatch.md:62
msgid ""
"Hatch defaults to using `venv` to manage environments. However, you can "
"configure it to use other environment tools, such as conda or mamba."
msgstr ""
+"Hatch usa `venv` por padrão para gerenciar ambientes. Porém, você pode "
+"configurá-lo para usar outras ferramentas de ambiente, como conda ou "
+"mamba."
#: ../../tutorials/develop-python-package-hatch.md:64
msgid ""
"[Read the hatch documentation to learn more about environments. "
"](https://hatch.pypa.io/1.13/tutorials/environment/basic-usage/)"
msgstr ""
+"[Leia a documentação do Hatch para saber mais sobre ambientes. "
+"](https://hatch.pypa.io/1.13/tutorials/environment/basic-usage/)"
#: ../../tutorials/develop-python-package-hatch.md:68
msgid ""
"Below is the Hatch environment used to build and test your package. "
"Anytime you see: `tool.hatch.envs.test`, it tells Hatch:"
msgstr ""
+"Abaixo está o ambiente Hatch usado para fazer o build e testar seu "
+"pacote. Sempre que você vir: `tool.hatch.envs.test`, isso informa ao Hatch:"
#: ../../tutorials/develop-python-package-hatch.md:71
msgid ""
"\"Hey, Hatch, this is the definition for an environment.`test` is the "
"name of the environment that I want you to create.\""
msgstr ""
+"\"Ei, Hatch, esta é a definição de um ambiente. `test` é o nome do "
+"ambiente que quero que você crie.\""
#: ../../tutorials/develop-python-package-hatch.md:73
msgid "So `tool.hatch.envs.build` will create an environment called `build`."
-msgstr ""
+msgstr "Então `tool.hatch.envs.build` criará um ambiente chamado `build`."
#: ../../tutorials/develop-python-package-hatch.md:75
msgid ""
"Below the environment \"declaration,\" you can see the definition of what"
" should be in that environment."
msgstr ""
+"Abaixo da \"declaração\" do ambiente, você pode ver a definição do que "
+"deve estar nesse ambiente."
#: ../../tutorials/develop-python-package-hatch.md:77
msgid "A Hatch environment to build your package"
-msgstr ""
+msgstr "Um ambiente Hatch para fazer o build do seu pacote"
#: ../../tutorials/develop-python-package-hatch.md:79
#, python-brace-format
@@ -1958,6 +2475,11 @@ msgid ""
"your package's {term}`Distribution files` ({term}`Source distribution "
"(sdist)` and {term}`Wheel (.whl)`)."
msgstr ""
+"Abaixo está uma definição de ambiente Hatch que você encontrará no "
+"arquivo [pyproject.toml](pyproject-toml) do seu novo projeto. Ela "
+"está configurada para fazer o build dos {term}`arquivos de "
+"distribuição` do seu pacote ({term}`distribuição fonte "
+"(sdist)` e {term}`Wheel (.whl)`)."
#: ../../tutorials/develop-python-package-hatch.md:84
#, python-brace-format
@@ -1967,10 +2489,14 @@ msgid ""
" declaration is similar to declaring dependencies for your package at the"
" top of your [pyproject.toml](pyproject-toml)."
msgstr ""
+"Observe que a definição do ambiente declara duas {term}`dependências "
+"`: `pip` e `twine`, que o ambiente precisa para executar "
+"com sucesso. Esta declaração é semelhante a declarar dependencies para o "
+"seu pacote no topo do seu [pyproject.toml](pyproject-toml)."
#: ../../tutorials/develop-python-package-hatch.md:99
msgid "Hatch will install your package in editable mode by default"
-msgstr ""
+msgstr "Hatch instalará seu pacote em modo editável por padrão"
#: ../../tutorials/develop-python-package-hatch.md:100
msgid ""
@@ -1979,10 +2505,14 @@ msgid ""
"environment it creates. `detached=True` tells it not to install your "
"package into the environment."
msgstr ""
+"Observe a flag `detached = True` na parte inferior do ambiente. "
+"Por padrão, o Hatch instalará seu pacote em modo editável em qualquer "
+"ambiente que criar. `detached=True` informa para não instalar seu pacote "
+"no ambiente."
#: ../../tutorials/develop-python-package-hatch.md:104
msgid "Hatch scripts"
-msgstr ""
+msgstr "Hatch scripts"
#: ../../tutorials/develop-python-package-hatch.md:106
#, python-brace-format
@@ -1990,6 +2520,8 @@ msgid ""
"Hatch supports defining {term}`Script (Hatch)` commands that run in "
"specific Hatch environments."
msgstr ""
+"Hatch suporta a definição de comandos {term}`Script (Hatch)` que executam "
+"em ambientes Hatch específicos."
#: ../../tutorials/develop-python-package-hatch.md:109
msgid ""
@@ -1997,54 +2529,68 @@ msgid ""
"create as a virtual environment (venv). Because `detached = True` in that"
" environment, Hatch won't install your package into it."
msgstr ""
+"Acima, você definiu um novo ambiente chamado 'build' que o Hatch criará "
+"como um ambiente virtual (venv). Como `detached = True` nesse "
+"ambiente, o Hatch não instalará seu pacote nele."
#: ../../tutorials/develop-python-package-hatch.md:111
msgid ""
"You can then use that environment to run \"scripts\". The definition "
"below tells Hatch to run the following scripts in the build environment."
msgstr ""
+"Você pode então usar esse ambiente para executar \"scripts\". A definição "
+"abaixo informa ao Hatch para executar os seguintes scripts no ambiente "
+"build."
#: ../../tutorials/develop-python-package-hatch.md:113
msgid "`[tool.hatch.envs.build.scripts]`"
-msgstr ""
+msgstr "`[tool.hatch.envs.build.scripts]`"
#: ../../tutorials/develop-python-package-hatch.md:115
msgid "You define this `scripts` to run using the following syntax, where:"
-msgstr ""
+msgstr "Você define este `scripts` para executar usando a seguinte sintaxe, onde:"
#: ../../tutorials/develop-python-package-hatch.md:117
msgid "`tool.hatch`: Alerts Hatch that this table is for Hatch to use"
-msgstr ""
+msgstr "`tool.hatch`: Alerta o Hatch de que esta tabela é para o Hatch usar"
#: ../../tutorials/develop-python-package-hatch.md:118
msgid "`envs.build`: Use the defined build environment."
-msgstr ""
+msgstr "`envs.build`: Use o ambiente build definido."
#: ../../tutorials/develop-python-package-hatch.md:119
msgid ""
"`scripts`: Define what scripts to run. In this case, Hatch will run shell"
" scripts."
msgstr ""
+"`scripts`: Defina quais scripts executar. Neste caso, o Hatch executará "
+"shell scripts."
#: ../../tutorials/develop-python-package-hatch.md:122
msgid ""
"Below is the `build.scripts` table that defines 3 shell commands to be "
"run:"
msgstr ""
+"Abaixo está a tabela `build.scripts` que define 3 comandos shell a serem "
+"executados:"
#: ../../tutorials/develop-python-package-hatch.md:124
msgid "`pip check` # verifies your dependencies"
-msgstr ""
+msgstr "`pip check` # verifica suas dependencies"
#: ../../tutorials/develop-python-package-hatch.md:125
msgid "`hatch build --clean` # build your packages distribution files."
msgstr ""
+"`hatch build --clean` # faz o build dos arquivos de distribuição do seu "
+"pacote."
#: ../../tutorials/develop-python-package-hatch.md:126
msgid ""
"`twine check dist/*` # use twine to check that your package's sdist "
"(source distribution) is ok."
msgstr ""
+"`twine check dist/*` # usa twine para verificar se o sdist (source "
+"distribution) do seu pacote está ok."
#: ../../tutorials/develop-python-package-hatch.md:140
msgid ""
@@ -2052,41 +2598,46 @@ msgid ""
"virtual environment (venv) that it creates. If `detached=True` is set, "
"then it will skip that step."
msgstr ""
+"Hatch, por padrão, instalará seu pacote em modo editável em qualquer "
+"ambiente virtual (venv) que criar. Se `detached=True` estiver definido, "
+"ele pulará essa etapa."
#: ../../tutorials/develop-python-package-hatch.md:143
msgid "Running the build script"
-msgstr ""
+msgstr "Executando o build script"
#: ../../tutorials/develop-python-package-hatch.md:145
msgid "You can run the build script and build your package like this:"
-msgstr ""
+msgstr "Você pode executar o build script e fazer o build do seu pacote assim:"
#: ../../tutorials/develop-python-package-hatch.md:147
msgid "`hatch run build:check`"
-msgstr ""
+msgstr "`hatch run build:check`"
#: ../../tutorials/develop-python-package-hatch.md:149
msgid ""
"This step updates the build environment and then builds and checks the "
"output distributions of your package."
msgstr ""
+"Esta etapa atualiza o ambiente build e então faz o build e verifica as "
+"distribuições de saída do seu pacote."
#: ../../tutorials/develop-python-package-hatch.md:151
msgid "You can enter the build environment in your shell to check it out:"
-msgstr ""
+msgstr "Você pode entrar no ambiente build no seu shell para conferir:"
#: ../../tutorials/develop-python-package-hatch.md:157
msgid "If you run `pip list` in the environment, twine will be there:"
-msgstr ""
+msgstr "Se executar `pip list` no ambiente, o twine estará lá:"
#: ../../tutorials/develop-python-package-hatch.md:163
#: ../../tutorials/develop-python-package-hatch.md:221
msgid "To leave the environment use:"
-msgstr ""
+msgstr "Para sair do ambiente, use:"
#: ../../tutorials/develop-python-package-hatch.md:169
msgid "Hatch, testing, and matrix environments"
-msgstr ""
+msgstr "Hatch, testes, e ambientes matriz"
#: ../../tutorials/develop-python-package-hatch.md:171
msgid ""
@@ -2094,10 +2645,13 @@ msgid ""
"expect your users to be using. In this section, you'll explore the test "
"environment setup in the pyOpenSci template package."
msgstr ""
+"É sempre útil executar seus testes nas versões do Python que você espera "
+"que seus usuários estejam usando. Nesta seção, você explorará a configuração "
+"do ambiente de teste no pacote template da pyOpenSci."
#: ../../tutorials/develop-python-package-hatch.md:173
msgid "Below, you see the Hatch environment test table."
-msgstr ""
+msgstr "Abaixo, você vê a tabela do ambiente Hatch test."
#: ../../tutorials/develop-python-package-hatch.md:175
msgid ""
@@ -2105,10 +2659,13 @@ msgid ""
" dependencies that Hatch needs to install into the test environment "
"(required to run your tests)."
msgstr ""
+"Semelhante ao ambiente build acima, o ambiente abaixo define as "
+"dependencies que o Hatch precisa instalar no ambiente de teste "
+"(necessárias para executar seus testes)."
#: ../../tutorials/develop-python-package-hatch.md:189
msgid "Your test environment has a matrix associated with it"
-msgstr ""
+msgstr "Seu ambiente de teste tem uma matriz associada a ele"
#: ../../tutorials/develop-python-package-hatch.md:191
msgid ""
@@ -2116,6 +2673,9 @@ msgid ""
"run the tests across different Python versions. Below, you are running "
"tests on versions 3.10 through 3.13."
msgstr ""
+"Se o ambiente tiver uma matriz associada, isso informa ao Hatch para "
+"executar os testes em diferentes versões do Python. Abaixo, você está "
+"executando testes nas versões 3.10 a 3.13."
#: ../../tutorials/develop-python-package-hatch.md:194
msgid ""
@@ -2124,6 +2684,9 @@ msgid ""
"install Hatch and also when you declare a matrix environment like the one"
" below"
msgstr ""
+"Hatch, por padrão, instalará Python [usando "
+"UV](https://docs.astral.sh/uv/guides/install-python/) tanto quando você "
+"instala o Hatch quanto quando declara um ambiente matriz como o abaixo"
#: ../../tutorials/develop-python-package-hatch.md:202
msgid ""
@@ -2132,16 +2695,21 @@ msgid ""
"choose from, you need to select the environment with the Python version "
"you want to use."
msgstr ""
+"No seu projeto, se executar `hatch shell test`, verá a saída abaixo. Isso "
+"significa que, como há uma matriz de versões do Python para escolher, você "
+"precisa selecionar o ambiente com a versão do Python que deseja usar."
#: ../../tutorials/develop-python-package-hatch.md:215
msgid ""
"Pick the Python test environment that you want to use and enter it, like "
"this (this will open Python 3.13):"
msgstr ""
+"Escolha o ambiente de teste Python que deseja usar e entre nele, assim "
+"(isso abrirá o Python 3.13):"
#: ../../tutorials/develop-python-package-hatch.md:227
msgid "Hatch scripts for tests"
-msgstr ""
+msgstr "Hatch scripts para testes"
#: ../../tutorials/develop-python-package-hatch.md:229
msgid ""
@@ -2149,36 +2717,44 @@ msgid ""
" section. Similar to what you saw above with the build steps, this is "
"where the \"script\" to run your tests is defined."
msgstr ""
+"Na mesma seção de testes, você verá uma seção "
+"`tool.hatch.envs.test.scripts`. Semelhante ao que você viu acima com as "
+"etapas de build, é aqui que o \"script\" para executar seus testes é definido."
#: ../../tutorials/develop-python-package-hatch.md:232
msgid ""
"Notice that below, the script has a script called `run`. And that script "
"runs pytest with a set of arguments, including generating code coverage."
msgstr ""
+"Observe que abaixo o script tem um script chamado `run`. E esse "
+"scriptexecuta pytest com um conjunto de argumentos, incluindo geração de "
+"code coverage."
#: ../../tutorials/develop-python-package-hatch.md:239
msgid "To run this script in your terminal, use the syntax:"
-msgstr ""
+msgstr "Para executar este script no seu terminal, use a sintaxe:"
#: ../../tutorials/develop-python-package-hatch.md:241
msgid "`hatch run test:run`"
-msgstr ""
+msgstr "`hatch run test:run`"
#: ../../tutorials/develop-python-package-hatch.md:243
msgid "Reminder"
-msgstr ""
+msgstr "Lembrete"
#: ../../tutorials/develop-python-package-hatch.md:246
msgid ""
"`hatch run`: this calls hatch and tells it that it will be running a "
"command"
-msgstr ""
+msgstr "`hatch run`: isso chama o Hatch e informa que ele executará um comando"
#: ../../tutorials/develop-python-package-hatch.md:247
msgid ""
"`test:run` defines the environment you want it to run (`test`) in this "
"case, and the script is defined as `run`"
msgstr ""
+"`test:run` define o ambiente em que você quer que execute (`test`) neste "
+"caso, e o script é definido como `run`"
#: ../../tutorials/develop-python-package-hatch.md:250
msgid ""
@@ -2188,42 +2764,51 @@ msgid ""
" the environment, your tests will be run four times, once in each Python "
"version listed in the matrix table."
msgstr ""
+"Se você tiver uma matriz configurada para testes, ela instalará a versão "
+"necessária do Python usando UV e executará seus testes em cada versão do "
+"ambiente Python. Neste caso, como há quatro versões do Python no "
+"ambiente, seus testes serão executados quatro vezes, uma em cada versão "
+"do Python listada na tabela matrix."
#: ../../tutorials/develop-python-package-hatch.md:280
msgid "Build your documentation with Hatch environments"
-msgstr ""
+msgstr "Construa sua documentação com um ambiente Hatch"
#: ../../tutorials/develop-python-package-hatch.md:282
msgid ""
"Finally, you can build and serve your documentation using hatch. To build"
" a static HTML version of the docs run:"
msgstr ""
+"Por fim, você pode fazer o build e servir sua documentação usando o Hatch. "
+"Para gerar uma versão HTML estática da documentação, execute:"
#: ../../tutorials/develop-python-package-hatch.md:285
msgid "`hatch run docs:build`"
-msgstr ""
+msgstr "`hatch run docs:build`"
#: ../../tutorials/develop-python-package-hatch.md:287
msgid ""
"To run a local server with your docs updated as you update your markdown "
"files, run:"
msgstr ""
+"Para executar um servidor local com a documentação atualizada conforme você "
+"modifica seus arquivos markdown, execute:"
#: ../../tutorials/develop-python-package-hatch.md:289
msgid "`hatch run docs:serve`"
-msgstr ""
+msgstr "`hatch run docs:serve`"
#: ../../tutorials/develop-python-package-hatch.md:291
msgid "To stop serving the docs use:"
-msgstr ""
+msgstr "Para parar de servir a documentação, use:"
#: ../../tutorials/develop-python-package-hatch.md:293
msgid "mac: ctrl + c windows:"
-msgstr ""
+msgstr "mac: ctrl + c windows:"
#: ../../tutorials/get-to-know-hatch.md:6
msgid "Get to Know Hatch"
-msgstr ""
+msgstr "Conheça o Hatch"
#: ../../tutorials/get-to-know-hatch.md:8
msgid ""
@@ -2231,6 +2816,10 @@ msgid ""
"packaging tools](/package-structure-code/python-package-build-tools) out "
"there, we have selected Hatch because:"
msgstr ""
+"Nossos tutoriais de empacotamento Python usam o Hatch. Embora existam "
+"[muitas ferramentas excelentes de "
+"empacotamento](/package-structure-code/python-package-build-tools), "
+"escolhemos o Hatch porque:"
#: ../../tutorials/get-to-know-hatch.md:13
msgid ""
@@ -2238,6 +2827,9 @@ msgid ""
"create a quality Python package. Beginners will have fewer tools to learn"
" if they use Hatch."
msgstr ""
+"É uma ferramenta ponta a ponta que suporta a maioria das etapas necessárias "
+"para criar um pacote Python de qualidade. Iniciantes terão menos ferramentas "
+"para aprender se usarem o Hatch."
#: ../../tutorials/get-to-know-hatch.md:16
#, python-brace-format
@@ -2245,56 +2837,66 @@ msgid ""
"It supports different {term}`Build backend` options if you ever need to "
"compile code in other languages."
msgstr ""
+"Ele suporta diferentes opções de {term}`backend de construção ` caso você precise compilar código em outras linguagens."
#: ../../tutorials/get-to-know-hatch.md:18
msgid ""
"As a community, pyOpenSci has decided that Hatch is a user-friendly tool "
"that supports many different scientific Python use cases."
msgstr ""
+"Como comunidade, a pyOpenSci decidiu que o Hatch é uma ferramenta amigável "
+"que suporta muitos casos de uso diferentes do Python científico."
#: ../../tutorials/get-to-know-hatch.md:21
msgid ""
"In this tutorial, you will install and get to know Hatch a bit more "
"before starting to use it."
msgstr ""
+"Neste tutorial, você instalará e conhecerá um pouco mais o Hatch antes de "
+"começar a usá-lo."
#: ../../tutorials/get-to-know-hatch.md:24
msgid "You need two things to successfully complete this tutorial:"
-msgstr ""
+msgstr "Você precisa de duas coisas para concluir este tutorial com sucesso:"
#: ../../tutorials/get-to-know-hatch.md:26
msgid "You need Python installed."
-msgstr ""
+msgstr "Você precisa ter o Python instalado."
#: ../../tutorials/get-to-know-hatch.md:27
msgid "You need Hatch installed."
-msgstr ""
+msgstr "Você precisa ter o Hatch instalado."
#: ../../tutorials/get-to-know-hatch.md:30
msgid ""
"If you don't already have Python installed on your computer, Hatch will "
"do it for you when you install Hatch."
msgstr ""
+"Se você ainda não tiver o Python instalado no seu computador, o Hatch fará "
+"isso por você quando você instalar o Hatch."
#: ../../tutorials/get-to-know-hatch.md:34
msgid "Install Hatch"
-msgstr ""
+msgstr "Instalar o Hatch"
#: ../../tutorials/get-to-know-hatch.md:36
msgid ""
"To begin, follow the operating-system-specific instructions below to "
"install Hatch."
msgstr ""
+"Para começar, siga as instruções específicas do seu sistema operacional "
+"abaixo para instalar o Hatch."
#: ../../tutorials/get-to-know-hatch.md
msgid "MAC"
-msgstr ""
+msgstr "MAC"
#: ../../tutorials/get-to-know-hatch.md:43
msgid ""
"Follow the instructions "
"[here](https://hatch.pypa.io/latest/install/#installers)."
-msgstr ""
+msgstr "Siga as instruções [aqui](https://hatch.pypa.io/latest/install/#installers)."
#: ../../tutorials/get-to-know-hatch.md:45
msgid ""
@@ -2302,32 +2904,38 @@ msgid ""
"universal.pkg](https://github.com/pypa/hatch/releases/latest/download"
"/hatch-universal.pkg)."
msgstr ""
+"Baixe o instalador GUI mais recente para MAC "
+"[hatch-universal.pkg](https://github.com/pypa/hatch/releases/latest/download"
+"/hatch-universal.pkg)."
#: ../../tutorials/get-to-know-hatch.md:46
msgid "Run the installer and follow the setup instructions."
-msgstr ""
+msgstr "Execute o instalador e siga as instruções de instalação."
#: ../../tutorials/get-to-know-hatch.md:47
msgid "If your terminal is open, then restart it."
-msgstr ""
+msgstr "Se o seu terminal estiver aberto, reinicie-o."
#: ../../tutorials/get-to-know-hatch.md
msgid "Windows"
-msgstr ""
+msgstr "Windows"
#: ../../tutorials/get-to-know-hatch.md:53
msgid ""
"In your browser, download the correct `.msi` file for your system: "
"[hatch-x64.msi](https://github.com/pypa/hatch/releases/latest/download/hatch-x64.msi)"
msgstr ""
+"No seu navegador, baixe o arquivo `.msi` correto para o seu sistema: "
+"[hatch-x64.msi](https://github.com/pypa/hatch/releases/latest/download/hatch"
+"-x64.msi)"
#: ../../tutorials/get-to-know-hatch.md:55
msgid "Run your downloaded installer file and follow the on-screen instructions."
-msgstr ""
+msgstr "Execute o arquivo instalador baixado e siga as instruções na tela."
#: ../../tutorials/get-to-know-hatch.md
msgid "Linux"
-msgstr ""
+msgstr "Linux"
#: ../../tutorials/get-to-know-hatch.md:61
msgid ""
@@ -2335,6 +2943,9 @@ msgid ""
"prefer another method, check out the [Hatch installation "
"documentation](https://hatch.pypa.io/latest/install/) for other methods."
msgstr ""
+"Sugerimos que você instale o Hatch usando pipx no Linux. No entanto, se "
+"preferir outro método, consulte a [documentação de instalação do "
+"Hatch](https://hatch.pypa.io/latest/install/) para outras opções."
#: ../../tutorials/get-to-know-hatch.md:75
#, python-brace-format
@@ -2344,12 +2955,18 @@ msgid ""
" follow the instructions above because we have found that the Hatch "
"installers for Windows and Mac are the easiest and most efficient."
msgstr ""
+"O Hatch também pode ser instalado diretamente usando {term}`pip` ou "
+"[conda](https://hatch.pypa.io/latest/install/#conda). Recomendamos que você "
+"siga as instruções acima, pois descobrimos que os instaladores do Hatch para "
+"Windows e Mac são os mais fáceis e eficientes."
#: ../../tutorials/get-to-know-hatch.md:80
msgid ""
"Our Linux users have found success installing Hatch with pipx if they "
"already use apt install."
msgstr ""
+"Nossos usuários Linux tiveram sucesso instalando o Hatch com pipx se já "
+"usam apt install."
#: ../../tutorials/get-to-know-hatch.md:83
msgid ""
@@ -2358,10 +2975,14 @@ msgid ""
"that Hatch is available across all of your Python environments on your "
"computer."
msgstr ""
+"Ambas as abordagens (usar um instalador gráfico no Windows/Mac e "
+"pipx) garantem que você tenha o Hatch instalado globalmente. Uma instalação "
+"global significa que o Hatch fica disponível em todos os seus ambientes "
+"Python no computador."
#: ../../tutorials/get-to-know-hatch.md:88
msgid "Check that hatch installed correctly"
-msgstr ""
+msgstr "Verifique se o Hatch foi instalado corretamente"
#: ../../tutorials/get-to-know-hatch.md:90
msgid ""
@@ -2369,16 +2990,20 @@ msgid ""
" your terminal, and make sure that Hatch installed correctly using the "
"command below:"
msgstr ""
+"Depois de concluir as instruções de instalação acima, abra o terminal e "
+"verifique se o Hatch foi instalado corretamente usando o comando abaixo:"
#: ../../tutorials/get-to-know-hatch.md:98
msgid ""
"*Note the version number output of `hatch --version` will likely be "
"different from the output above in this tutorial.*"
msgstr ""
+"*Observe que o número de versão exibido por `hatch --version` provavelmente "
+"será diferente do mostrado acima neste tutorial.*"
#: ../../tutorials/get-to-know-hatch.md:101
msgid "Configure Hatch"
-msgstr ""
+msgstr "Configurar o Hatch"
#: ../../tutorials/get-to-know-hatch.md:103
msgid ""
@@ -2386,12 +3011,17 @@ msgid ""
"includes setting the default name and setup for every package you create."
" While this step is not required, we suggest that you do it."
msgstr ""
+"Depois de instalar o Hatch, você pode personalizar sua configuração. Isso "
+"inclui definir o nome padrão e a configuração de cada pacote que você criar. "
+"Embora esta etapa não seja obrigatória, recomendamos que você a faça."
#: ../../tutorials/get-to-know-hatch.md:107
msgid ""
"Hatch stores your configuration in a [`config.toml` "
"file](https://hatch.pypa.io/latest/config/project-templates/)."
msgstr ""
+"O Hatch armazena sua configuração em um [arquivo "
+"`config.toml`](https://hatch.pypa.io/latest/config/project-templates/)."
#: ../../tutorials/get-to-know-hatch.md:109
msgid ""
@@ -2399,36 +3029,45 @@ msgid ""
"might be easier to look at and update it in a text editor if you are "
"using it for the first time."
msgstr ""
+"Embora você possa atualizar o arquivo `config.toml` pela linha de comando, "
+"pode ser mais fácil visualizá-lo e editá-lo em um editor de texto se for a "
+"primeira vez que o usa."
#: ../../tutorials/get-to-know-hatch.md:113
msgid "Step 1: Open and Edit Your `config.toml` File"
-msgstr ""
+msgstr "Etapa 1: Abrir e editar seu arquivo `config.toml`"
#: ../../tutorials/get-to-know-hatch.md:115
msgid ""
"To open the config file in your file browser, run the following command "
"in your shell:"
msgstr ""
+"Para abrir o arquivo de configuração no explorador de arquivos, execute o "
+"seguinte comando no shell:"
#: ../../tutorials/get-to-know-hatch.md:118
msgid "`hatch config explore`"
-msgstr ""
+msgstr "`hatch config explore`"
#: ../../tutorials/get-to-know-hatch.md:120
msgid ""
"This will open up a directory window that allows you to double-click on "
"the file and open it in your favorite text editor."
msgstr ""
+"Isso abrirá uma janela de diretório que permite clicar duas vezes no "
+"arquivo e abri-lo no seu editor de texto favorito."
#: ../../tutorials/get-to-know-hatch.md:123
msgid ""
"You can also retrieve the location of the Hatch config file by running "
"the following command in your shell:"
msgstr ""
+"Você também pode obter a localização do arquivo de configuração do Hatch "
+"executando o seguinte comando no shell:"
#: ../../tutorials/get-to-know-hatch.md:131
msgid "Step 2 - update your email and name"
-msgstr ""
+msgstr "Etapa 2 - atualize seu e-mail e nome"
#: ../../tutorials/get-to-know-hatch.md:133
msgid ""
@@ -2437,14 +3076,17 @@ msgid ""
"[pyproject.toml](pyproject-toml) metadata files that you create using "
"Hatch."
msgstr ""
+"Com o arquivo aberto, atualize a tabela [template] do arquivo `config.toml` "
+"com seu nome e e-mail. Essas informações serão usadas em quaisquer arquivos "
+"de metadata [pyproject.toml](pyproject-toml) que você criar usando o Hatch."
#: ../../tutorials/get-to-know-hatch.md:144
msgid "Step 3"
-msgstr ""
+msgstr "Etapa 3"
#: ../../tutorials/get-to-know-hatch.md:146
msgid "Next, set tests to false in the `[template.plugins.default]` table."
-msgstr ""
+msgstr "Em seguida, defina `tests` como `false` na tabela `[template.plugins.default]`."
#: ../../tutorials/get-to-know-hatch.md:148
msgid ""
@@ -2453,10 +3095,14 @@ msgid ""
"to use this feature in this beginner friendly tutorial series but we will"
" introduce it in later tutorials."
msgstr ""
+"Embora testes sejam importantes, definir a configuração de `tests` no Hatch "
+"como `true` criará um arquivo `pyproject.toml` mais complexo. Você não "
+"precisará usar esse recurso nesta série de tutoriais para iniciantes, mas o "
+"apresentaremos em tutoriais posteriores."
#: ../../tutorials/get-to-know-hatch.md:153
msgid "Your `config.toml` file should look something like the one below."
-msgstr ""
+msgstr "Seu arquivo `config.toml` deve ficar parecido com o exemplo abaixo."
#: ../../tutorials/get-to-know-hatch.md:191
msgid ""
@@ -2466,30 +3112,37 @@ msgid ""
"[choosealicense.com](https://choosealicense.com/) and as such we will use"
" it for this tutorial series."
msgstr ""
+"Observe também que a opção de `license` padrão é MIT. Embora abordemos "
+"`license` com mais detalhes em uma lição posterior, a `license` MIT é a "
+"`permissive license` recomendada por "
+"[choosealicense.com](https://choosealicense.com/) e, por isso, a usaremos "
+"nesta série de tutoriais."
#: ../../tutorials/get-to-know-hatch.md:197
msgid "You are of course welcome to select another license."
-msgstr ""
+msgstr "Você pode, claro, escolher outra `license`."
#: ../../tutorials/get-to-know-hatch.md:200
msgid ""
"I think we'd need the SPDX license options here if they want to chose "
"bsd-3 for instance"
msgstr ""
+"Acho que precisaríamos das opções de `license` SPDX aqui se quisessem "
+"escolher bsd-3, por exemplo"
#: ../../tutorials/get-to-know-hatch.md:203
msgid "Step 4: Close the config file and run `hatch config show`"
-msgstr ""
+msgstr "Etapa 4: Feche o arquivo de configuração e execute `hatch config show`"
#: ../../tutorials/get-to-know-hatch.md:205
msgid ""
"Once you have completed the steps above run the following command in your"
" shell."
-msgstr ""
+msgstr "Depois de concluir as etapas acima, execute o seguinte comando no shell."
#: ../../tutorials/get-to-know-hatch.md:207
msgid "`hatch config show`"
-msgstr ""
+msgstr "`hatch config show`"
#: ../../tutorials/get-to-know-hatch.md:209
msgid ""
@@ -2497,20 +3150,25 @@ msgid ""
"file in your shell. Look at the values and ensure that your name, email "
"is set. Also make sure that `tests=false`."
msgstr ""
+"`hatch config show` exibirá o conteúdo do seu arquivo `config.toml` "
+"no shell. Verifique os valores e confirme que seu nome e e-mail estão "
+"definidos. Certifique-se também de que `tests=false`."
#: ../../tutorials/get-to-know-hatch.md:213
msgid "Hatch features"
-msgstr ""
+msgstr "Recursos do Hatch"
#: ../../tutorials/get-to-know-hatch.md:215
msgid ""
"Hatch offers a suite of features that will make creating, publishing and "
"maintaining your Python package easier."
msgstr ""
+"O Hatch oferece um conjunto de recursos que facilitam a criação, publicação "
+"e manutenção do seu pacote Python."
#: ../../tutorials/get-to-know-hatch.md:218
msgid "Comparison to other tools"
-msgstr ""
+msgstr "Comparação com outras ferramentas"
#: ../../tutorials/get-to-know-hatch.md:220
msgid ""
@@ -2518,14 +3176,17 @@ msgid ""
" ecosystem including flit, pdm and poetry. Learn more here](package-"
"features)"
msgstr ""
+"[Comparamos o Hatch a várias outras ferramentas populares de empacotamento "
+"do ecossistema, incluindo flit, pdm e poetry. Saiba "
+"mais aqui](package-features)"
#: ../../tutorials/get-to-know-hatch.md:223
msgid "[More on Hatch here](hatch)"
-msgstr ""
+msgstr "[Mais sobre o Hatch aqui](hatch)"
#: ../../tutorials/get-to-know-hatch.md:225
msgid "A few features that Hatch offers"
-msgstr ""
+msgstr "Alguns recursos que o Hatch oferece"
#: ../../tutorials/get-to-know-hatch.md:227
msgid ""
@@ -2533,102 +3194,109 @@ msgid ""
"pyproject.toml file for you (see [Migrating setup.py to pyproject.toml "
"using Hatch](setup-py-to-pyproject-toml.md ))"
msgstr ""
+"Ele converterá metadata armazenada em um arquivo `setup.py` ou `setup.cfg` "
+"para um arquivo pyproject.toml para você (consulte [Migrating setup.py to "
+"pyproject.toml using Hatch](setup-py-to-pyproject-toml.md ))"
#: ../../tutorials/get-to-know-hatch.md:229
msgid ""
"It will help you by storing configuration information for publishing to "
"PyPI after you've entered it once."
msgstr ""
+"Ele ajudará armazenando informações de configuração para publicação no PyPI "
+"depois que você as informar uma vez."
#: ../../tutorials/get-to-know-hatch.md:231
msgid "Use `hatch -h` to see all of the available commands."
-msgstr ""
+msgstr "Use `hatch -h` para ver todos os comandos disponíveis."
#: ../../tutorials/get-to-know-hatch.md:233
msgid "What's next"
-msgstr ""
+msgstr "Próximos passos"
#: ../../tutorials/get-to-know-hatch.md:235
msgid ""
"In the next lesson you'll learn how to package and make your code "
"installable using Hatch."
msgstr ""
+"Na próxima lição você aprenderá como empacotar e tornar seu código "
+"instalável usando o Hatch."
#: ../../tutorials/intro.md:34 ../../tutorials/setup-py-to-pyproject-toml.md:36
msgid "Get to know Hatch"
-msgstr ""
+msgstr "Conheça o Hatch"
#: ../../tutorials/intro.md:34 ../../tutorials/run-python-scripts-hatch.md:8
msgid "Run standalone Python scripts with Hatch"
-msgstr ""
+msgstr "Execute scripts Python independentes com o Hatch"
#: ../../tutorials/intro.md:34
msgid "Python Packaging Tutorial Setup"
-msgstr ""
+msgstr "Configuração do tutorial de empacotamento Python"
#: ../../tutorials/intro.md:42 ../../tutorials/intro.md:89
msgid "What is a Python package?"
-msgstr ""
+msgstr "O que é um pacote Python?"
#: ../../tutorials/intro.md:42
msgid "Create a Python package"
-msgstr ""
+msgstr "Crie um pacote Python"
#: ../../tutorials/intro.md:42
msgid "Publish to PyPI"
-msgstr ""
+msgstr "Publique no PyPI"
#: ../../tutorials/intro.md:42
msgid "Publish to conda-forge"
-msgstr ""
+msgstr "Publicar no conda-forge"
#: ../../tutorials/intro.md:42
msgid "Publish using GitHub Actions and Trusted Publishing"
-msgstr ""
+msgstr "Publicar usando GitHub Actions e Trusted Publishing"
#: ../../tutorials/intro.md:42
msgid "Create and publish a Python Package"
-msgstr ""
+msgstr "Criar e publicar um pacote Python"
#: ../../tutorials/intro.md:53
msgid "Develop package (Hatch environments)"
-msgstr ""
+msgstr "Desenvolver pacote (ambientes Hatch)"
#: ../../tutorials/intro.md:53
msgid "Add README file"
-msgstr ""
+msgstr "Adicionar arquivo README"
#: ../../tutorials/intro.md:53
msgid "Add a license & code of conduct"
-msgstr ""
+msgstr "Adicionar uma license e code of conduct"
#: ../../tutorials/intro.md:53
msgid "Update metadata in pyproject.toml"
-msgstr ""
+msgstr "Atualizar metadata no pyproject.toml"
#: ../../tutorials/intro.md:53
msgid "Project information files & metadata"
-msgstr ""
+msgstr "Arquivos de informação do projeto e metadata"
#: ../../tutorials/intro.md:63
msgid "Reference Guides"
-msgstr ""
+msgstr "Guias de referência"
#: ../../tutorials/intro.md:70
msgid "Migrate setup.py to a pyproject.toml using Hatch"
-msgstr ""
+msgstr "Migrar setup.py para pyproject.toml usando o Hatch"
#: ../../tutorials/intro.md:70
msgid "Hatch for Existing Packages"
-msgstr ""
+msgstr "Hatch para pacotes existentes"
#: ../../tutorials/intro.md:7
msgid "Python packaging 101"
-msgstr ""
+msgstr "Python Packaging 101"
#: ../../tutorials/intro.md:9
msgid "_A start to finish beginner-friendly tutorial_"
-msgstr ""
+msgstr "_Um tutorial para iniciantes, do começo ao fim_"
#: ../../tutorials/intro.md:11
#, python-brace-format
@@ -2637,6 +3305,9 @@ msgid ""
" the upcoming pages walk you through the core steps needed to create a "
"{term}`Python package`."
msgstr ""
+"Boas-vindas à série de tutoriais de empacotamento Python da pyOpenSci. As "
+"lições nas próximas páginas vão orientar pelos passos essenciais para criar "
+"um {term}`pacote Python `."
#: ../../tutorials/intro.md:17
msgid ""
@@ -2645,16 +3316,22 @@ msgid ""
"package to PyPI, add a README and LICENSE file, add metadata for PyPI and"
" finally publish to conda forge."
msgstr ""
+"Diagrama mostrando as lições do nosso tutorial de empacotamento. São 6 ao "
+"todo: o que é um pacote Python, tornar o código instalável com pip, publicar "
+"seu pacote no PyPI, adicionar arquivos README e LICENSE, adicionar metadata "
+"para o PyPI e, por fim, publicar no conda-forge."
#: ../../tutorials/intro.md:19 ../../tutorials/trusted-publishing.md:258
msgid ""
"This lesson is the first in a series of lessons to help you get started "
"with Python packaging."
msgstr ""
+"Esta lição é a primeira de uma série de lições para ajudar você a começar "
+"com o empacotamento em Python."
#: ../../tutorials/intro.md:22
msgid "Who are these tutorials for?"
-msgstr ""
+msgstr "Para quem são estes tutoriais?"
#: ../../tutorials/intro.md:24
msgid ""
@@ -2663,51 +3340,65 @@ msgid ""
"still be valuable if you are interested in better understanding the steps"
" involved in creating a Python package."
msgstr ""
+"O conteúdo desta série de tutoriais é adequado para iniciantes e parte do "
+"pressuposto de que você ainda não criou um pacote Python. No entanto, o "
+"conteúdo ainda será útil se você estiver interessado(a) em entender melhor "
+"as etapas envolvidas na criação de um pacote Python."
#: ../../tutorials/intro.md:29
msgid ""
"In this series you will learn about the core elements that you need to "
"publish your package to [PyPI](publish-pypi)."
msgstr ""
+"Nesta série, você aprenderá sobre os elementos essenciais de que precisa "
+"para publicar seu pacote no [PyPI](publish-pypi)."
#: ../../tutorials/intro.md:32
msgid ""
"In the second series, you will learn about infrastructure and "
"documentation needed to support package maintenance."
msgstr ""
+"Na segunda série, você aprenderá sobre a infraestrutura e a documentação "
+"necessárias para dar suporte à manutenção do pacote."
#: ../../tutorials/intro.md:77 ../../tutorials/publish-conda-forge.md:22
#: ../../tutorials/publish-pypi.md:20 ../../tutorials/pyproject-toml.md:27
#: ../../tutorials/setup-py-to-pyproject-toml.md:20
#: ../../tutorials/trusted-publishing.md:13
msgid "Learning Objectives"
-msgstr ""
+msgstr "Objetivos de Aprendizagem"
#: ../../tutorials/intro.md:79
msgid ""
"This lesson introduces you to the basic components of a Python package. "
"After reading this lesson you will:"
msgstr ""
+"Esta lição apresenta os componentes básicos de um pacote Python. Depois de "
+"ler esta lição, você será capaz de:"
#: ../../tutorials/intro.md:82
msgid "Understand what a Python package is"
-msgstr ""
+msgstr "Entender o que é um pacote Python"
#: ../../tutorials/intro.md:83
msgid "Be able to list the 5 core components of a Python package"
-msgstr ""
+msgstr "Ser capaz de listar os 5 componentes centrais de um pacote Python"
#: ../../tutorials/intro.md:84
msgid ""
"Be able to explain the difference between generalizable code and code "
"that supports a specific scientific application"
msgstr ""
+"Ser capaz de explicar a diferença entre código generalizável e código que "
+"dá suporte a uma aplicação científica específica"
#: ../../tutorials/intro.md:91
msgid ""
"At a high level, you can think about a Python package as a toolbox that "
"you can use to perform various tasks."
msgstr ""
+"Em um nível geral, você pode pensar em um pacote Python como uma caixa de "
+"ferramentas que pode ser usada para realizar diversas tarefas."
#: ../../tutorials/intro.md:94
#, python-brace-format
@@ -2719,22 +3410,33 @@ msgid ""
"Python code. Each module contains functions and classes, that you can "
"think about as the tools in your toolbox."
msgstr ""
+"Um pacote Python é basicamente um diretório com uma estrutura de arquivos "
+"específica. Dentro da estrutura de diretórios do pacote, há objetos "
+"{term}`módulo `, que são arquivos que terminam em `.py` (a mesma "
+"extensão que você vê em um script Python). Esses módulos permitem agrupar e "
+"organizar o seu código Python. Cada módulo contém funções e classes, que "
+"você pode imaginar como as ferramentas dentro da sua caixa de ferramentas."
#: ../../tutorials/intro.md:103
msgid ""
"Diagram showing a sketch of a toolbox filled with different tools "
"including a hammer and a saw."
msgstr ""
+"Diagrama mostrando um esboço de uma caixa de ferramentas cheia de "
+"diferentes ferramentas, incluindo um martelo e um serrote."
#: ../../tutorials/intro.md:105
msgid ""
"You can think about a package as a toolbox filled with coding tools. A "
"tool may be a function or a class. Each tool does a specific thing well."
msgstr ""
+"Você pode pensar em um pacote como uma caixa de ferramentas cheia de "
+"ferramentas de código. Cada ferramenta pode ser uma função ou uma classe. "
+"Cada ferramenta faz bem uma coisa específica."
#: ../../tutorials/intro.md:110
msgid "Python packages are installable"
-msgstr ""
+msgstr "Pacotes Python são instaláveis"
#: ../../tutorials/intro.md:112
msgid ""
@@ -2743,6 +3445,10 @@ msgid ""
"functionality like you would import core scientific Python packages such "
"as NumPy or Matplotlib."
msgstr ""
+"Um pacote é instalável, o que significa que você pode adicionar a "
+"funcionalidade do código do pacote a qualquer ambiente Python e importar "
+"essa funcionalidade como faria com pacotes científicos centrais do Python, "
+"como NumPy ou Matplotlib."
#: ../../tutorials/intro.md:121
msgid ""
@@ -2751,14 +3457,18 @@ msgid ""
"package is the first step you need to take so you can share the tools in "
"the toolbox you've created and let others build with it."
msgstr ""
+"Instalar um pacote em um ambiente facilita gerenciar e reutilizar seu código "
+"em projetos diferentes. Estruturar seu código como um pacote é o primeiro "
+"passo que você precisa dar para compartilhar as ferramentas da caixa de "
+"ferramentas que criou e permitir que outras pessoas construam com elas."
#: ../../tutorials/intro.md:126
msgid "Why create a Python package?"
-msgstr ""
+msgstr "Por que criar um pacote Python?"
#: ../../tutorials/intro.md:128
msgid "You might create a Python package because you want to:"
-msgstr ""
+msgstr "Você pode criar um pacote Python porque deseja:"
#: ../../tutorials/intro.md:130
msgid ""
@@ -2767,6 +3477,10 @@ msgid ""
"environment. This allows you to then import functions and classes into "
"any workflows both locally and in the cloud."
msgstr ""
+"**Usar seu código em projetos diferentes:** No nível mais básico, criar um "
+"pacote permite instalar seu código em um ambiente Python. Isso permite "
+"importar funções e classes em quaisquer workflows, tanto localmente "
+"quanto na nuvem."
#: ../../tutorials/intro.md:131
#, python-brace-format
@@ -2775,6 +3489,9 @@ msgid ""
" as PyPI or conda-forge, your package can be installed on any machine "
"using {term}`pip` or conda with a single command."
msgstr ""
+"**Compartilhar seu código:** Se você publicar um pacote em um repositório "
+"público como PyPI ou conda-forge, seu pacote pode ser instalado em qualquer "
+"máquina usando {term}`pip` ou conda com um único comando."
#: ../../tutorials/intro.md:134
msgid ""
@@ -2786,6 +3503,13 @@ msgid ""
"users to contribute bug fixes and to establish review processes for "
"accepting changes to the code base."
msgstr ""
+"**Construir comunidade em torno do seu código:** pacotes facilitam "
+"que várias pessoas trabalhem no mesmo projeto (especialmente quando "
+"publicado no GitHub). Um sistema de controle de versão como git (o sistema "
+"usado pelo GitHub) também facilita acompanhar mudanças na base de código ao "
+"longo do tempo. Ferramentas como `issues` e `pull requests` facilitam que "
+"usuários externos contribuam com correções de bugs e estabeleçam processos "
+"de revisão para aceitar mudanças na base de código."
#: ../../tutorials/intro.md:135
msgid ""
@@ -2794,28 +3518,36 @@ msgid ""
"structure can help with both maintaining the codebase and with making it "
"easier to understand."
msgstr ""
+"**Organizar seu código:** pacotes podem ser usados para organizar grandes "
+"projetos de código, dividindo-os em componentes menores e mais gerenciáveis. "
+"Essa estrutura ajuda tanto na manutenção da base de código quanto na "
+"compreensão dela."
#: ../../tutorials/intro.md:137
msgid "What to consider before you create a package"
-msgstr ""
+msgstr "O que considerar antes de criar um pacote"
#: ../../tutorials/intro.md:139
msgid ""
"Creating a Python package that others use takes considerable time and "
"effort. Before you begin, think about your goals including:"
msgstr ""
+"Criar um pacote Python que outras pessoas usem exige tempo e esforço "
+"consideráveis. Antes de começar, pense nos seus objetivos, incluindo:"
#: ../../tutorials/intro.md:142
msgid "Who you think will use your package"
-msgstr ""
+msgstr "Quem você acha que usará seu pacote"
#: ../../tutorials/intro.md:143
msgid "How people might use your package and on what data (if data are relevant)"
msgstr ""
+"Como as pessoas podem usar seu pacote e com quais dados (se dados forem "
+"relevantes)"
#: ../../tutorials/intro.md:144
msgid "Whether you have time to add things such as documentation and tests"
-msgstr ""
+msgstr "Se você tem tempo para adicionar coisas como documentação e testes"
#: ../../tutorials/intro.md:145
msgid ""
@@ -2823,20 +3555,25 @@ msgid ""
"begin using your package they will depend on your maintainer team to "
"update it, fix bugs and answer questions."
msgstr ""
+"Por quanto tempo você poderá mantê-lo: lembre-se de que, quando as pessoas "
+"começarem a usar seu pacote, elas dependerão da sua equipe de mantenedores "
+"para atualizá-lo, corrigir bugs e responder perguntas."
#: ../../tutorials/intro.md:147
msgid ""
"Before creating a user-facing package, it's important to consider all of "
"the above."
msgstr ""
+"Antes de criar um pacote voltado para usuários, é importante considerar "
+"tudo acima."
#: ../../tutorials/intro.md:149
msgid "The elements of a Python package"
-msgstr ""
+msgstr "Os elementos de um pacote Python"
#: ../../tutorials/intro.md:153 ../../tutorials/intro.md:231
msgid "Diagram showing .. more here if this stays."
-msgstr ""
+msgstr "Diagrama mostrando .. mais aqui se isto permanecer."
#: ../../tutorials/intro.md:155
msgid ""
@@ -2845,16 +3582,22 @@ msgid ""
"making sure everything works and is up to date while fixing bugs and "
"addressing user concerns."
msgstr ""
+"Os elementos de um pacote Python incluem código, documentação, testes,uma "
+"`license` aprovada pela OSI e infraestrutura. Os mantenedores estão no centro, "
+"garantindo que tudo funcione e esteja atualizado, corrigindo bugs e "
+"atendendo preocupações dos usuários."
#: ../../tutorials/intro.md:161
msgid "The core elements of Python package include:"
-msgstr ""
+msgstr "Os elementos centrais de um pacote Python incluem:"
#: ../../tutorials/intro.md:163
msgid ""
"**Code:** Functions and classes that provide functionality for a user of "
"your package"
msgstr ""
+"**Code:** Funções e classes que fornecem funcionalidade para um usuário "
+"do seu pacote"
#: ../../tutorials/intro.md:164
msgid ""
@@ -2862,18 +3605,25 @@ msgid ""
"that both help users get started using your package and contributors and "
"maintainers fix bugs and maintain the package."
msgstr ""
+"**Documentation:** Instruções de instalação, tutoriais e exemplos que "
+"ajudam usuários a começar a usar seu pacote e contributors e mantenedores a "
+"corrigir bugs e manter o pacote."
#: ../../tutorials/intro.md:165
msgid ""
"Contributor Documentation in the form of a **CONTRIBUTING.md** file is "
"useful to help people to contribute to your package."
msgstr ""
+"Documentação para contributors na forma de um arquivo **CONTRIBUTING.md** é "
+"útil para ajudar pessoas a contribuir com seu pacote."
#: ../../tutorials/intro.md:166
msgid ""
"Development Documentation helps both maintainers and contributors "
"understand how to maintain a package's infrastructure."
msgstr ""
+"Documentação de desenvolvimento ajuda mantenedores e contribuidores a entender "
+"como manter a infraestrutura de um pacote."
#: ../../tutorials/intro.md:167
msgid ""
@@ -2881,6 +3631,9 @@ msgid ""
"easier for you and others to contribute to, modify and update the code in"
" the future"
msgstr ""
+"**Tests:** que garantem que seu código funciona como deveria e facilitam "
+"que você e outras pessoas contribuam, modifiquem e atualizemo código no "
+"futuro"
#: ../../tutorials/intro.md:168
msgid ""
@@ -2889,6 +3642,10 @@ msgid ""
"allows others to use your package. It also provides legal direction "
"regarding how elements of the package can and can't be reused."
msgstr ""
+"**License:** Uma open source `license`, ou `license` [aprovada pela "
+"OSI](https://opensource.org/license/), permite que outras pessoas usem seu "
+"pacote. Ela também fornece orientação legal sobre como os elementos do "
+"pacote podem ou não ser reutilizados."
#: ../../tutorials/intro.md:169
msgid ""
@@ -2898,10 +3655,15 @@ msgid ""
" and tox and continuous integration that automates package maintenance "
"steps."
msgstr ""
+"**Infrastructure** que automatiza atualizações, workflows de publicação e "
+"executa suites de testes. A infraestrutura inclui um conjunto de coisas, "
+"como plataformas como GitHub e GitLab, ferramentas para executar testes e "
+"ferramentas locais como nox e tox, e integração contínua que automatiza "
+"etapas de manutenção do pacote."
#: ../../tutorials/intro.md:171
msgid "What pyOpenSci looks for in a package"
-msgstr ""
+msgstr "O que a pyOpenSci busca em um pacote"
#: ../../tutorials/intro.md:174
msgid ""
@@ -2911,10 +3673,15 @@ msgid ""
"us for peer review. You may find these checks useful as you create your "
"package as a baseline for things that you package should have."
msgstr ""
+"A pyOpenSci realiza um [conjunto inicial de verificações do "
+"editor](https://www.pyopensci.org/software-peer-review/how-to/editor-in-chie"
+"f-guide.html#editor-checklist-template) para qualquer pacote enviado para "
+"revisão por pares. Você pode achar essas verificações úteis ao criar seu "
+"pacote como linha de base do que seu pacote deve ter."
#: ../../tutorials/intro.md:180
msgid "Packages are more than just code - Infrastructure"
-msgstr ""
+msgstr "Pacotes são mais do que apenas código - Infraestrutura"
#: ../../tutorials/intro.md:182
msgid ""
@@ -2923,10 +3690,14 @@ msgid ""
"only writing high quality code, but also the various elements of a "
"package that make it a useful community resource."
msgstr ""
+"Um pacote em qualquer linguagem é mais do que apenas código. Se você espera "
+"que outras pessoas usem seu pacote, além de você mesmo, considere não "
+"apenas escrever código de alta qualidade, mas também os diversos elementos "
+"de um pacote que o tornam um recurso útil para a comunidade."
#: ../../tutorials/intro.md:187
msgid "Version control and storing your package on GitHub or GitLab"
-msgstr ""
+msgstr "Controle de versão e armazenamento do seu pacote no GitHub ou GitLab"
#: ../../tutorials/intro.md:189
msgid ""
@@ -2937,6 +3708,12 @@ msgid ""
"also going back in history and undoing changes in the case that a change "
"to the code base unexpectedly breaks something."
msgstr ""
+"A maioria dos pacotes Python fica em uma plataforma online de controle de "
+"versão como GitHub ou GitLab. GitHub e GitLab executam "
+"[git](https://git-scm.com/) para controle de versão. Ter seu software sob "
+"controle de versão é importante porque permite acompanhar mudanças ao longo "
+"do tempo e também voltar no histórico e desfazer mudanças caso uma "
+"alteração na base de código quebre algo inesperadamente."
#: ../../tutorials/intro.md:194
msgid ""
@@ -2945,10 +3722,14 @@ msgid ""
"make contributions using a pull request (GitHub) / merge request (GitLab)"
" / code review workflow."
msgstr ""
+"Ao publicar seu pacote no GitHub ou GitLab, você o torna público. "
+"Isso significa que outras pessoas podem ver seu código e também contribuir "
+"usando um pull request (GitHub) / merge request (GitLab) / workflow decode "
+"review."
#: ../../tutorials/intro.md:196
msgid "GitHub & GitLab vs. Git"
-msgstr ""
+msgstr "GitHub e GitLab vs. Git"
#: ../../tutorials/intro.md:199
msgid ""
@@ -2957,34 +3738,44 @@ msgid ""
"allows you to upload (`git push`) and download (`git pull`) files to "
"GitHub and GitLab."
msgstr ""
+"GitHub e GitLab são plataformas online (na nuvem) que executam `git` "
+"(software de controle de versão) no backend. Executar git localmente no seu "
+"computador permite enviar (`git push`) e baixar (`git pull`) arquivos para "
+"GitHub e GitLab."
#: ../../tutorials/intro.md:204
msgid "Issues or Ticket Trackers"
-msgstr ""
+msgstr "Issues ou rastreadores de tickets"
#: ../../tutorials/intro.md:206
msgid ""
"GitHub and GitLab also both offer community features such as issues that "
"allow:"
msgstr ""
+"GitHub e GitLab também oferecem recursos de comunidade, como issues, que "
+"permitem:"
#: ../../tutorials/intro.md:208
msgid "you to communicate with your maintainers and contributor community"
msgstr ""
+"que você se comunique com sua equipe de mantenedores e a comunidade de "
+"contribuidores"
#: ../../tutorials/intro.md:209
msgid "users to report bugs, ask questions and request new features"
-msgstr ""
+msgstr "que usuários reportem bugs, façam perguntas e solicitem novos recursos"
#: ../../tutorials/intro.md:210
msgid ""
"you to publicly keep track of enhancements and features you want to work "
"on for your package."
msgstr ""
+"que você acompanhe publicamente melhorias e recursos que deseja desenvolver "
+"para seu pacote."
#: ../../tutorials/intro.md:212
msgid "Continuous integration and continuous deployment"
-msgstr ""
+msgstr "Integração contínua e implantação contínua"
#: ../../tutorials/intro.md:214
msgid ""
@@ -2994,10 +3785,16 @@ msgid ""
"continuous deployment (CD) is an extension of CI that refers to not only "
"running or building but also to publishing the final outputs somewhere."
msgstr ""
+"GitHub e GitLab também fornecem integração contínua e implantação contínua "
+"(CI/CD). Integração contínua (CI) refere-se a uma plataforma que executa "
+"automaticamente um job específico quando um determinado evento ocorre, "
+"enquanto implantação contínua (CD) é uma extensão da CI que se refere não "
+"apenas a executar ou fazer build, mas também a publicar os outputs finais "
+"em algum lugar."
#: ../../tutorials/intro.md:216
msgid "**An example of Continuous integration:**"
-msgstr ""
+msgstr "**Um exemplo de integração contínua:**"
#: ../../tutorials/intro.md:218
msgid ""
@@ -3005,10 +3802,13 @@ msgid ""
"different operating systems and the code will be checked for format "
"issues."
msgstr ""
+"Quando alguém envia uma mudança no seu código, seus testes serão executados "
+"em diferentes sistemas operacionais e o código será verificado quanto a "
+"problemas de formatação."
#: ../../tutorials/intro.md:220
msgid "**An example of Continuous deployment:**"
-msgstr ""
+msgstr "**Um exemplo de implantação contínua:**"
#: ../../tutorials/intro.md:222
msgid ""
@@ -3016,6 +3816,9 @@ msgid ""
"deployment operation might be triggered on release to publish your "
"package to PyPI."
msgstr ""
+"Quando você estiver pronto para fazer release do seu pacote no PyPI, uma "
+"operação de implantação contínua pode ser acionada no release para publicar "
+"seu pacote no PyPI."
#: ../../tutorials/intro.md:224
msgid ""
@@ -3024,24 +3827,30 @@ msgid ""
"you maintain code style and format consistency for every new change to "
"your code."
msgstr ""
+"CI/CD integrado ajudará você a manter seu software, garantindo que mudanças "
+"no código não quebrem coisas inesperadamente. Também pode ajudar a manter "
+"consistência de estilo e formatação do código a cada nova mudança."
#: ../../tutorials/intro.md:233
msgid "The lifecycle of a scientific Python package."
-msgstr ""
+msgstr "O ciclo de vida de um pacote Python científico."
#: ../../tutorials/intro.md:236
msgid "When should you turn your code into a Python package?"
-msgstr ""
+msgstr "Quando você deve transformar seu código em um pacote Python?"
#: ../../tutorials/intro.md:238
msgid ""
"You may be wondering, what types of code should become a Python package "
"that is both on GitHub and published to PyPI and/or conda-forge."
msgstr ""
+"Você pode estar se perguntando quais tipos de código devem se tornar um "
+"pacote Python que esteja tanto no GitHub quanto publicado no PyPI e/ou "
+"conda-forge."
#: ../../tutorials/intro.md:240
msgid "There are a few use cases to consider:"
-msgstr ""
+msgstr "Há alguns casos de uso a considerar:"
#: ../../tutorials/intro.md:242
msgid ""
@@ -3052,6 +3861,12 @@ msgid ""
"only have documentation for you and your future self if you need to "
"update the package."
msgstr ""
+"**Criar um pacote básico para você mesmo:** Às vezes você quer criar um "
+"pacote para uso pessoal. Isso pode significar tornar seu código instalável "
+"localmente com pip e também publicá-lo no GitHub. Nesse caso, você não "
+"espera que outras pessoas usem seu código e, portanto, pode ter "
+"documentação apenas para você e seu eu futuro, caso precise atualizar o "
+"pacote."
#: ../../tutorials/intro.md:244
msgid ""
@@ -3059,10 +3874,15 @@ msgid ""
"write that are useful across several of your projects. It could be useful"
" to have those functions available to all of your projects."
msgstr ""
+"Um exemplo desse tipo de pacote pode ser um conjunto de funções que você "
+"escreveu e que são úteis em vários dos seus projetos. Pode ser útil ter "
+"essas funções disponíveis para todos os seus projetos."
#: ../../tutorials/intro.md:247
msgid "LINK to pip installable lesson when it's published - it's in review now"
msgstr ""
+"LINK para a lição sobre pip installable quando for publicada - está "
+"em revisão agora"
#: ../../tutorials/intro.md:250
msgid ""
@@ -3076,6 +3896,14 @@ msgid ""
" for users and contributors and tests. This type of package is most often"
" published to PyPI."
msgstr ""
+"**Criar um pacote para a comunidade:** Em outros casos, você pode criar "
+"código que logo percebe ser útil não só para você, mas também para outras "
+"pessoas. Nesse caso, pode considerar criar o pacote, publicá-lo no GitHub "
+"e, como outros usuários podem usá-lo, aproveitar a infraestrutura do "
+"GitHub, incluindo pipelines de CI/CD e rastreadores de issues. Como você "
+"quer que outras pessoas usem seu pacote, também incluirá informações de "
+"LICENSE, documentação para usuários e contributors e testes. Esse tipo de "
+"pacote costuma ser publicado no PyPI."
#: ../../tutorials/intro.md:253
msgid ""
@@ -3083,10 +3911,15 @@ msgid ""
"/python-packages.html) are public facing with an intended audience beyond"
" just the maintainers."
msgstr ""
+"Por exemplo, todos os [pacotes da "
+"pyOpenSci](https://www.pyopensci.org/python-packages.html) são voltados "
+"para o público, com audiência além dos mantenedores."
#: ../../tutorials/intro.md:255
msgid "Packages that you expect others to use should be well-scoped"
msgstr ""
+"Pacotes que você espera que outras pessoas usem devem ter escopo bem "
+"definido"
#: ../../tutorials/intro.md:257
msgid ""
@@ -3094,6 +3927,9 @@ msgid ""
" use case. This theme is important as it's a way to scope the content of "
"your package."
msgstr ""
+"Idealmente, o código do seu pacote Python está focado em um tema ou caso de "
+"uso específico. Esse tema é importante, pois é uma forma de delimitar o "
+"conteúdo do seu pacote."
#: ../../tutorials/intro.md:259
msgid ""
@@ -3103,10 +3939,15 @@ msgid ""
"could it have a broader application across multiple projects in your "
"domain?"
msgstr ""
+"Pode ser difícil decidir quando seu código se torna algo que pode ser mais "
+"amplamente útil para outras pessoas. Mas uma pergunta que você pode fazer "
+"é: seu código foi escrito especificamente para um único projeto de "
+"pesquisa? Ou poderia ter aplicação mais ampla em vários projetos do seu "
+"domínio?"
#: ../../tutorials/intro.md:261
msgid "How does this relate to code for a research project?"
-msgstr ""
+msgstr "Como isso se relaciona com código de um projeto de pesquisa?"
#: ../../tutorials/intro.md:264
msgid ""
@@ -3116,6 +3957,12 @@ msgid ""
"enhance the reproducibility and transparency of research by providing a "
"comprehensive record of the methods, data, and analyses used in a study."
msgstr ""
+"Um [Research "
+"Compendium](https://book.the-turing-way.org/reproducible-research/compendia."
+"html)é um conjunto organizado de código, dados e documentação que sustenta "
+"um projeto de pesquisa específico. Ele visa aumentar a reprodutibilidade e a "
+"transparência da pesquisa, fornecendo um registro abrangente dos métodos, "
+"dados e análises usados em um estudo."
#: ../../tutorials/intro.md:269
msgid ""
@@ -3124,12 +3971,20 @@ msgid ""
"workflows. As such a Python package is more generalizable than a Research"
" Compendium which supports a specific project."
msgstr ""
+"Um pacote Python é uma coleção de modules que podem ser usados para "
+"executar um conjunto específico de tarefas. Essas tarefas devem ser "
+"aplicáveis a muitos workflows. Assim, um pacote Python é mais "
+"generalizável do que um Research Compendium, que sustenta um projeto "
+"específico."
#: ../../tutorials/intro.md:274
msgid ""
"[Read about `Good enough practices in scientific "
"computing`](https://journals.plos.org/ploscompbiol/article?id=10.1371/journal.pcbi.1005510)"
msgstr ""
+"[Leia sobre `Good enough practices in scientific "
+"computing`](https://journals.plos.org/ploscompbiol/article?id=10.1371/journa"
+"l.pcbi.1005510)"
#: ../../tutorials/intro.md:275
msgid ""
@@ -3137,10 +3992,16 @@ msgid ""
"blog post.](https://lorenabarba.com/blog/how-repro-packs-can-save-your-"
"future-self/)"
msgstr ""
+"[Saiba mais sobre research compendia (também chamados de repo-packs) neste "
+"post de "
+"blog.](https://lorenabarba.com/blog/how-repro-packs-can-save-your-future-sel"
+"f/)"
#: ../../tutorials/intro.md:278
msgid "Below are a few examples well scoped pyOpenSci packages:"
msgstr ""
+"Abaixo estão alguns exemplos de pacotes da pyOpenSci com escopo bem "
+"definido:"
#: ../../tutorials/intro.md:280
msgid ""
@@ -3150,6 +4011,11 @@ msgid ""
"bioacoustic data rather than focusing on a specific individual research "
"application associated with a user-specific research workflow."
msgstr ""
+"[Crowsetta](https://crowsetta.readthedocs.io/en/latest/): é um "
+"pacote projetado para trabalhar com anotação de vocalizações animais e dados "
+"de bioacústica. Este pacote ajuda cientistas a processar diferentes tipos "
+"de dados bioacústicos, em vez de focar em uma aplicação de pesquisa "
+"específica associada a um workflow de pesquisa de um usuário."
#: ../../tutorials/intro.md:281
msgid ""
@@ -3157,20 +4023,25 @@ msgid ""
"Python package. Pandera supports data testing and thus also has a broader"
" research application."
msgstr ""
+"[Pandera](https://www.union.ai/pandera) é outro pacote Python de uso mais "
+"amplo. Pandera suporta testes de dados e, portanto, também tem aplicação de "
+"pesquisa mais ampla."
#: ../../tutorials/intro.md:283
msgid "Matplotlib as an example"
-msgstr ""
+msgstr "Matplotlib como exemplo"
#: ../../tutorials/intro.md:285
msgid ""
"At the larger end of the user spectrum, Matplotlib is a great example. "
"Matplotlib does one thing really well:"
msgstr ""
+"No extremo maior do espectro de usuários, Matplotlib é um ótimo exemplo. "
+"Matplotlib faz uma coisa muito bem:"
#: ../../tutorials/intro.md:288
msgid "_It creates visual plots of data._"
-msgstr ""
+msgstr "_Ele cria gráficos visuais de dados._"
#: ../../tutorials/intro.md:290
msgid ""
@@ -3179,16 +4050,20 @@ msgid ""
"the same broad application and large user base that Matplotlib has, the "
"idea of scoping out what your package does is still important."
msgstr ""
+"Milhares de pessoas usam Matplotlib para diferentes aplicações de plotagem "
+"com diferentes tipos de dados. Embora poucos pacotes científicos tenham a "
+"mesma aplicação ampla e base de usuários grande que Matplotlib, a ideia de "
+"delimitar o que seu pacote faz ainda é importante."
#: ../../tutorials/intro.md:296
msgid "Code should also be clean & readable & documented"
-msgstr ""
+msgstr "O código também deve ser limpo, legível e documentado"
#: ../../tutorials/intro.md:298
msgid ""
"The code in your package should also be clean, readable, and well "
"documented."
-msgstr ""
+msgstr "O código do seu pacote também deve ser limpo, legível e bem documentado."
#: ../../tutorials/intro.md:300
msgid ""
@@ -3196,6 +4071,9 @@ msgid ""
"names, is concise and doesn't repeat itself. You can learn about best "
"practices for clean code in future pyOpenSci tutorials."
msgstr ""
+"**Clean code:** Clean code refere-se a código que usa nomes de variáveis "
+"expressivos, é conciso e não se repete. Você pode aprender sobre boas "
+"práticas de clean code em tutoriais futuros da pyOpenSci."
#: ../../tutorials/intro.md:304
msgid ""
@@ -3205,6 +4083,11 @@ msgid ""
" code formatters here.](../package-structure-code/code-style-linting-"
"format)"
msgstr ""
+"**Readable code:** Readable code é código escrito com um estilo "
+"consistente. Você pode usar linters e formatadores de código como black e "
+"flake8 para garantir essa consistência em todo o pacote. [Saiba mais sobre "
+"formatadores de código "
+"aqui.](../package-structure-code/code-style-linting-format)"
#: ../../tutorials/intro.md:308
msgid ""
@@ -3214,14 +4097,20 @@ msgid ""
" can learn more about docstrings in our guide, here.](../documentation"
"/write-user-documentation/document-your-code-api-docstrings)"
msgstr ""
+"**Documented code:** Documented code é escrito usando docstrings que ajudam "
+"o usuário a entender tanto o que as funções e methods do seu código fazem "
+"quanto quais são os elementos de input e output de cada função. [Você "
+"pode saber mais sobre docstrings em nosso guia, "
+"aqui.](../documentation/write-user-documentation/document-your-code-api-docs"
+"trings)"
#: ../../tutorials/intro.md:312
msgid "Making your package installable - publishing to PyPI & conda-forge"
-msgstr ""
+msgstr "Tornar seu pacote instalável - publicação no PyPI e conda-forge"
#: ../../tutorials/intro.md:314
msgid "Python packages and environments"
-msgstr ""
+msgstr "Pacotes Python e ambientes"
#: ../../tutorials/intro.md:316
msgid ""
@@ -3230,6 +4119,10 @@ msgid ""
"environment allows you to access it from any code run with that specific "
"Python environment activated."
msgstr ""
+"Você pode instalar um pacote Python em um ambiente Python da mesma forma "
+"que instalaria NumPy ou Pandas. Instalar seu pacote em um ambiente permite "
+"acessá-lo a partir de qualquer código executado com aquele ambiente Python "
+"específico ativado."
#: ../../tutorials/intro.md:322
msgid ""
@@ -3240,6 +4133,11 @@ msgid ""
"NumPy. Your package will also get installed into that same environment "
"when you pip install it."
msgstr ""
+"Diagrama mostrando as etapas associadas à criação de um pacote e depois à "
+"sua instalação. A primeira seta diz seu pacote e a segunda diz pip install "
+"pacote. A segunda seta leva a uma caixa que representaum ambiente Python "
+"que já tem alguns pacotes instalados, como Pandas e NumPy. Seu pacote também "
+"será instalado nesse mesmo ambiente quando você fizer pip install."
#: ../../tutorials/intro.md:324
msgid ""
@@ -3250,10 +4148,16 @@ msgid ""
" useful when you want to make your code public-facing and share it with "
"others."
msgstr ""
+"Você não precisa publicar no PyPI para tornar seu código instalável. Com a "
+"estrutura de arquivos correta e metadata do projeto, você pode tornar seu "
+"código instalável localmente no seu computador e usá-lo em projetos em que "
+"está trabalhando sem precisar publicar no PyPI. Publicar no PyPI é útil "
+"quando você quer tornar seu código público e compartilhá-lo com outras "
+"pessoas."
#: ../../tutorials/intro.md:331
msgid "Publishing a package to PyPI / Conda-Forge"
-msgstr ""
+msgstr "Publicar um pacote no PyPI / Conda-Forge"
#: ../../tutorials/intro.md:333
msgid ""
@@ -3261,12 +4165,15 @@ msgid ""
"download the code to your computer locally then you need to publish it in"
" a repository such as **PyPI** or **conda-forge**."
msgstr ""
+"Se você quer tornar seu pacote diretamente instalável sem precisar baixar o "
+"código para o seu computador localmente, precisa publicá-lo em um "
+"repositório como **PyPI** ou **conda-forge**."
#: ../../tutorials/intro.md:337
msgid ""
"Learn [how to publish your package to PyPI in this tutorial.](publish-"
"pypi.md)"
-msgstr ""
+msgstr "Aprenda [como publicar seu pacote no PyPI neste tutorial.](publish-pypi.md)"
#: ../../tutorials/intro.md:339
msgid ""
@@ -3274,12 +4181,17 @@ msgid ""
"[Grayskull](https://github.com/conda/grayskull) tool. You can then submit"
" this recipe to conda-forge."
msgstr ""
+"Depois você pode criar uma recipe do conda-forge usando a ferramenta "
+"[Grayskull](https://github.com/conda/grayskull). Em seguida, envie essa "
+"recipe para o conda-forge."
#: ../../tutorials/intro.md:341
msgid ""
"[You will learn more about the conda-forge publication process here"
".](publish-conda-forge.md)"
msgstr ""
+"[Você aprenderá mais sobre o processo de publicação no conda-forge "
+"aqui.](publish-conda-forge.md)"
#: ../../tutorials/intro.md:344
msgid ""
@@ -3292,6 +4204,14 @@ msgid ""
"connect to conda-forge for an automated build that sends distributions "
"from PyPI to conda-forge."
msgstr ""
+"Gráfico mostrando o workflow de alto nível de empacotamento. À esquerda "
+"você vê um gráfico com código, metadata e testes. Esses itens entram no seu "
+"pacote. Documentação e dados ficam abaixo dessa caixa porque normalmente "
+"não são publicados na wheel distribution do empacotamento. Uma seta à "
+"direita leva a uma caixa de arquivos de build distribution. Essa caixa leva "
+"à publicação no TestPyPI ou no PyPI real. A partir do PyPI, você pode "
+"conectar ao conda-forge para um build automatizado que envia distributions "
+"do PyPI para o conda-forge."
#: ../../tutorials/intro.md:346
msgid ""
@@ -3304,10 +4224,19 @@ msgid ""
"a pr in the conda-forge recipe repository. You will learn more about this"
" process in the [conda-forge lesson](/tutorials/publish-conda-forge)."
msgstr ""
+"Na imagem acima, você pode ver as etapas associadas à publicação do seu "
+"pacote no PyPI e conda-forge. O PyPI suporta arquivos "
+"[sdist](#python-source-distribution) e [wheel](#python-wheel). Quando "
+"estiver pronto para tornar seu código publicamente instalável, você pode "
+"publicá-lo no PyPI. Depois que seu código estiver no PyPI, é simples "
+"publicar no conda-forge. Você cria uma recipe usando o pacote Grayskull e "
+"depois abre um pr no repositório de recipes do conda-forge. Você aprenderá "
+"mais sobre esse processo na [lição do "
+"conda-forge](/tutorials/publish-conda-forge)."
#: ../../tutorials/intro.md:350
msgid "Yay, your package has users! Now what?"
-msgstr ""
+msgstr "Ótimo, seu pacote tem usuários! E agora?"
#: ../../tutorials/intro.md:352
msgid ""
@@ -3318,22 +4247,32 @@ msgid ""
"depend upon your code to work and will need direction regarding how to "
"use it."
msgstr ""
+"À medida que a comunidade que usa seu pacote cresce, você também pode se ver "
+"gerenciando usuários, contributors e outras pessoas que querem interagir "
+"com seu pacote. É importante considerar tudo isso antes de mergulhar no "
+"desenvolvimento. Quando você tiver uma base de usuários na comunidade, as "
+"pessoas dependerão do seu código funcionar e precisarão de orientação sobre "
+"como usá-lo."
#: ../../tutorials/intro.md:354
msgid "To support your community, you'll want to add things like:"
-msgstr ""
+msgstr "Para apoiar sua comunidade, você vai querer adicionar coisas como:"
#: ../../tutorials/intro.md:356
msgid ""
"[a development guide that documents your maintainer workflow process "
"](/documentation/repository-files/development-guide.md)"
msgstr ""
+"[um guia de desenvolvimento que documenta seu processo de workflow de "
+"mantenedor ](/documentation/repository-files/development-guide.md)"
#: ../../tutorials/intro.md:357
msgid ""
"[a code of conduct to defines community interaction standards and "
"expectations](/documentation/repository-files/code-of-conduct-file.md)"
msgstr ""
+"[um code of conduct que define padrões e expectativas de interação da "
+"comunidade](/documentation/repository-files/code-of-conduct-file.md)"
#: ../../tutorials/intro.md:358
msgid ""
@@ -3341,10 +4280,13 @@ msgid ""
" with making contributions to your project](/documentation/repository-"
"files/contributing-file.md)"
msgstr ""
+"[um guia de contribuição que ajuda usuários a entender expectativas "
+"associadas a contribuições ao seu "
+"projeto](/documentation/repository-files/contributing-file.md)"
#: ../../tutorials/intro.md:360
msgid "Support for contributors and maintainers"
-msgstr ""
+msgstr "Suporte para contributors e mantenedores"
#: ../../tutorials/intro.md:362
msgid ""
@@ -3355,6 +4297,12 @@ msgid ""
"community interactions remain healthy both for you and your contributors "
"and maintainer team."
msgstr ""
+"Se você pretende que outras pessoas usem e contribuam com seu código, "
+"considere quem o manterá ao longo do tempo. Você vai querer um **guia de "
+"contribuição e desenvolvimento** para ajudar novos contributors potenciais "
+"a começar a contribuir com seu pacote, além de um **code of conduct** para "
+"garantir que as interações da comunidade permaneçam saudáveis tanto para "
+"você quanto para seus contributors e equipe de mantenedores."
#: ../../tutorials/intro.md:364
msgid ""
@@ -3363,10 +4311,14 @@ msgid ""
"want extra help, development, and contributing documentation will help "
"you onboard new maintainers."
msgstr ""
+"Os elementos acima também são importantes para a manutenção futura do seu "
+"pacote. Caso você não consiga mais mantê-lo ou simplesmente queira ajuda "
+"extra, a documentação de desenvolvimento e contribuição ajudará você a "
+"integrar novos maintainers."
#: ../../tutorials/intro.md:369
msgid "What's next?"
-msgstr ""
+msgstr "Próximos passos"
#: ../../tutorials/intro.md:371
msgid ""
@@ -3376,34 +4328,43 @@ msgid ""
"However, first we want to get you to your initial goal of publishing a "
"Python package."
msgstr ""
+"Em lições futuras você aprenderá mais sobre a infraestrutura em torno de um "
+"pacote Python publicado que facilita a manutenção, a contribuição de outras "
+"pessoas e o uso por outros cientistas. No entanto, primeiro queremos "
+"levá-lo ao seu objetivo inicial de publicarum pacote Python."
#: ../../tutorials/intro.md:373
msgid ""
"In this next lesson you will learn how to create a basic installable "
"Python package. Make your code pip installable "
msgstr ""
+"Nessa próxima lição você aprenderá como criar um pacote Python básico "
+"instalável. Torne seu código pip instalável "
#: ../../tutorials/publish-conda-forge.md:6
msgid "Publish your Python package that is on PyPI to conda-forge"
-msgstr ""
+msgstr "Publique seu pacote Python que está no PyPI no conda-forge"
#: ../../tutorials/publish-conda-forge.md:8
msgid "In the previous lessons, you've learned:"
-msgstr ""
+msgstr "Nas lições anteriores, você aprendeu:"
#: ../../tutorials/publish-conda-forge.md:10
msgid ""
"How to [create the most basic version of a Python package](create-python-"
"package.md). This entailed making your code installable."
msgstr ""
+"Como [criar a versão mais básica de um pacote "
+"Python](create-python-package.md). Isso envolveu tornar seu código "
+"instalável."
#: ../../tutorials/publish-conda-forge.md:11
msgid "[How to publish your Python package to PyPI](publish-pypi)"
-msgstr ""
+msgstr "[Como publicar seu pacote Python no PyPI](publish-pypi)"
#: ../../tutorials/publish-conda-forge.md:12
msgid "How to add a `README` and `LICENSE` file to your package"
-msgstr ""
+msgstr "Como adicionar arquivos `README` e `LICENSE` ao seu pacote"
#: ../../tutorials/publish-conda-forge.md:13
msgid ""
@@ -3411,12 +4372,17 @@ msgid ""
"metadata that PyPI requires and also metadata that will be helpful for "
"users to find your package."
msgstr ""
+"Como configurar seu arquivo [pyproject.toml](pyproject-toml) com toda a "
+"metadata exigida pelo PyPI e também metadata que ajudará usuários a "
+"encontrar seu pacote."
#: ../../tutorials/publish-conda-forge.md:17
msgid ""
"If you have gone through all of the above lessons, you are now ready to "
"publish your package on conda-forge."
msgstr ""
+"Se você passou por todas as lições acima, agora está pronto para publicar "
+"seu pacote no conda-forge."
#: ../../tutorials/publish-conda-forge.md:20
msgid ""
@@ -3424,26 +4390,33 @@ msgid ""
"forge. You should only publish to conda-forge when you have a package on "
"pypi.org that you plan to maintain."
msgstr ""
+"**IMPORTANTE:** Por favor, não pratique publicar seu pacote no conda-forge. "
+"Você só deve publicar no conda-forge quando tiver um pacote no pypi.org que "
+"planeja manter."
#: ../../tutorials/publish-conda-forge.md:26 ../../tutorials/publish-pypi.md:24
msgid "In this lesson you will learn how to:"
-msgstr ""
+msgstr "Nesta lição você aprenderá como:"
#: ../../tutorials/publish-conda-forge.md:28
msgid "Create a conda-forge yaml recipe for your package using Grayskull"
-msgstr ""
+msgstr "Criar uma recipe YAML do conda-forge para seu pacote usando Grayskull"
#: ../../tutorials/publish-conda-forge.md:29
msgid ""
"Submit the recipe (yaml file) to the conda-forge staged recipes "
"repository as a pull request"
msgstr ""
+"Enviar a recipe (arquivo YAML) para o repositório staged recipes do "
+"conda-forge como pull request"
#: ../../tutorials/publish-conda-forge.md:30
msgid ""
"Maintain your conda-forge package by creating new releases for your "
"package on PyPI"
msgstr ""
+"Manter seu pacote no conda-forge criando novos releases para seu pacote no "
+"PyPI"
#: ../../tutorials/publish-conda-forge.md:33
#, python-brace-format
@@ -3453,6 +4426,12 @@ msgid ""
" do not need to build the package specifically for conda, conda-forge "
"will build from your PyPI {term}`Source distribution (sdist)` file."
msgstr ""
+"Depois que seu pacote estiver no PyPI, você pode publicá-lo facilmente no "
+"conda-forge usando a ferramenta "
+"[grayskull](https://conda.github.io/grayskull/). Você não precisa fazer "
+"build do pacote especificamente para conda; o conda-forge irá construir a "
+"partir do arquivo {term}`distribuição fonte (sdist) ` do PyPI."
#: ../../tutorials/publish-conda-forge.md:41
msgid ""
@@ -3463,6 +4442,12 @@ msgid ""
"distributions. From PyPI if you create a conda-forge recipe you can then "
"publish to conda-forge."
msgstr ""
+"Imagem mostrando a progressão de criar um pacote Python, fazer build "
+"e publicar no PyPI e conda-forge. Você pega seu código e o transforma "
+"em arquivos de distribuição (sdist e wheel) que o PyPI aceita. Depois há uma "
+"seta em direção ao repositório PyPI, onde você publica ambas "
+"as distribuições. A partir do PyPI, se você criar uma recipe do conda-forge, "
+"pode publicar no conda-forge."
#: ../../tutorials/publish-conda-forge.md:43
#, python-brace-format
@@ -3473,16 +4458,25 @@ msgid ""
"PyPI in order to build your package on conda-forge. You do not need to "
"rebuild your package to publish to conda-forge."
msgstr ""
+"Depois que você publicou ambas as distribuições do pacote (a "
+"{term}`distribuição fonte (sdist) ` e a "
+"{term}`Wheel (.whl)`) no PyPI, pode publicar no conda-forge. O conda-forge "
+"exige uma source distribution no PyPI para fazer build do seu pacote no "
+"conda-forge. Você não precisa refazer o build do seu pacote para publicar no "
+"conda-forge."
#: ../../tutorials/publish-conda-forge.md:50
msgid "What is conda-forge?"
-msgstr ""
+msgstr "O que é conda-forge?"
#: ../../tutorials/publish-conda-forge.md:52
msgid ""
"conda is an open source package and environment management tool that can "
"be used to install tools from the different channels on Anaconda.org."
msgstr ""
+"conda é uma ferramenta open source de gerenciamento de pacotes e ambientes "
+"que pode ser usada para instalar ferramentas de diferentes channels no "
+"Anaconda.org."
#: ../../tutorials/publish-conda-forge.md:55
msgid ""
@@ -3497,10 +4491,20 @@ msgid ""
"repository](https://github.com/conda-forge/staged-recipes) to be "
"published."
msgstr ""
+"Você pode pensar em um channel como um local específico onde um grupo de "
+"pacotes é armazenado e pode ser instalado usando um comando como `conda "
+"install packagename`. No caso de conda channels, alguns desses channels, "
+"como o channel `defaults`, são gerenciados pela Anaconda (a empresa). "
+"Somente a Anaconda decide quais pacotes estão disponíveis no channel "
+"`defaults`. No entanto, os channels conda-forge (e bioconda)são gerenciados "
+"pela comunidade. Qualquer pessoa pode submeter um pacote a esses channels, "
+"porém ele precisa passar por uma revisão técnica no [repositório "
+"staged-recipes no GitHub](https://github.com/conda-forge/staged-recipes) "
+"para ser publicado."
#: ../../tutorials/publish-conda-forge.md:58
msgid "[Learn more about conda channels here.](#about-conda)"
-msgstr ""
+msgstr "[Saiba mais sobre conda channels aqui.](#about-conda)"
#: ../../tutorials/publish-conda-forge.md:62
msgid ""
@@ -3513,6 +4517,14 @@ msgid ""
"says PyPI servers. PyPI - anyone can publish to PyPI and test PyPI (a "
"testbed server for you to practice)."
msgstr ""
+"Gráfico com o título Repositórios de pacote Pythons. Abaixo diz que "
+"qualquer coisa hospedada no PyPI pode ser instalada usando pip install. "
+"Packaging hospedado em um conda channel pode ser instalado usando conda "
+"install. Abaixo há duas linhas. A linha superior diz conda channels. Ao "
+"lado há três caixas: uma com conda-forge, mantido pela comunidade; "
+"bioconda; e default — gerenciado pela equipe Anaconda. Abaixo há uma linha "
+"que diz servidores PyPI. PyPI — qualquer pessoa pode publicar no PyPI e test "
+"PyPI (um servidor de testes para você praticar)."
#: ../../tutorials/publish-conda-forge.md:64
msgid ""
@@ -3522,10 +4534,16 @@ msgid ""
"Anyone can submit a package to PyPI and test PyPI. Unlike conda-forge "
"there are no manual checks of packages submitted to PyPI."
msgstr ""
+"Conda channels representam vários repositórios de onde você pode instalar "
+"pacotes. Como o conda-forge é mantido pela comunidade, qualquer pessoa pode "
+"submeter uma recipe lá. O PyPI também é um repositório mantido pela "
+"comunidade. Qualquer pessoa pode submeter um pacote ao PyPI e ao test PyPI. "
+"Diferentemente do conda-forge, não há verificações manuais de pacotes "
+"submetidos ao PyPI."
#: ../../tutorials/publish-conda-forge.md:67
msgid "Why publish to conda-forge"
-msgstr ""
+msgstr "Por que publicar no conda-forge"
#: ../../tutorials/publish-conda-forge.md:69
msgid ""
@@ -3536,10 +4554,16 @@ msgid ""
"conflicts that can occur when mixing installations using pip and conda. "
"This is particularly important for the spatial ecosystem."
msgstr ""
+"Existem muitos usuários, especialmente no ecossistema científico Python, "
+"que usam conda como seu gerenciador de pacotes / ferramenta deambientes "
+"principal. Assim, ter pacotes disponíveis para esses usuários no channel "
+"conda-forge é útil. Em alguns casos, pacotes no conda-forge podem minimizar "
+"conflitos de dependências que podem ocorrer ao misturar instalações usando "
+"pip e conda. Isso é particularmente importante para o ecossistema espacial."
#: ../../tutorials/publish-conda-forge.md:71
msgid "How publishing to conda-forge works"
-msgstr ""
+msgstr "Como funciona a publicação no conda-forge"
#: ../../tutorials/publish-conda-forge.md:73
msgid ""
@@ -3547,6 +4571,9 @@ msgid ""
"everything that you need to publish to conda-forge. There is no "
"additional build step needed to publish to conda-forge."
msgstr ""
+"Depois de fazer o build e publicar seu pacote no PyPI, você tem tudo o que "
+"precisa para publicar no conda-forge. Não há etapa adicional de build "
+"necessária para publicar no conda-forge."
#: ../../tutorials/publish-conda-forge.md:75
msgid ""
@@ -3554,16 +4581,21 @@ msgid ""
"you [published to PyPI in the previous lesson](publish-pypi) using the "
"recipe that you will create below."
msgstr ""
+"O conda-forge fará o build do seu pacote a partir da source distribution "
+"que você [publicou no PyPI na lição anterior](publish-pypi), usando a "
+"recipe que você criará abaixo."
#: ../../tutorials/publish-conda-forge.md:77
msgid "Conda-forge publication steps"
-msgstr ""
+msgstr "Etapas de publicação no conda-forge"
#: ../../tutorials/publish-conda-forge.md:80
msgid ""
"Image showing the steps associated with publishing to conda-forge. Check "
"out the caption below for a detailed description."
msgstr ""
+"Imagem mostrando as etapas associadas à publicação no conda-forge. Consulte "
+"a legenda abaixo para uma descrição detalhada."
#: ../../tutorials/publish-conda-forge.md:82
msgid ""
@@ -3573,14 +4605,22 @@ msgid ""
"repository for review. Once that recipe is accepted, your package will "
"get it's on repository (known as a feedstock) on conda-forge."
msgstr ""
+"As etapas para publicar no conda-forge começam com a publicação do "
+"seu pacote Python no PyPI. Depois de publicar no PyPI, você pode criar "
+"um arquivo yaml de recipe que pode ser submetido ao repositório staged "
+"recipes do conda-forge para revisão. Depois que essa recipe for aceita, seu "
+"pacote terá seu próprio repositório (conhecido como feedstock) no "
+"conda-forge."
#: ../../tutorials/publish-conda-forge.md:85
msgid "The steps to publish to conda-forge are:"
-msgstr ""
+msgstr "As etapas para publicar no conda-forge são:"
#: ../../tutorials/publish-conda-forge.md:87
msgid "Publish your Python package distribution files (sdist & wheel) to PyPI"
msgstr ""
+"Publique os arquivos de distribuição do seu pacote Python (sdist e wheel) "
+"no PyPI"
#: ../../tutorials/publish-conda-forge.md:88
msgid ""
@@ -3588,6 +4628,9 @@ msgid ""
"how to build your package on conda-forge, using the grayskull[^grayskull]"
" package."
msgstr ""
+"Crie uma recipe conda-forge, que é um arquivo yaml com instruções sobre "
+"como fazer o build do seu pacote no conda-forge, usando o "
+"pacote grayskull[^grayskull]."
#: ../../tutorials/publish-conda-forge.md:89
msgid ""
@@ -3596,6 +4639,10 @@ msgid ""
"submission from pyOpenSci.](https://github.com/conda-forge/staged-"
"recipes/pull/25173)"
msgstr ""
+"Submeta a recipe (arquivo yaml) ao repositório staged recipes do "
+"conda-forge como um pull request para revisão. [Clique aqui para ver um "
+"exemplo de submissão do "
+"pyOpenSci.](https://github.com/conda-forge/staged-recipes/pull/25173)"
#: ../../tutorials/publish-conda-forge.md:91
msgid ""
@@ -3603,26 +4650,33 @@ msgid ""
" need to make some changes. Eventually the pull request will be approved "
"and merged."
msgstr ""
+"Depois que alguém da equipe conda-forge revisar seu pull request, você pode "
+"precisar fazer algumas alterações. Eventualmente o pull request será "
+"aprovado e merged."
#: ../../tutorials/publish-conda-forge.md:93
msgid ""
"Once your recipe is accepted and merged on conda-forge, users can install"
" your package using:"
msgstr ""
+"Depois que sua recipe for aceita e merged no conda-forge, os usuários "
+"poderão instalar seu pacote usando:"
#: ../../tutorials/publish-conda-forge.md:95
msgid "`conda install -c conda-forge your-package`"
-msgstr ""
+msgstr "`conda install -c conda-forge your-package`"
#: ../../tutorials/publish-conda-forge.md:97
msgid ""
"You only create the recipe once. Once the recipe is accepted and merged, "
"you only need to maintain the repository."
msgstr ""
+"Você cria a recipe apenas uma vez. Depois que a recipe for aceita e merged, "
+"você só precisa manter o repositório."
#: ../../tutorials/publish-conda-forge.md:99
msgid "Maintaining a conda-forge package"
-msgstr ""
+msgstr "Mantendo um pacote conda-forge"
#: ../../tutorials/publish-conda-forge.md:101
msgid ""
@@ -3631,24 +4685,36 @@ msgid ""
"release with a new source distribution, conda-forge will build and update"
" your conda-forge repository (also known as a feedstock)."
msgstr ""
+"Depois que seu pacote estiver no conda-forge, o repositório acompanhará a "
+"atividade de release no repositório PyPI do pacote. Sempre que você fizer "
+"um novo release no PyPI com uma nova source distribution, o conda-forge "
+"fará o build e atualizará seu repositório conda-forge (também conhecido "
+"como feedstock)."
#: ../../tutorials/publish-conda-forge.md:103
msgid ""
"When the update is processed, the friendly conda-forge bot will create a "
"new pull request with an updated distribution recipe in your feedstock."
msgstr ""
+"Quando a atualização for processada, o amigável bot conda-forge criará um "
+"novo pull request com uma recipe de distribuição atualizada no seu "
+"feedstock."
#: ../../tutorials/publish-conda-forge.md:105
msgid ""
"You can review that pull request and then merge it once all of the "
"continuous integration tests pass."
msgstr ""
+"Você pode revisar esse pull request e depois fazer merge assim que todos os "
+"testes de integração contínua passarem."
#: ../../tutorials/publish-conda-forge.md:107
msgid ""
" How to Publish your package"
" on conda-forge"
msgstr ""
+" Como publicar seu pacote no "
+"conda-forge"
#: ../../tutorials/publish-conda-forge.md:109
msgid ""
@@ -3656,18 +4722,26 @@ msgid ""
"your package needs to be on PyPI before the steps below will work. And "
"also remember that the team managing conda-forge are all volunteers."
msgstr ""
+"É hora de adicionar seu pacote ao channel conda-forge. Lembre-se de que seu "
+"pacote precisa estar no PyPI antes que as etapas abaixo funcionem. E "
+"lembre-se também de que a equipe que gerencia o conda-forge é formada por "
+"voluntários."
#: ../../tutorials/publish-conda-forge.md:112
msgid ""
"Be sure that your package is on PyPI.org (not test.pypi.org) before you "
"attempt to publish to conda-forge."
msgstr ""
+"Certifique-se de que seu pacote está no PyPI.org (não no test.pypi.org) "
+"antes de tentar publicar no conda-forge."
#: ../../tutorials/publish-conda-forge.md:115
msgid ""
"Only submit your package to conda-forge if you intend to maintain it over"
" time."
msgstr ""
+"Submeta seu pacote ao conda-forge somente se você pretende mantê-lo ao longo "
+"do tempo."
#: ../../tutorials/publish-conda-forge.md:118
msgid ""
@@ -3675,10 +4749,13 @@ msgid ""
"forge. The official conda documentation for this processed [is "
"here](https://conda-forge.org/docs/maintainer/adding_pkgs.html)."
msgstr ""
+"Nota: este é um tutorial destinado a ajudá-lo a colocar seu pacote "
+"no conda-forge. A documentação oficial do conda para esse processo [está "
+"aqui](https://conda-forge.org/docs/maintainer/adding_pkgs.html)."
#: ../../tutorials/publish-conda-forge.md:120
msgid "Step 1: Install grayskull"
-msgstr ""
+msgstr "Etapa 1: Instalar grayskull"
#: ../../tutorials/publish-conda-forge.md:122
msgid ""
@@ -3686,16 +4763,21 @@ msgid ""
"grayskull](https://conda.github.io/grayskull/user_guide.html). You can "
"install it using either pip:"
msgstr ""
+"Primeiro, [instale o "
+"grayskull](https://conda.github.io/grayskull/user_guide.html). Você pode "
+"instalá-lo usando pip:"
#: ../../tutorials/publish-conda-forge.md:128
msgid "or conda"
-msgstr ""
+msgstr "ou conda"
#: ../../tutorials/publish-conda-forge.md:134
msgid ""
"To run this command, use the same shell / terminal that you have been "
"using to run hatch commands in the previous tutorials."
msgstr ""
+"Para executar este comando, use o mesmo shell / terminal que você usou para "
+"executar comandos hatch nos tutoriais anteriores."
#: ../../tutorials/publish-conda-forge.md:139
msgid ""
@@ -3704,36 +4786,46 @@ msgid ""
"available across multiple Python environments rather than installing the "
"package into every Python environment that you create."
msgstr ""
+"Você também pode instalar o grayskull usando pipx[^pipx]. pipx é uma "
+"ferramenta que permite instalar ferramentas comumente usadas que você pode "
+"querer ter disponíveis em vários ambientes Python, em vez de instalar o "
+"pacote em cada ambiente Python que você cria."
#: ../../tutorials/publish-conda-forge.md:142
msgid "Step 2: Fork and clone the conda-forge staged-recipes repository"
-msgstr ""
+msgstr "Etapa 2: Fazer fork e clonar o repositório staged-recipes do conda-forge"
#: ../../tutorials/publish-conda-forge.md:144
msgid ""
"Next, open your shell and `cd` to a location where you want to clone the "
"**conda-forge/staged-recipes** repository."
msgstr ""
+"Em seguida, abra seu shell e `cd` para um local onde você quer clonar o "
+"repositório **conda-forge/staged-recipes**."
#: ../../tutorials/publish-conda-forge.md:145
msgid ""
"fork and clone the [conda-forge/staged-recipes GitHub "
"repository](https://github.com/conda-forge/staged-recipes)."
msgstr ""
+"faça fork e clone o [repositório conda-forge/staged-recipes no "
+"GitHub](https://github.com/conda-forge/staged-recipes)."
#: ../../tutorials/publish-conda-forge.md:146
msgid ""
"Create a new branch in your fork rather than submitting from the main "
"branch of your fork. We suggest naming the branch your package's name."
msgstr ""
+"Crie um novo branch no seu fork em vez de submeter a partir do branch main "
+"do seu fork. Sugerimos nomear o branch com o nome do seu pacote."
#: ../../tutorials/publish-conda-forge.md:148
msgid "`git checkout -b your-package-name `"
-msgstr ""
+msgstr "`git checkout -b your-package-name `"
#: ../../tutorials/publish-conda-forge.md:150
msgid "In bash, `cd` into the `staged-recipes/recipes` folder"
-msgstr ""
+msgstr "No bash, `cd` para a pasta `staged-recipes/recipes`"
#: ../../tutorials/publish-conda-forge.md:158
msgid ""
@@ -3741,68 +4833,87 @@ msgid ""
"repository. You might want to make that branch the same name as your "
"package."
msgstr ""
+"Em seguida, crie um novo branch no repositório clonado "
+"`conda-forge/staged-recipes`. Você pode querer que esse branch tenha o mesmo "
+"nome do seu pacote."
#: ../../tutorials/publish-conda-forge.md:169
msgid "Step 3: Create your conda-forge recipe"
-msgstr ""
+msgstr "Etapa 3: Criar sua recipe conda-forge"
#: ../../tutorials/publish-conda-forge.md:171
msgid "Next, navigate to the recipes directory"
-msgstr ""
+msgstr "Em seguida, navegue até o diretório recipes"
#: ../../tutorials/publish-conda-forge.md:173
msgid ""
"If you run `ls` here, you will notice there is an example directory with "
"an example recipe for you to look at."
msgstr ""
+"Se você executar `ls` aqui, notará que há um diretório de exemplo com uma "
+"recipe de exemplo para você consultar."
#: ../../tutorials/publish-conda-forge.md:185
msgid "Next, run `grayskull pypi your-package-name` to generate a recipe."
msgstr ""
+"Em seguida, execute `grayskull pypi your-package-name` para gerar uma "
+"recipe."
#: ../../tutorials/publish-conda-forge.md:229
msgid ""
"Grayskull will pull metadata about your package from PyPI. It does not "
"use your local installation of the package."
msgstr ""
+"O Grayskull buscará metadata sobre seu pacote no PyPI. Ele não usa "
+"sua instalação local do pacote."
#: ../../tutorials/publish-conda-forge.md:230
msgid ""
"An internet connection is needed to run the `grayskull pypi your-package-"
"name` step."
msgstr ""
+"Uma conexão com a internet é necessária para executar a etapa `grayskull "
+"pypi your-package-name`."
#: ../../tutorials/publish-conda-forge.md:233
msgid ""
"When you run grayskull, it will grab the latest distribution of your "
"package from PyPI and will use that to create a new recipe."
msgstr ""
+"Quando você executar grayskull, ele obterá a distribuição mais recente do "
+"seu pacote no PyPI e usará isso para criar uma nova recipe."
#: ../../tutorials/publish-conda-forge.md:235
msgid ""
"The recipe will be saved in a directory named after your package's name, "
"wherever you run the command."
msgstr ""
+"A recipe será salva em um diretório nomeado com o nome do seu pacote, onde "
+"quer que você execute o comando."
#: ../../tutorials/publish-conda-forge.md:237
msgid "`recipes/packagename/meta.yaml`"
-msgstr ""
+msgstr "`recipes/packagename/meta.yaml`"
#: ../../tutorials/publish-conda-forge.md:239
msgid ""
"At the very bottom of the grayskull output, it will also tell you where "
"it saved the recipe file."
msgstr ""
+"Na parte inferior da saída do grayskull, ele também informará onde salvou o "
+"arquivo de recipe."
#: ../../tutorials/publish-conda-forge.md:242
msgid ""
"Open the meta.yaml file. The finished `meta.yaml` file that grayskull "
"creates should look like the example below:"
msgstr ""
+"Abra o arquivo meta.yaml. O arquivo `meta.yaml` final que o grayskull cria "
+"deve se parecer com o exemplo abaixo:"
#: ../../tutorials/publish-conda-forge.md:289
msgid "Step 3b: Bug fix - add a home url to the about: section"
-msgstr ""
+msgstr "Etapa 3b: Correção de bug — adicionar uma home url à seção about"
#: ../../tutorials/publish-conda-forge.md:291
msgid ""
@@ -3812,28 +4923,38 @@ msgid ""
"recipes/pull/25173#issuecomment-1917916528) from the friendly conda-forge"
" linter bot."
msgstr ""
+"Atualmente há um pequeno bug no Grayskull em que ele não preenche o "
+"elemento home: da recipe. Se você não incluir isso, [receberá uma mensagem "
+"de "
+"erro](https://github.com/conda-forge/staged-recipes/pull/25173#issuecomment-"
+"1917916528)doamigávelbotlinter do conda-forge."
#: ../../tutorials/publish-conda-forge.md:305
msgid "to fix this, open your meta.yaml file in your favorite text editor."
msgstr ""
+"para corrigir isso, abra seu arquivo meta.yaml no seu editor de texto "
+"favorito."
#: ../../tutorials/publish-conda-forge.md:306
msgid "and add a home: element to the about section"
-msgstr ""
+msgstr "e adicione um elemento home: à seção about"
#: ../../tutorials/publish-conda-forge.md:308
msgid "The about section will look like this after you create your recipe."
-msgstr ""
+msgstr "A seção about ficará assim depois que você criar sua recipe."
#: ../../tutorials/publish-conda-forge.md:318
msgid ""
"Below you add a home: element. If you have a project home page / website "
"you can use that url. Otherwise, you can also use your PyPI landing page."
msgstr ""
+"Abaixo você adiciona um elemento home:. Se você tiver uma home page / "
+"website do projeto, pode usar essa url. Caso contrário, você também pode "
+"usar sua landing page no PyPI."
#: ../../tutorials/publish-conda-forge.md:329
msgid "Step 4: tests for conda-forge"
-msgstr ""
+msgstr "Etapa 4: testes para conda-forge"
#: ../../tutorials/publish-conda-forge.md:331
msgid ""
@@ -3841,74 +4962,94 @@ msgid ""
"minimum you should import your package or the main modules associated "
"with your package and run `pip check`."
msgstr ""
+"Em seguida, dê uma olhada na seção tests do seu arquivo **meta.yaml**. No "
+"mínimo, você deve importar seu pacote ou os principais modules associados "
+"ao seu pacote e executar `pip check`."
#: ../../tutorials/publish-conda-forge.md:333
msgid ""
"`pip check` will ensure that your package installs properly with all of "
"the proper dependencies."
msgstr ""
+"`pip check` garantirá que seu pacote seja instalado corretamente com todas "
+"as dependências adequadas."
#: ../../tutorials/publish-conda-forge.md:345
msgid ""
"If you have more advanced tests that you wish to run, you can add them "
"here. However, you can also simply leave the tests section as it is."
msgstr ""
+"Se você tiver testes mais avançados que deseja executar, pode adicioná-los "
+"aqui. No entanto, você também pode simplesmente deixar a seção tests como "
+"está."
#: ../../tutorials/publish-conda-forge.md:347
msgid "Step 4: Submit a pull request to the staged-recipes repository"
-msgstr ""
+msgstr "Etapa 4: Submeter um pull request ao repositório staged-recipes"
#: ../../tutorials/publish-conda-forge.md:349
msgid ""
"Once you have completed all of the above, you are ready to open up a pull"
" request in the `conda-forge/staged-recipes repository`."
msgstr ""
+"Depois de concluir tudo acima, você está pronto para abrir um pull request "
+"no repositório `conda-forge/staged-recipes`."
#: ../../tutorials/publish-conda-forge.md:351
msgid ""
"Submit a pull request from your fork/branch of the staged-recipes "
"repository."
msgstr ""
+"Submeta um pull request a partir do fork/branch do repositório "
+"staged-recipes."
#: ../../tutorials/publish-conda-forge.md:352
msgid ""
"Remember that the conda-forge maintainers are volunteers. Be patient for "
"someone to respond and supportive in your communication with them."
msgstr ""
+"Lembre-se de que os maintainers do conda-forge são voluntários. Seja "
+"paciente aguardando uma resposta e colaborativo na comunicação com eles."
#: ../../tutorials/publish-conda-forge.md
msgid "Conda-forge checklist help"
-msgstr ""
+msgstr "Ajuda com checklist do conda-forge"
#: ../../tutorials/publish-conda-forge.md:358
msgid "Conda-forge Staged-recipes Pull Request Checklist"
-msgstr ""
+msgstr "Checklist de pull request do Staged-recipes conda-forge"
#: ../../tutorials/publish-conda-forge.md:360
msgid ""
"When you submit your package to conda-forge, the pull request template "
"includes a list of checks that you want to ensure you have covered."
msgstr ""
+"Quando você submete seu pacote ao conda-forge, o template de pull request "
+"inclui uma lista de verificações que você deve garantir ter coberto."
#: ../../tutorials/publish-conda-forge.md:362
msgid "Below we break down each element of that list."
-msgstr ""
+msgstr "Abaixo detalhamos cada elemento dessa lista."
#: ../../tutorials/publish-conda-forge.md:364
msgid "Pull request template checklist tips"
-msgstr ""
+msgstr "Dicas do checklist do template de pull request"
#: ../../tutorials/publish-conda-forge.md:367
msgid ""
"-[x] Title of this PR is meaningful: e.g. \"Adding my_nifty_package\", "
"not \"updated meta.yaml\"."
msgstr ""
+"-[x] O título deste PR é significativo: por exemplo, \"Adding "
+"my_nifty_package\", não \"updated meta.yaml\"."
#: ../../tutorials/publish-conda-forge.md:369
msgid ""
"**Translation:** Make sure that your pull request title is specific. We "
"suggest something like: `Add recipe for `"
msgstr ""
+"**Tradução:** Certifique-se de que o título do seu pull request seja "
+"específico. Sugerimos algo como: `Add recipe for `"
#: ../../tutorials/publish-conda-forge.md:372
msgid ""
@@ -3917,6 +5058,9 @@ msgid ""
"recipes/blob/5eddbd7fc9d1502169089da06c3688d9759be978/recipes/example/meta.yaml#L64-L73)"
" for an example)."
msgstr ""
+"-[x] O arquivo LICENSE está incluído no pacote (veja "
+"[aqui](https://github.com/conda-forge/staged-recipes/blob/5eddbd7fc9d1502169"
+"089da06c3688d9759be978/recipes/example/meta.yaml#L64-L73)umexemplo)."
#: ../../tutorials/publish-conda-forge.md:374
msgid ""
@@ -3927,10 +5071,16 @@ msgid ""
"the output [source distribution file (which is the tar.gz file)](python-"
"source-distribution) that conda-forge will use to build your package."
msgstr ""
+"**Tradução:** Você deve ter um arquivo LICENSE incluído na source "
+"distribution do seu pacote. Se você seguiu os tutoriais do pyOpenSci, já tem "
+"um arquivo LICENSE e provavelmente está usando a licença MIT. Quando você "
+"executar `hatch build`, ele incluirá esse arquivo na [source distribution "
+"(que é o arquivo tar.gz)](python-source-distribution) que o conda-forge "
+"usará para fazer o build do seu pacote."
#: ../../tutorials/publish-conda-forge.md:376
msgid "[x] Source is from official source."
-msgstr ""
+msgstr "[x] A source é de uma fonte oficial."
#: ../../tutorials/publish-conda-forge.md:378
msgid ""
@@ -3939,6 +5089,10 @@ msgid ""
"you are in good shape. conda-forge prefers that your distribution is "
"published to a known repository."
msgstr ""
+"**Tradução:** Se seu pacote está no PyPI, como você aprendeu na "
+"[lição anterior sobre publicar seu pacote Python](publish-pypi), você está "
+"em boa forma. O conda-forge prefere que sua distribuição seja publicada em "
+"um repositório conhecido."
#: ../../tutorials/publish-conda-forge.md:380
msgid ""
@@ -3946,6 +5100,9 @@ msgid ""
"source of another package, they should be separate packages or the "
"licenses of all packages need to be packaged)."
msgstr ""
+"-[x] O pacote não inclui (vendor) outros pacotes. (Se um pacote usa o source "
+"de outro pacote, eles devem ser pacotes separados ou as licenças de todos "
+"os pacotes precisam ser incluídas)."
#: ../../tutorials/publish-conda-forge.md:382
msgid ""
@@ -3955,12 +5112,19 @@ msgid ""
"licenses for that code if it is different. If you followed these "
"tutorials then you do not have any vendored code."
msgstr ""
+"**Tradução:** Se a base de código do seu pacote é sua e tudo compartilha a "
+"mesma LICENSE, você está em boa forma. Se você tem código retirado de "
+"outros pacotes, pode precisar declarar isso e incluir licenças para esse "
+"código se for diferente. Se você seguiu estes tutoriais, não tem nenhum "
+"código vendored."
#: ../../tutorials/publish-conda-forge.md:384
msgid ""
"-[x] If static libraries are linked in, the license of the static library"
" is packaged."
msgstr ""
+"-[x] Se bibliotecas estáticas forem linkadas, a licença da biblioteca "
+"estática está incluída no pacote."
#: ../../tutorials/publish-conda-forge.md:386
msgid ""
@@ -3968,6 +5132,9 @@ msgid ""
"needed, [follow CFEP-18](https://github.com/conda-"
"forge/cfep/blob/main/cfep-18.md)."
msgstr ""
+"-[x] O pacote não distribui bibliotecas estáticas. Se bibliotecas estáticas "
+"forem necessárias, [siga o "
+"CFEP-18](https://github.com/conda-forge/cfep/blob/main/cfep-18.md)."
#: ../../tutorials/publish-conda-forge.md:388
msgid ""
@@ -3976,6 +5143,10 @@ msgid ""
" check that your package does not ship static libraries as this does not "
"apply to you."
msgstr ""
+"**Tradução:** Uma biblioteca estática refere-se a uma cópia de um pacote "
+"incorporada ao seu pacote. Se seu pacote é um pacote puro Python, você pode "
+"marcar que seu pacote não distribui bibliotecas estáticas, pois isso não se "
+"aplica a você."
#: ../../tutorials/publish-conda-forge.md:390
msgid ""
@@ -3983,6 +5154,9 @@ msgid ""
" libraries in a linked or shipped (included in the package distribution) "
"format."
msgstr ""
+"Os tutoriais do pyOpenSci são todos pure Python e, como tal, não usam "
+"bibliotecas estáticas em formato linkado ou shipped (incluído na "
+"distribuição do pacote)."
#: ../../tutorials/publish-conda-forge.md:392
msgid ""
@@ -3990,6 +5164,9 @@ msgid ""
"extensions written in other languages such as C++, then be sure to "
"include the proper licenses for those extensions in your metadata."
msgstr ""
+"Se seu pacote tem um build mais complexo que inclui links para extensões "
+"escritas em outras linguagens, como C++, certifique-se de incluir as "
+"licenças adequadas para essas extensões no seu metadata."
#: ../../tutorials/publish-conda-forge.md:397
msgid ""
@@ -3998,10 +5175,13 @@ msgid ""
"native.github.io/background/compilation_concepts/#shared-vs-static-"
"libraries) might help."
msgstr ""
+"Se você quiser saber mais sobre bibliotecas estáticas, [esta visão "
+"geral](https://pypackaging-native.github.io/background/compilation_concepts/"
+"#shared-vs-static-libraries)podeajudar."
#: ../../tutorials/publish-conda-forge.md:400
msgid "-[ ] Build number is 0."
-msgstr ""
+msgstr "-[ ] O build number é 0."
#: ../../tutorials/publish-conda-forge.md:402
msgid ""
@@ -4009,6 +5189,9 @@ msgid ""
"source location of your package's source distribution. `number: 0` is "
"what you should see in that section of your recipe."
msgstr ""
+"**Tradução:** O numero da sua build recipe fica logo abaixo da localização "
+"da source distribution do seu pacote. `number: 0` é o que você deve ver "
+"nessa seção da sua recipe."
#: ../../tutorials/publish-conda-forge.md:415
msgid ""
@@ -4016,6 +5199,10 @@ msgid ""
" recipe (see [here](https://conda-"
"forge.org/docs/maintainer/adding_pkgs.html) for more details)."
msgstr ""
+"[x] Um tarball (`url`) em vez de um repo (por exemplo, `git_url`) é usado "
+"na sua recipe (veja "
+"[aqui](https://conda-forge.org/docs/maintainer/adding_pkgs.html) mais "
+"detalhes)."
#: ../../tutorials/publish-conda-forge.md:417
msgid ""
@@ -4025,12 +5212,19 @@ msgid ""
"a `url:` section that provides a PyPI url that ends in tar.gz. That is a "
"link to your source distribution that conda-forge will use."
msgstr ""
+"**Tradução:** Aqui o conda quer que você forneça um link para a "
+"source distribution no PyPI em vez de um link para a distribuição do seu "
+"repositório GitHub. Observe acima na seção Source da sua recipe que há uma "
+"seção `url:` que fornece uma url do PyPI terminando em tar.gz. Esse é um "
+"link para sua source distribution que o conda-forge usará."
#: ../../tutorials/publish-conda-forge.md:423
msgid ""
"[x] GitHub users listed in the maintainer section have posted a comment "
"confirming they are willing to be listed there."
msgstr ""
+"[x] Usuários do GitHub listados na seção maintainer postaram um comentário "
+"confirmando que estão dispostos a ser listados lá."
#: ../../tutorials/publish-conda-forge.md:425
msgid ""
@@ -4039,6 +5233,9 @@ msgid ""
"with being listed as a maintainer for the conda-forge version of your "
"package."
msgstr ""
+"**Tradução** Depois de submeter sua recipe, certifique-se de que todos os "
+"maintainers listados na sua recipe respondam confirmando que concordam em "
+"ser listados como maintainer da versão conda-forge do seu package."
#: ../../tutorials/publish-conda-forge.md:427
msgid ""
@@ -4046,6 +5243,9 @@ msgid ""
"documentation](https://conda-"
"forge.org/docs/maintainer/knowledge_base.html) before pinging a team."
msgstr ""
+"[x] Em caso de problemas, consulte nossa [documentação da base de "
+"conhecimento](https://conda-forge.org/docs/maintainer/knowledge_base.html)an"
+"tesdemencionarumaequipe."
#: ../../tutorials/publish-conda-forge.md:429
msgid ""
@@ -4053,12 +5253,17 @@ msgid ""
"supporting our community. Please try to troubleshoot on your own first "
"before tagging one of them for help."
msgstr ""
+"**Tradução** A equipe conda são voluntários que dedicam seu tempo "
+"para apoiar nossa comunidade. Tente resolver por conta própria antes "
+"de marcar um deles para pedir ajuda."
#: ../../tutorials/publish-conda-forge.md:431
msgid ""
"This is also why we don't suggest you publish to conda-forge as a "
"practice run."
msgstr ""
+"É por isso também que não sugerimos publicar no conda-forge como um "
+"exercício de prática."
#: ../../tutorials/publish-conda-forge.md:435
msgid ""
@@ -4066,18 +5271,26 @@ msgid ""
"build and test the build of your package. A conda-forge maintainer will "
"work with you to get your recipe in good shape and merged."
msgstr ""
+"Depois de criar seu pull request, um conjunto de ações de CI será executado "
+"que faz o build e testa o build do seu pacote. Um maintainer do conda-forge "
+"trabalhará com você para deixar sua recipe em boa forma e fazer merge."
#: ../../tutorials/publish-conda-forge.md:439
msgid ""
"Image showing the 5 CI tasks that will run against your package in the "
"GitHub interface after you'ce created a pull request."
msgstr ""
+"Imagem mostrando as 5 tarefas de CI que serão executadas contra seu pacote "
+"na interface do GitHub depois que você criar um pull request."
#: ../../tutorials/publish-conda-forge.md:441
msgid ""
"Wait until all of the CI steps in your pull request have run. At that "
"point your pull request is ready for review by a conda-forge maintainer."
msgstr ""
+"Aguarde até que todas as etapas de CI do seu pull request tenham sido "
+"executadas. Nesse ponto, seu pull request está pronto para revisão por um "
+"maintainer do conda-forge."
#: ../../tutorials/publish-conda-forge.md:444
msgid ""
@@ -4085,14 +5298,18 @@ msgid ""
"take a bit of work. If you are struggling to get your recipe to build "
"properly, you can ping the conda-forge maintainer team for help."
msgstr ""
+"Em alguns casos, fazer com que todas as verificações passem com sucesso no "
+"CI pode exigir um pouco de trabalho. Se você estiver com dificuldade para "
+"fazer sua recipe buildar corretamente, pode mencionara equipe de "
+"maintainers do conda-forge para pedir ajuda."
#: ../../tutorials/publish-conda-forge.md:446
msgid "Please be patient and wait for them to respond."
-msgstr ""
+msgstr "Seja paciente e aguarde a resposta deles."
#: ../../tutorials/publish-conda-forge.md:448
msgid "conda-forge staged recipes and CI failures"
-msgstr ""
+msgstr "staged recipes do conda-forge e falhas de CI"
#: ../../tutorials/publish-conda-forge.md:451
msgid ""
@@ -4101,6 +5318,10 @@ msgid ""
"requirements (known as noarch: Python or no architecture requirements) "
"then the conda-forge team only requires tests for Linux CI to pass."
msgstr ""
+"Se seu pacote é um pure pacote Python que pode ser instalado em qualquer "
+"tipo de computador (Windows, mac, linux) e não tem requisitosde arquitetura "
+"(conhecido como noarch: Python ou sem requisitos de arquitetura), a equipe "
+"conda-forge exige apenas que os testes de CI Linux passem."
#: ../../tutorials/publish-conda-forge.md:453
msgid ""
@@ -4108,6 +5329,9 @@ msgid ""
"case, don't worry about failing tests, the maintainer team can help you "
"get your package published."
msgstr ""
+"Então, se os testes para Windows e MAC OS falharem, isso é esperado. Nesse "
+"caso, não se preocupe com testes falhando; a equipe de maintainers pode "
+"ajudá-lo a publicar seu pacote."
#: ../../tutorials/publish-conda-forge.md:456
msgid ""
@@ -4115,6 +5339,9 @@ msgid ""
"pass. If it's not passing, and you aren't sure why, a conda-forge "
"maintainer can likely help you figure things out."
msgstr ""
+"Depois de submeter sua recipe, você pode aguardar o build de CI passar. Se "
+"não estiver passando e você não souber por quê, um maintainer do "
+"conda-forge provavelmente pode ajudá-lo a descobrir."
#: ../../tutorials/publish-conda-forge.md:458
msgid ""
@@ -4122,6 +5349,9 @@ msgid ""
"package repository for you similar to [this one for the GemGIS "
"package](https://github.com/conda-forge/gemgis-feedstock)."
msgstr ""
+"Depois que sua recipe for construida e merged, a equipe conda criará um novo "
+"repositório de pacote para você, semelhante a [este do pacote "
+"GemGIS](https://github.com/conda-forge/gemgis-feedstock)."
#: ../../tutorials/publish-conda-forge.md:460
msgid ""
@@ -4129,16 +5359,20 @@ msgid ""
"have added your package to conda-forge."
msgstr ""
+" Parabéns — você adicionou "
+"seu pacote ao conda-forge."
#: ../../tutorials/publish-conda-forge.md:462
msgid ""
"The last part of this process is maintaining the repository. We cover "
"that next."
msgstr ""
+"A última parte deste processo é manter o repositório. Cobrimos isso a "
+"seguir."
#: ../../tutorials/publish-conda-forge.md:465
msgid "Maintaining your conda-forge feedstock"
-msgstr ""
+msgstr "Mantendo seu feedstock conda-forge"
#: ../../tutorials/publish-conda-forge.md:467
msgid ""
@@ -4146,6 +5380,10 @@ msgid ""
"recognize the release and will rebuild the newly released version of your"
" package. This process may take a day or two to complete so be patient."
msgstr ""
+"Toda vez que você criar um novo release no PyPI, os bots do conda-forge "
+"reconhecerão o release e farão rebuild da versão recém-lançada do seu "
+"pacote. Esse processo pode levar um ou dois dias para concluir, então seja "
+"paciente."
#: ../../tutorials/publish-conda-forge.md:469
msgid ""
@@ -4153,6 +5391,9 @@ msgid ""
"conda-forge feedstock will get a ping on GitHub that a new pull request "
"has been opened."
msgstr ""
+"Quando o build do conda-forge estiver concluído, todos os maintainers do "
+"seu feedstock conda-forge receberão uma menção no GitHub informando que um "
+"novo pull request foi aberto."
#: ../../tutorials/publish-conda-forge.md:471
msgid ""
@@ -4160,38 +5401,45 @@ msgid ""
"Shortly after merging your pull request, the conda-forge release will be "
"available for users to install:"
msgstr ""
+"Revise o pull request. Se todos os testes estiverem passando, você pode "
+"fazer merge. Um pouco depois de fazer merge do seu pull request, o release "
+"conda-forge estará disponível para os usuários instalarem:"
#: ../../tutorials/publish-conda-forge.md:473
msgid "`conda install -c conda-forge yourpackage`"
-msgstr ""
+msgstr "`conda install -c conda-forge yourpackage`"
#: ../../tutorials/publish-conda-forge.md:477
msgid "If you have walked through this entire tutorial series you will now:"
-msgstr ""
+msgstr "Se você percorreu toda esta série de tutoriais, agora você:"
#: ../../tutorials/publish-conda-forge.md:479
msgid "Understand [what a Python package is ](intro.md)"
-msgstr ""
+msgstr "Entende [o que é um pacote Python ](intro.md)"
#: ../../tutorials/publish-conda-forge.md:480
msgid ""
"Know how to [make your code installable](create-python-package.md) into "
"Python environments"
msgstr ""
+"Sabe como [tornar seu código instalável](create-python-package.md) em "
+"ambientes Python"
#: ../../tutorials/publish-conda-forge.md:481
msgid ""
"Know how to create a `pyproject.toml` file, a `README` file, and a "
"`LICENSE` and code of conduct."
msgstr ""
+"Sabe como criar um arquivo `pyproject.toml`, um arquivo `README`, um "
+"`LICENSE` e um code of conduct."
#: ../../tutorials/publish-conda-forge.md:482
msgid "Know how to [publish your package to PyPI](publish-pypi.md) and"
-msgstr ""
+msgstr "Sabe como [publicar seu pacote no PyPI](publish-pypi.md) e"
#: ../../tutorials/publish-conda-forge.md:483
msgid "Know how to publish your package to conda-forge"
-msgstr ""
+msgstr "Sabe como publicar seu pacote no conda-forge"
#: ../../tutorials/publish-conda-forge.md:485
msgid ""
@@ -4199,34 +5447,39 @@ msgid ""
" a Python package. In a future tutorial series we will cover that basics "
"of maintaining your package."
msgstr ""
+"Os itens acima são as etapas básicas que você precisa seguir para criar e "
+"publicar um pacote Python. Em uma futura série de tutoriais, cobriremos o "
+"básico de manter seu pacote."
#: ../../tutorials/publish-conda-forge.md:489
msgid "[Grayskull blogpost](https://conda-forge.org/blog/2020/03/05/grayskull/)"
-msgstr ""
+msgstr "[Post do blog Grayskull](https://conda-forge.org/blog/2020/03/05/grayskull/)"
#: ../../tutorials/publish-conda-forge.md:490
msgid "[Pipx documentation](https://pipx.pypa.io/stable/)"
-msgstr ""
+msgstr "[Documentação do Pipx](https://pipx.pypa.io/stable/)"
#: ../../tutorials/publish-pypi.md:7
msgid "Publish your Python package to PyPI"
-msgstr ""
+msgstr "Publique seu pacote Python no PyPI"
#: ../../tutorials/publish-pypi.md:11
msgid "Make sure they add /dist to their .gitignore file. Where does that fit?"
msgstr ""
+"Certifique-se de que eles adicionem /dist ao arquivo .gitignore. Onde isso "
+"se encaixa?"
#: ../../tutorials/publish-pypi.md:15
msgid "In the previous Python packaging lessons, you've learned:"
-msgstr ""
+msgstr "Nas lições anteriores de empacotamento Python, você aprendeu:"
#: ../../tutorials/publish-pypi.md:17
msgid "What a Python package is"
-msgstr ""
+msgstr "O que é um pacote Python"
#: ../../tutorials/publish-pypi.md:18
msgid "How to make your code installable."
-msgstr ""
+msgstr "Como tornar seu código instalável."
#: ../../tutorials/publish-pypi.md:26
#, python-brace-format
@@ -4234,20 +5487,25 @@ msgid ""
"Build your package's {term}`Source distribution (sdist)` and {term}`Wheel"
" (.whl)` {term}`Distribution files`"
msgstr ""
+"Fazer o build da {term}`distribuição fonte (sdist) ` e da {term}`Wheel (.whl)` {term}`arquivos de distribuição "
+"` do seu pacote"
#: ../../tutorials/publish-pypi.md:28
msgid "Setup an account on TestPyPI (the process is similar for PyPI)"
-msgstr ""
+msgstr "Criar uma conta no TestPyPI (o processo é semelhante para o PyPI)"
#: ../../tutorials/publish-pypi.md:29
msgid "Publish your package to TestPyPI and PyPI"
-msgstr ""
+msgstr "Publicar seu pacote no TestPyPI e no PyPI"
#: ../../tutorials/publish-pypi.md:31
msgid ""
"You will do all of your development work in this lesson using [Hatch"
"](get-to-know-hatch)."
msgstr ""
+"Você fará todo o trabalho de desenvolvimento nesta lição usando "
+"[Hatch](get-to-know-hatch)."
#: ../../tutorials/publish-pypi.md:34
msgid ""
@@ -4255,12 +5513,17 @@ msgid ""
"a channel on conda) using "
"[Grayskull](https://conda.github.io/grayskull/)."
msgstr ""
+"Depois que seu pacote estiver no PyPI, você pode publicá-lo no conda-forge "
+"(que é um channel no conda) usando "
+"[Grayskull](https://conda.github.io/grayskull/)."
#: ../../tutorials/publish-pypi.md:37
msgid ""
"You will learn how to publish to conda-forge in the [next lesson"
"](publish-conda-forge)."
msgstr ""
+"Você aprenderá como publicar no conda-forge na [próxima "
+"lição](publish-conda-forge)."
#: ../../tutorials/publish-pypi.md:41
msgid ""
@@ -4273,6 +5536,14 @@ msgid ""
"connect to conda-forge for an automated build that sends distributions "
"from PyPI to conda-forge."
msgstr ""
+"Gráfico mostrando o workflow de alto nível de empacotamento. À esquerda "
+"você vê um gráfico com code, metadata e tests. Esses itens entram no seu "
+"pacote. Uma seta à direita leva a uma caixa build distribution files. Outra "
+"seta à direita leva a uma caixa publish to PyPI, que tem uma seta contendo "
+"sdist e wheel indicando que esses arquivos vão para o PyPI para hospedagem. "
+"A partir do PyPI há uma setacontendo sdist, pois você pode então conectar "
+"ao conda-forge para um build automatizado que envia distribuições do PyPI "
+"para o conda-forge."
#: ../../tutorials/publish-pypi.md:43
msgid ""
@@ -4281,16 +5552,22 @@ msgid ""
"distribution format that can be uploaded to PyPI and subsequently "
"downloaded and installed by users."
msgstr ""
+"Você precisa fazer o build do seu pacote Python para publicá-lo no PyPI (ou "
+"Conda). O processo de build organiza seu code e metadata em um formato de "
+"distribuição que pode ser enviado ao PyPI e subsequentemente baixado e "
+"instalado pelos usuários."
#: ../../tutorials/publish-pypi.md:46
msgid "TestPyPI vs PyPI"
-msgstr ""
+msgstr "TestPyPI vs PyPI"
#: ../../tutorials/publish-pypi.md:48
msgid ""
"There are two repositories associated with PyPI to which you can upload "
"your Python package."
msgstr ""
+"Existem dois repositórios associados ao PyPI para os quais você pode enviar "
+"seu pacote Python."
#: ../../tutorials/publish-pypi.md:51
msgid ""
@@ -4300,6 +5577,11 @@ msgid ""
"practice and learn how to publish a package without exposing your "
"incomplete package on the real PyPI service."
msgstr ""
+"**[TestPyPI](https://test.pypi.org):** TestPyPI é um repositório de pacotes "
+"fornecido pelo PyPI que você pode usar para testar se seu pacote pode ser "
+"enviado, baixado e instalado corretamente. Este é um ótimo lugar para "
+"praticar e aprender como publicar um pacote sem expor seu pacote incompleto "
+"no serviço real do PyPI."
#: ../../tutorials/publish-pypi.md:52
msgid ""
@@ -4310,16 +5592,24 @@ msgid ""
"that it will become a package that you will maintain. PyPI is not a place"
" to practice learning how to publish a Python package."
msgstr ""
+"**[PyPI](https://pypi.org):** Este é o repositório PyPI de produção, ao "
+"vivo, onde você pode publicar oficialmente seu pacote Python e de onde os "
+"usuários obterão seu pacote. IMPORTANTE: Publique seu pacote no PyPI somente "
+"quando estiver pronto para ser usado por outras pessoas e/ou confiante de "
+"que se tornará um pacote que você manterá. O PyPI não é um lugar para "
+"praticar aprender a publicar um pacote Python."
#: ../../tutorials/publish-pypi.md:54
msgid ""
"The steps for publishing on TestPyPI vs. PyPI are similar with the "
"exception of a different url. We will point out where they differ."
msgstr ""
+"As etapas para publicar no TestPyPI vs. PyPI são semelhantes, com exceção "
+"de uma url diferente. Indicaremos onde elas diferem."
#: ../../tutorials/publish-pypi.md:57
msgid "4 Steps for publishing a Python package on TestPyPI (or PyPI)"
-msgstr ""
+msgstr "4 etapas para publicar um pacote Python no TestPyPI (ou PyPI)"
#: ../../tutorials/publish-pypi.md:59
msgid ""
@@ -4327,10 +5617,13 @@ msgid ""
"using [Hatch](https://hatch.pypa.io/latest/). There are 4 things that you"
" need to do to publish your Python package: to TestPyPI. You need to:"
msgstr ""
+"Nesta lição você aprenderá como publicar seu pacote no TestPyPI "
+"usando[Hatch](https://hatch.pypa.io/latest/). Há 4 coisas que você precisa "
+"fazer para publicar seu pacote Python no TestPyPI. Você precisa:"
#: ../../tutorials/publish-pypi.md:64
msgid "**Create a package development environment**"
-msgstr ""
+msgstr "**Criar um ambiente de desenvolvimento do pacote**"
#: ../../tutorials/publish-pypi.md:65
#, python-brace-format
@@ -4341,6 +5634,12 @@ msgid ""
"sdist and wheel. The wheel distribution file is particularly important "
"for users who will use {term}`pip` to install your package."
msgstr ""
+"[**Fazer o build do seu pacote usando `hatch "
+"build`**](../package-structure-code/python-package-distribution-files-sdist-"
+"wheel).Fazer o build de um pacote é o processo de transformar seu code em dois "
+"tipos de arquivos de distribuição: sdist e wheel. O arquivo de distribuição "
+"wheel é particularmente importante para usuários que usarão {term}`pip` "
+"para instalar seu pacote."
#: ../../tutorials/publish-pypi.md:66
#, python-brace-format
@@ -4350,10 +5649,14 @@ msgid ""
"permissions for you to upload your package. When you later publish your "
"package to PyPI, you will need a separate PyPI account and token."
msgstr ""
+"**Criar uma conta no TestPyPI (ou PyPI)**: Você precisará criar uma conta "
+"no TestPyPI e um {term}`API token` associado, que fornece permissões para "
+"você enviar seu pacote. Quando publicar seu pacote no PyPI depois, "
+"precisará de uma conta e token PyPI separados."
#: ../../tutorials/publish-pypi.md:67
msgid "**Publish to TestPyPI using `hatch publish`**"
-msgstr ""
+msgstr "**Publicar no TestPyPI usando `hatch publish`**"
#: ../../tutorials/publish-pypi.md:69
msgid ""
@@ -4361,22 +5664,30 @@ msgid ""
" automated GitHub Actions workflow that publishes an updated version of "
"your package to PyPI every time you create a GitHub release."
msgstr ""
+"Em uma [lição futura](trusted-publishing), você aprenderá como criar um "
+"workflow automatizado de GitHub Actions que publica uma versão atualizada "
+"do seu pacote no PyPI toda vez que você criar um release no GitHub."
#: ../../tutorials/publish-pypi.md:71
msgid "Learn more about building Python packages in our guide"
-msgstr ""
+msgstr "Saiba mais sobre build de pacote Pythons no nosso guia"
#: ../../tutorials/publish-pypi.md:75
msgid ""
"[Learn more about what building a Python package is](../package-"
"structure-code/python-package-distribution-files-sdist-wheel)"
msgstr ""
+"[Saiba mais sobre o que é fazer build de um pacote "
+"Python](../package-structure-code/python-package-distribution-files-sdist-wh"
+"eel)"
#: ../../tutorials/publish-pypi.md:76
msgid ""
"[Learn more about the package distribution file that PyPI needs called "
"the wheel](#python-wheel)"
msgstr ""
+"[Saiba mais sobre o arquivo de distribuição do pacote que o PyPI precisa, "
+"chamado wheel](#python-wheel)"
#: ../../tutorials/publish-pypi.md:77
msgid ""
@@ -4384,10 +5695,13 @@ msgid ""
"need on PyPI called the sdist (source distribution)](#python-source-"
"distribution)"
msgstr ""
+"[Saiba mais sobre o arquivo de distribuição do pacote que o conda-forge "
+"precisará no PyPI, chamado sdist (source "
+"distribution)](#python-source-distribution)"
#: ../../tutorials/publish-pypi.md:80
msgid "Step 1: Create a Python package development environment"
-msgstr ""
+msgstr "Etapa 1: Criar um ambiente de desenvolvimento de pacote Python"
#: ../../tutorials/publish-pypi.md:82
msgid ""
@@ -4395,14 +5709,19 @@ msgid ""
"environment. The Python environment will contain all of the dependencies "
"needed to both install and work on your package."
msgstr ""
+"A primeira etapa para fazer o build do seu pacote é criar um ambientede "
+"desenvolvimento. O ambiente Python conterá todas as dependências "
+"necessárias tanto para instalar quanto para trabalhar no seu pacote."
#: ../../tutorials/publish-pypi.md:84
msgid "Use Hatch to create your environment."
-msgstr ""
+msgstr "Use o Hatch para criar seu ambiente."
#: ../../tutorials/publish-pypi.md:92
msgid "Then view all of the current environments that hatch has access to:"
msgstr ""
+"Em seguida, visualize todos os ambientes atuais aos quais o hatch tem "
+"acesso:"
#: ../../tutorials/publish-pypi.md:104
msgid ""
@@ -4410,18 +5729,21 @@ msgid ""
"Hatch environment, it will automatically install your package into the "
"environment in development or editable mode."
msgstr ""
+"Depois ative o ambiente. Observe que quando você chama um shell de um "
+"ambiente Hatch, ele instalará automaticamente seu pacote no ambiente em "
+"modo de desenvolvimento ou editable."
#: ../../tutorials/publish-pypi.md:114
msgid "View what's in the environment using `pip list`:"
-msgstr ""
+msgstr "Visualize o que há no ambiente usando `pip list`:"
#: ../../tutorials/publish-pypi.md:130
msgid "At any time you can exit the environment using `exit`."
-msgstr ""
+msgstr "A qualquer momento você pode sair do ambiente usando `exit`."
#: ../../tutorials/publish-pypi.md:144
msgid "Hatch and environments"
-msgstr ""
+msgstr "Hatch e ambientes"
#: ../../tutorials/publish-pypi.md:146
msgid ""
@@ -4429,14 +5751,17 @@ msgid ""
"default it uses venv[^venv] which is the default environment management "
"tool that comes with Python installations."
msgstr ""
+"Nos bastidores, quando o hatch cria um novo virtual environment, por padrão "
+"ele usa venv[^venv], que é a ferramenta padrão de gerenciamentode ambientes "
+"que vem com instalações Python."
#: ../../tutorials/publish-pypi.md:149
msgid "Hatch will:"
-msgstr ""
+msgstr "O Hatch irá:"
#: ../../tutorials/publish-pypi.md:151
msgid "Create a new virtualenv (venv) that is located on your computer."
-msgstr ""
+msgstr "Criar um novo virtualenv (venv) localizado no seu computador."
#: ../../tutorials/publish-pypi.md:152
msgid ""
@@ -4444,10 +5769,13 @@ msgid ""
"`python -m pip install -e`). This means it installs both your project and"
" your project's dependencies as declared in your pyproject.toml file."
msgstr ""
+"Instalar seu pacote no ambiente em modo editable (semelhante a `python-m "
+"pip install -e`). Isso significa que instala tanto o seu projeto quanto as "
+"dependências do projeto declaradas no seu arquivo pyproject.toml."
#: ../../tutorials/publish-pypi.md:154
msgid "Step 2: Build your package's sdist and wheel distributions"
-msgstr ""
+msgstr "Etapa 2: Fazer o build das distribuições sdist e wheel do seu pacote"
#: ../../tutorials/publish-pypi.md:156
msgid ""
@@ -4455,6 +5783,10 @@ msgid ""
"your package using Hatch. Remember that building is the process of "
"turning your Python package file structure into two distribution files:"
msgstr ""
+"Depois de configurar seu ambiente de desenvolvimento, você está pronto para "
+"fazer o build do seu pacote usando Hatch. Lembre-se de que build é o "
+"processo de transformar a estrutura de arquivos do seu pacote Python em dois "
+"arquivos de distribuição:"
#: ../../tutorials/publish-pypi.md:158
msgid ""
@@ -4462,6 +5794,9 @@ msgid ""
"package. It useful for users as it can be directly installed using a tool"
" such as `pip`. This file has the extension `.whl`."
msgstr ""
+"A [distribuição wheel](#python-wheel) é uma versão pré-buildada do "
+"seu package. É útil para usuários, pois pode ser instalada diretamente "
+"usando uma ferramenta como `pip`. Este arquivo tem a extensão `.whl`."
#: ../../tutorials/publish-pypi.md:159
msgid ""
@@ -4469,6 +5804,9 @@ msgid ""
" that make up your package in an unbuilt format. This file will have the "
"extension `.tar.gz`."
msgstr ""
+"A [source distribution](#python-source-distribution) contém os arquivos que "
+"compõem seu pacote em formato não buildado. Este arquivo terá a extensão "
+"`.tar.gz`."
#: ../../tutorials/publish-pypi.md:161
msgid ""
@@ -4478,14 +5816,19 @@ msgid ""
" it in your pyproject.toml file in the [previous lesson](create-python-"
"package)."
msgstr ""
+"Você usará o Hatch como ferramenta de **Front end** que faz o build do sdist "
+"e wheel do seu pacote usando o build back-end "
+"[hatchling](https://hatch.pypa.io/latest/). O build back-end hatchling é "
+"usado porque você o declarou no seu arquivo pyproject.toml na "
+"[lição anterior](create-python-package)."
#: ../../tutorials/publish-pypi.md:165
msgid "To build your package run `hatch build`:"
-msgstr ""
+msgstr "Para fazer o build do seu pacote, execute `hatch build`:"
#: ../../tutorials/publish-pypi.md:176
msgid "Learn more about building a Python package"
-msgstr ""
+msgstr "Saiba mais sobre build de pacote Python"
#: ../../tutorials/publish-pypi.md:178
msgid ""
@@ -4493,12 +5836,18 @@ msgid ""
"guide](../package-structure-code/python-package-distribution-files-sdist-"
"wheel)."
msgstr ""
+"Você pode saber mais sobre build na [página de build do nosso guia de "
+"empacotamento](../package-structure-code/python-package-distribution-files-s"
+"dist-wheel)."
#: ../../tutorials/publish-pypi.md:182
msgid ""
"The sdist is important if you wish to [publish your package to conda-"
"forge](publish-conda-forge). You will learn about this in a later lesson."
msgstr ""
+"O sdist é importante se você deseja [publicar seu pacote no "
+"conda-forge](publish-conda-forge). Você aprenderá sobre isso em uma lição "
+"posterior."
#: ../../tutorials/publish-pypi.md:186
msgid ""
@@ -4508,6 +5857,11 @@ msgid ""
"────────────────────────────────────── dist/pyospackage-0.1-py3-none-"
"any.whl"
msgstr ""
+"➜ hatch build ────────────────────────────────────── sdist "
+"────────────────────────────────────── dist/pyospackage-0.1.tar.gz "
+"────────────────────────────────────── wheel "
+"────────────────────────────────────── dist/pyospackage-0.1-py3-none-"
+"any.whl"
#: ../../tutorials/publish-pypi.md:193
msgid ""
@@ -4515,6 +5869,9 @@ msgid ""
"you've created your Python package distribution files "
msgstr ""
+" Parabéns — você criou os "
+"arquivos de distribuição do seu pacote Python "
#: ../../tutorials/publish-pypi.md:195
msgid ""
@@ -4522,10 +5879,13 @@ msgid ""
"distribution files. The next step is to setup your account on TestPyPI so"
" you can publish your package."
msgstr ""
+"Você fez o build do seu pacote Python e criou os arquivos de distribuição "
+"do pacote. A próxima etapa é configurar sua conta no TestPyPI para publicar "
+"seu pacote."
#: ../../tutorials/publish-pypi.md:198
msgid "Step 3. Setup your TestPyPI account"
-msgstr ""
+msgstr "Etapa 3. Configure sua conta no TestPyPI"
#: ../../tutorials/publish-pypi.md:200
msgid ""
@@ -4534,10 +5894,14 @@ msgid ""
"publish a package without accidentally \"releasing\" your package before "
"it's ready."
msgstr ""
+"Em seguida, você configurará uma conta no TestPyPI. Lembre-se de que você "
+"está usando o TestPyPI aqui em vez do PyPI real como forma de aprender com "
+"segurança como publicar um pacote sem \"lançar\" acidentalmente seu pacote "
+"antes que esteja pronto."
#: ../../tutorials/publish-pypi.md:204
msgid "TestPyPI vs. PyPI"
-msgstr ""
+msgstr "TestPyPI vs. PyPI"
#: ../../tutorials/publish-pypi.md:205
msgid ""
@@ -4546,22 +5910,28 @@ msgid ""
"will call `hatch publish` to publish directly to PyPI instead of `hatch "
"publish -r test` which publishes to TestPyPI."
msgstr ""
+"Se você tem um pacote sobre o qual está confiante de que pertence ao PyPI, "
+"todas as etapas abaixo também funcionarão para você. Quando publicar usando "
+"Hatch, você chamará `hatch publish` para publicar diretamente no PyPI em "
+"vez de `hatch publish -r test`, que publica no TestPyPI."
#: ../../tutorials/publish-pypi.md:208
msgid ""
"[Open up a web browser and go to the TestPyPI "
"website](https://test.pypi.org/)."
-msgstr ""
+msgstr "[Abra um navegador web e acesse o site do TestPyPI](https://test.pypi.org/)."
#: ../../tutorials/publish-pypi.md:209
msgid ""
"[Create an account](https://test.pypi.org/account/register/) if you don't"
" already have one. Be sure to store your password in a safe place!"
msgstr ""
+"[Crie uma conta](https://test.pypi.org/account/register/) se ainda não tiver "
+"uma. Certifique-se de armazenar sua senha em um local seguro!"
#: ../../tutorials/publish-pypi.md:210
msgid "Once you have an account setup, login to it."
-msgstr ""
+msgstr "Depois de configurar uma conta, faça login."
#: ../../tutorials/publish-pypi.md:211
msgid ""
@@ -4571,20 +5941,25 @@ msgid ""
"pyosPackage, then we suggest that you add your name or GitHub username to"
" the end of the package name to ensure it's unique."
msgstr ""
+"Pesquise em [https://test.pypi.org/](https://test.pypi.org/) (e também em "
+"[https://pypi.org/](https://pypi.org/)) para garantir que o nome do package "
+"que você selecionou ainda não existe. Se você estiver usando nosso "
+"pyosPackage de teste, sugerimos adicionar seu nome ou nome de usuário do "
+"GitHub ao final do nome do pacote para garantir queseja único."
#: ../../tutorials/publish-pypi.md:213
msgid "Example: `pyosPackage_yourNameHere`."
-msgstr ""
+msgstr "Exemplo: `pyosPackage_yourNameHere`."
#: ../../tutorials/publish-pypi.md:215
msgid ""
"How to rename your Python package if the name is already taken in (test) "
"PyPI"
-msgstr ""
+msgstr "Como renomear seu pacote Python se o nome já estiver em uso no (test)PyPI"
#: ../../tutorials/publish-pypi.md:219
msgid "Required"
-msgstr ""
+msgstr "Obrigatório"
#: ../../tutorials/publish-pypi.md:221
msgid ""
@@ -4592,44 +5967,55 @@ msgid ""
" ([TestPyPI](https://test.pypi.org/), [PyPI](https://pypi.org/), [conda-"
"forge](https://conda-forge.org/packages/))"
msgstr ""
+"Pesquise nos locais de publicação para garantir que seu novo nome não "
+"esteja em uso ([TestPyPI](https://test.pypi.org/), "
+"[PyPI](https://pypi.org/), [conda-forge](https://conda-forge.org/packages/))"
#: ../../tutorials/publish-pypi.md:222
msgid ""
"Update the project name in your pyproject.toml file (e.g. `name = "
"\"pyospackage_yourNameHere\"`)"
msgstr ""
+"Atualize o nome do projeto no seu arquivo pyproject.toml (por exemplo,`name "
+"= \"pyospackage_yourNameHere\"`)"
#: ../../tutorials/publish-pypi.md:223
msgid ""
"Update the module folder name to be the same (e.g. "
"`src/pyospackage_yourNameHere`)"
msgstr ""
+"Atualize o nome da pasta do module para ser o mesmo (por exemplo, "
+"`src/pyospackage_yourNameHere`)"
#: ../../tutorials/publish-pypi.md:224
msgid "Rebuild your project (`hatch build`)"
-msgstr ""
+msgstr "Faça rebuild do seu projeto (`hatch build`)"
#: ../../tutorials/publish-pypi.md:225
msgid "Publish your package to capture the name (continue this tutorial!)"
-msgstr ""
+msgstr "Publique seu pacote para reservar o nome (continue este tutorial!)"
#: ../../tutorials/publish-pypi.md:227
msgid "Recommended"
-msgstr ""
+msgstr "Recomendado"
#: ../../tutorials/publish-pypi.md:229
msgid "Update the GitHub repository name to align with the new package name"
-msgstr ""
+msgstr "Atualize o nome do repositório GitHub para alinhar com o novo nome do pacote"
#: ../../tutorials/publish-pypi.md:230
msgid ""
"Update your local project folder to match the new package name (e.g. "
"`pyospackage_yourNameHere/src`)"
msgstr ""
+"Atualize a pasta local do projeto para corresponder ao novo nome do pacote "
+"(por exemplo, `pyospackage_yourNameHere/src`)"
#: ../../tutorials/publish-pypi.md:231
msgid "Update mentions of your repository name in other files (e.g. `README.md`)"
msgstr ""
+"Atualize menções ao nome do repositório em outros arquivos (por exemplo, "
+"`README.md`)"
#: ../../tutorials/publish-pypi.md:235
msgid ""
@@ -4637,6 +6023,9 @@ msgid ""
"bar, you can see the search for pyosPackage. The search return says there"
" were no results for pyosPackage Did you mean probpackage"
msgstr ""
+"Esta é uma captura de tela do site TestPyPI. No topo, na barra de pesquisa, "
+"você pode ver a busca por pyosPackage. O resultado da pesquisa diz que não "
+"houve resultados para pyosPackage. Você quis dizer probpackage"
#: ../../tutorials/publish-pypi.md:237
msgid ""
@@ -4644,10 +6033,13 @@ msgid ""
"package is already taken. You can do that using the search box at the top"
" of the TestPyPI website."
msgstr ""
+"Antes de tentar fazer upload para o TestPyPI, verifique se o nome do seu "
+"pacote já está em uso. Você pode fazer isso usando a caixa de busca no topo "
+"do site do TestPyPI."
#: ../../tutorials/publish-pypi.md:241
msgid "Setup 2-factor (2FA) authentication"
-msgstr ""
+msgstr "Configurar autenticação de 2 fatores (2FA)"
#: ../../tutorials/publish-pypi.md:243
msgid ""
@@ -4657,6 +6049,11 @@ msgid ""
"where someone else gains access to a password and can login to your "
"account."
msgstr ""
+"A autenticação de 2 fatores é um processo de login seguro que permite usar "
+"um dispositivo de backup ao qual somente você tem acesso para validar que a "
+"pessoa que está fazendo login é realmente você. Ela resolve o problema de "
+"phishing de senhas, em que outra pessoa obtém acesso a uma senha e consegue "
+"entrar na sua conta."
#: ../../tutorials/publish-pypi.md:246
msgid ""
@@ -4665,16 +6062,22 @@ msgid ""
"will then impact all of your users when they download and install that "
"version of the package."
msgstr ""
+"Isso importa no PyPI porque alguém poderia fazer login na sua conta e fazer "
+"upload de uma versão do seu pacote com problemas de segurança. Esses "
+"problemas afetarão todos os seus usuários quando eles baixarem e instalarem "
+"essa versão do pacote."
#: ../../tutorials/publish-pypi.md:248
msgid ""
"2-factor authentication is required for PyPI authentication as of 1 "
"January 2024."
msgstr ""
+"A autenticação de 2 fatores é obrigatória para autenticação no PyPI a "
+"partir de 1 de janeiro de 2024."
#: ../../tutorials/publish-pypi.md:252
msgid "Step 4. Create a package upload token"
-msgstr ""
+msgstr "Passo 4. Criar um token de upload do pacote"
#: ../../tutorials/publish-pypi.md:254
msgid ""
@@ -4683,10 +6086,14 @@ msgid ""
"token. (If you completed this step previously, you can reuse the tokens "
"when you upload your package again.)"
msgstr ""
+"Para fazer upload do seu pacote para o TestPyPI (ou PyPI), você precisará "
+"criar um token para a sua conta primeiro e, em seguida, criar um token "
+"específico para o pacote. (Se você já concluiu esta etapa anteriormente, "
+"pode reutilizar os tokens quando fizer upload do pacote novamente.)"
#: ../../tutorials/publish-pypi.md:256
msgid "Why create package-specific tokens?"
-msgstr ""
+msgstr "Por que criar tokens específicos para o pacote?"
#: ../../tutorials/publish-pypi.md:258
msgid ""
@@ -4697,22 +6104,28 @@ msgid ""
"specific package. This is just a safe way to set things up for you "
"particularly if you are collaborating with others on package development."
msgstr ""
+"O ideal é criar um token específico para o pacote. Quando você cria um token "
+"para toda a conta, isso permite que qualquer pessoa com acesso à conta acesse "
+"todos os seus projetos no TestPyPI (ou PyPI). Ao criar um token específico "
+"para o pacote, você limita o escopo do token apenas ao seu pacote. Essa é "
+"uma forma segura de configurar tudo, especialmente se você estiver "
+"colaborando com outras pessoas no desenvolvimento do pacote."
#: ../../tutorials/publish-pypi.md:261
msgid "Follow the steps below to create your token"
-msgstr ""
+msgstr "Siga os passos abaixo para criar seu token"
#: ../../tutorials/publish-pypi.md:263
msgid "Login to TestPyPI and go to your account settings"
-msgstr ""
+msgstr "Faça login no TestPyPI e acesse as configurações da sua conta"
#: ../../tutorials/publish-pypi.md:264
msgid "Scroll down to the **API tokens** section"
-msgstr ""
+msgstr "Role até a seção **API tokens**"
#: ../../tutorials/publish-pypi.md:265
msgid "Click on the **Add API Token** button"
-msgstr ""
+msgstr "Clique no botão **Add API Token**"
#: ../../tutorials/publish-pypi.md:266
msgid ""
@@ -4720,36 +6133,43 @@ msgid ""
"OR if you have other packages on TestPyPI but are uploading a new "
"package, you will need to create an account-wide token."
msgstr ""
+"Se você é novo no TestPyPI e ainda não tem nenhum pacote lá, OU se você tem "
+"outros pacotes no TestPyPI mas está fazendo upload de um pacote novo, será "
+"necessário criar um token para toda a conta."
#: ../../tutorials/publish-pypi.md:267
msgid ""
"When you create your token, be sure to copy the token value and store it "
"in a secure place before closing that browser."
msgstr ""
+"Ao criar o token, copie o valor do token e armazene-o em um local seguro "
+"antes de fechar o navegador."
#: ../../tutorials/publish-pypi.md:269
msgid "Your token should look something like this:"
-msgstr ""
+msgstr "Seu token deve se parecer com algo assim:"
#: ../../tutorials/publish-pypi.md:271
msgid "`pypi-abunchofrandomcharactershere...`"
-msgstr ""
+msgstr "`pypi-abunchofrandomcharactershere...`"
#: ../../tutorials/publish-pypi.md:273
msgid "It should start with `pypi` followed by a dash and a bunch of characters."
msgstr ""
+"Ele deve começar com `pypi`, seguido de um hífen e uma sequência de "
+"caracteres."
#: ../../tutorials/publish-pypi.md:275
msgid "Upload to TestPyPI using Hatch"
-msgstr ""
+msgstr "Fazer upload para o TestPyPI usando Hatch"
#: ../../tutorials/publish-pypi.md:277
msgid "Once you have your token, you are ready to publish to TestPyPI."
-msgstr ""
+msgstr "Depois de ter o token, você está pronto para publicar no TestPyPI."
#: ../../tutorials/publish-pypi.md:280
msgid "Run `hatch publish -r test`"
-msgstr ""
+msgstr "Execute `hatch publish -r test`"
#: ../../tutorials/publish-pypi.md:282
msgid ""
@@ -4757,16 +6177,21 @@ msgid ""
"TestPyPI you will use `-r test`. Hatch will then ask for a username and "
"credentials."
msgstr ""
+"`-r` significa repository. Neste caso, como você está publicando no "
+"TestPyPI, usará `-r test`. O Hatch então pedirá um nome de usuário e "
+"credenciais."
#: ../../tutorials/publish-pypi.md:284
msgid ""
"Add the word `__token__` for your username. This tells TestPyPI that you "
"are using a token value rather than a username."
msgstr ""
+"Digite a palavra `__token__` como nome de usuário. Isso informa ao TestPyPI "
+"que você está usando um valor de token em vez de um nome de usuário."
#: ../../tutorials/publish-pypi.md:285
msgid "Paste your TestPyPI token value in at the `Enter your credentials` prompt:"
-msgstr ""
+msgstr "Cole o valor do seu token do TestPyPI no prompt `Enter your credentials`:"
#: ../../tutorials/publish-pypi.md:296
msgid ""
@@ -4774,16 +6199,21 @@ msgid ""
" thus have your 2 distribution files in a `dist/` directory then Hatch "
"will publish your package to TestPyPI."
msgstr ""
+"Se suas credenciais forem válidas e você já tiver executado `hatch build` "
+"e, portanto, tiver seus 2 arquivos de distribuição em um diretório `dist/`, "
+"o Hatch publicará seu pacote no TestPyPI."
#: ../../tutorials/publish-pypi.md:300
msgid ""
"Hatch also has a caching system so once you enter your credentials it "
"will remember them."
msgstr ""
+"O Hatch também tem um sistema de cache, então depois que você inserir suas "
+"credenciais, ele as lembrará."
#: ../../tutorials/publish-pypi.md:303
msgid "Install your package from TestPyPI"
-msgstr ""
+msgstr "Instalar seu pacote a partir do TestPyPI"
#: ../../tutorials/publish-pypi.md:305
msgid ""
@@ -4791,6 +6221,9 @@ msgid ""
"You can find the installation instructions on the TestPyPI landing page "
"for your newly uploaded package."
msgstr ""
+"Quando o upload do seu pacote estiver concluído, você pode "
+"instalá-lo a partir do TestPyPI. Você encontra as instruções de instalação na "
+"página inicial do TestPyPI do pacote que acabou de fazer upload."
#: ../../tutorials/publish-pypi.md:310
msgid ""
@@ -4798,6 +6231,9 @@ msgid ""
"0.1.0 at the top with the pip install instructions below. The landing "
"page of the package has information from the package's README file."
msgstr ""
+"Uma captura de tela da página do TestPyPI para pyosPackage. No topo aparece "
+"pyosPackage 0.1.0 com as instruções de instalação via pip abaixo. A página "
+"inicial do pacote exibe informações do arquivo README do pacote."
#: ../../tutorials/publish-pypi.md:312
msgid ""
@@ -4806,6 +6242,10 @@ msgid ""
" install the package from TestPyPI. You can simply copy that code and use"
" it to install your package from TestPyPI locally."
msgstr ""
+"Esta é uma página inicial de exemplo para o pyosPackage que acabou de ser "
+"enviado. Observe que no topo da página há instruções de como instalar o "
+"pacote a partir do TestPyPI. Você pode simplesmente copiar esse código e "
+"usá-lo para instalar seu pacote localmente a partir do TestPyPI."
#: ../../tutorials/publish-pypi.md:315
msgid ""
@@ -4814,10 +6254,14 @@ msgid ""
"page has information about the current package version and also "
"installation instructions as follows:"
msgstr ""
+"Como exemplo, [confira nossa página inicial do pyosPackage da pyOpenSci no "
+"TestPyPI](https://test.pypi.org/project/pyosPackage/). Observe que a página "
+"contém informações sobre a versão atual do pacote e também instruções de "
+"instalação, como segue:"
#: ../../tutorials/publish-pypi.md:319
msgid "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
-msgstr ""
+msgstr "`python -m pip install -i https://test.pypi.org/simple/ pyosPackage`"
#: ../../tutorials/publish-pypi.md:322
msgid ""
@@ -4829,32 +6273,41 @@ msgid ""
" should be to publish to PyPI once you have figured out your workflow and"
" your package is ready to deploy."
msgstr ""
+"Publicar no TestPyPI vs PyPI Embora você possa instalar a partir do "
+"TestPyPI, não é recomendado publicar no TestPyPI como forma permanentede "
+"instalar seu pacote. Na verdade, você não pode, porque o TestPyPI pode "
+"excluir contas depois de algum tempo. O TestPyPI é um lugar perfeito para "
+"aprender a publicar seu pacote e testar o processode instalação. Mas seu "
+"objetivo final deve ser publicar no PyPI depois que você tiver definido seu "
+"workflow e seu pacote estiver pronto para deploy."
#: ../../tutorials/publish-pypi.md:326
msgid "Time to install your package"
-msgstr ""
+msgstr "Hora de instalar seu pacote"
#: ../../tutorials/publish-pypi.md:328
msgid ""
"On your computer, activate the development environment that you wish to "
"install your newly published package in."
msgstr ""
+"No seu computador, ative o ambiente de desenvolvimento em que deseja "
+"instalar o pacote recém-publicado."
#: ../../tutorials/publish-pypi.md:330
msgid "Run the installation instructions for your package from TestPyPI."
-msgstr ""
+msgstr "Execute as instruções de instalação do seu pacote a partir do TestPyPI."
#: ../../tutorials/publish-pypi.md
msgid "Conda"
-msgstr ""
+msgstr "Conda"
#: ../../tutorials/publish-pypi.md
msgid "venv Mac / Linux"
-msgstr ""
+msgstr "venv Mac / Linux"
#: ../../tutorials/publish-pypi.md:354
msgid "The value of end-to-end tools like hatch, flit and poetry"
-msgstr ""
+msgstr "O valor de ferramentas ponta a ponta como hatch, flit e poetry"
#: ../../tutorials/publish-pypi.md:355
msgid ""
@@ -4863,12 +6316,18 @@ msgid ""
"tools in the ecosystem.](../package-structure-code/python-package-build-"
"tools.md)"
msgstr ""
+"Nesta lição você está usando Hatch e hatchling para criar, fazer build e "
+"publicar seu pacote Python. [Clique aqui para saber mais sobre outras "
+"ferramentas de empacotamento no "
+"ecossistema.](../package-structure-code/python-package-build-tools.md)"
#: ../../tutorials/publish-pypi.md:359
msgid ""
"teach them to setup trusted publisher for actions... in the actions "
"lesson https://pypi.org/help/#twofa"
msgstr ""
+"ensinar a configurar trusted publisher para actions... na lição de actions "
+"https://pypi.org/help/#twofa"
#: ../../tutorials/publish-pypi.md:362
msgid ""
@@ -4877,16 +6336,22 @@ msgid ""
"projects associated with that account. Alternatively, you can limit a "
"token's scope to a specific project."
msgstr ""
+"do PyPI: https://pypi.org/help/#apitoken - Você pode criar um token para "
+"toda uma conta PyPI; nesse caso, o token funcionará para todos os projetos "
+"associados a essa conta. Alternativamente, você pode limitar o escopo de um "
+"token a um projeto específico."
#: ../../tutorials/publish-pypi.md:365
msgid "Package-specific token vs trusted publisher"
-msgstr ""
+msgstr "Token específico do pacote vs trusted publisher"
#: ../../tutorials/publish-pypi.md:367
msgid ""
"For long run maintenance of your package, you have two options related to"
" PyPI publication."
msgstr ""
+"Para a manutenção de longo prazo do seu pacote, você tem duas opções "
+"relacionadas à publicação no PyPI."
#: ../../tutorials/publish-pypi.md:370
msgid ""
@@ -4894,6 +6359,9 @@ msgid ""
"your package (manually) to PyPI. This is a great option if you don't wish"
" to automate your PyPI publication workflow."
msgstr ""
+"Você pode criar um token específico do pacote que usará para publicar seu "
+"pacote (manualmente) no PyPI. Essa é uma ótima opção se você não quiser "
+"automatizar seu workflow de publicação no PyPI."
#: ../../tutorials/publish-pypi.md:371
msgid ""
@@ -4904,10 +6372,17 @@ msgid ""
"GitHub Actions that publishes your package when you make a release. You "
"can then create a \"trusted publisher\" workflow on PyPI."
msgstr ""
+"Você também pode criar um workflow de publicação automatizado no GitHub "
+"usando GitHub Actions. Essa é uma ótima forma de facilitar o processo de "
+"publicação e também suporta uma equipe de mantenedores em crescimento. "
+"Nesse caso, sugerimos que você não se preocupe com o token e, em vez disso, "
+"configure um GitHub Actions específico que publique seu pacote quando você "
+"fizer um release. Você pode então criar um workflow de \"trusted publisher\" "
+"no PyPI."
#: ../../tutorials/publish-pypi.md:373
msgid "Trusted Publishing"
-msgstr ""
+msgstr "Trusted Publishing"
#: ../../tutorials/publish-pypi.md:376
msgid ""
@@ -4915,6 +6390,9 @@ msgid ""
"recommend the _Trusted Publishing_ approach as it also confers "
"significant security and usability benefits."
msgstr ""
+"Embora seja possível publicar a partir do GitHub Actions usando tokens, "
+"recomendamos a abordagem _Trusted Publishing_, pois ela também oferece "
+"benefícios significativos de segurança e usabilidade."
#: ../../tutorials/publish-pypi.md:378
msgid ""
@@ -4922,6 +6400,9 @@ msgid ""
"longer need to manually create API tokens on PyPI and store them in the "
"GitHub release workflow."
msgstr ""
+"No aspecto de usabilidade, quando o Trusted Publishing está habilitado, os "
+"usuários não precisam mais criar manualmente API tokensno PyPI e "
+"armazená-los no workflow de release do GitHub."
#: ../../tutorials/publish-pypi.md:380
msgid ""
@@ -4932,22 +6413,35 @@ msgid ""
"compromise and rotate the credential. Trusted Publishing avoids this "
"problem by minting very short lived tokens which expire automatically."
msgstr ""
+"No aspecto de segurança, o Trusted Publishing reduz um risco relacionado ao "
+"fato de o API token ser de longa duração: com API tokens, assim que um "
+"atacante obtém acesso a ele, pode publicar muitos packages e versões em seu "
+"nome (dependendo do escopo do token), até que você descubra o "
+"comprometimento do token e rotacione a credencial. O Trusted Publishing "
+"evita esse problema ao gerar tokens de curta duração que expiram "
+"automaticamente."
#: ../../tutorials/publish-pypi.md:382
msgid ""
"For these benefits, it is recommended that users use _only_ the GitHub "
"Actions release workflow to publish packages."
msgstr ""
+"Por esses benefícios, recomenda-se que os usuários usem _somente_ o "
+"workflow de release do GitHub Actions para publicar pacotes."
#: ../../tutorials/publish-pypi.md:385
msgid ""
"You will learn how to create the automated trusted publisher workflow in "
"a followup lesson."
msgstr ""
+"Você aprenderá a criar o workflow automatizado de trusted publisher em uma "
+"lição seguinte."
#: ../../tutorials/publish-pypi.md:387
msgid "OPTIONAL: If you want to use a manual token-based publication workflow"
msgstr ""
+"OPCIONAL: Se você quiser usar um workflow de publicação manual baseado em "
+"token"
#: ../../tutorials/publish-pypi.md:389
msgid ""
@@ -4955,46 +6449,51 @@ msgid ""
"recommend going through the above steps again to create a token specific "
"to your new package."
msgstr ""
+"Se você planeja usar seu token regularmente para publicar no PyPI, "
+"recomendamos fortemente repetir os passos acima para criar um token "
+"específico para o seu novo pacote."
#: ../../tutorials/publish-pypi.md:392
msgid "To do this:"
-msgstr ""
+msgstr "Para fazer isso:"
#: ../../tutorials/publish-pypi.md:393
msgid "Go to TestPyPI."
-msgstr ""
+msgstr "Acesse o TestPyPI."
#: ../../tutorials/publish-pypi.md:394
msgid "Navigate to the \"Your Projects\" section of your account"
-msgstr ""
+msgstr "Navegue até a seção \"Your Projects\" da sua conta"
#: ../../tutorials/publish-pypi.md:395
msgid ""
"Click on the manage button for the project that you wish to add a token "
"for"
-msgstr ""
+msgstr "Clique no botão manage do projeto para o qual deseja adicionar um token"
#: ../../tutorials/publish-pypi.md:396
msgid "Go to settings"
-msgstr ""
+msgstr "Acesse settings"
#: ../../tutorials/publish-pypi.md:397
msgid "Click on \"Create a token for your-package-name-here\""
-msgstr ""
+msgstr "Clique em \"Create a token for your-pacote-name-here\""
#: ../../tutorials/publish-pypi.md:398
msgid ""
"Create the token and follow the steps above publish your package using "
"the repository specific token."
msgstr ""
+"Crie o token e siga os passos acima para publicar seu pacote usando o token "
+"específico do repository."
#: ../../tutorials/publish-pypi.md:400
msgid "And you're all done!"
-msgstr ""
+msgstr "E pronto!"
#: ../../tutorials/publish-pypi.md:402
msgid "Trusted Publishing instead of token-based publication"
-msgstr ""
+msgstr "Trusted Publishing em vez de publicação baseada em token"
#: ../../tutorials/publish-pypi.md:405
msgid ""
@@ -5003,10 +6502,14 @@ msgid ""
"triggered. This solves all the security and usability issues associated "
"with storing credentials in files/GitHub secrets."
msgstr ""
+"O Trusted Publishing gerará tokens de curta duração, com escopo no projeto, "
+"sob demanda, somente quando um workflow de release específico for acionado. "
+"Isso resolve todos os problemas de segurança e usabilidade associados ao "
+"armazenamento de credenciais em arquivos/secrets do GitHub."
#: ../../tutorials/publish-pypi.md:411
msgid "You have published your package to TestPyPI!"
-msgstr ""
+msgstr "Você publicou seu pacote no TestPyPI!"
#: ../../tutorials/publish-pypi.md:413
msgid ""
@@ -5015,6 +6518,9 @@ msgid ""
"real PyPI, then you can follow the same steps (with the differences noted"
" above) to publish it on PyPI."
msgstr ""
+"Parabéns. Você publicou com sucesso seu pacote no TestPyPI. Se você tem um "
+"pacote pronto para uso no mundo real no PyPI de verdade, pode seguir os "
+"mesmos passos (com as diferenças mencionadas acima) para publicá-lo no PyPI."
#: ../../tutorials/publish-pypi.md:415
msgid ""
@@ -5022,18 +6528,21 @@ msgid ""
"conda-forge ecosystem using the [grayskull](https://conda-"
"forge.org/blog/posts/2020-03-05-grayskull/) tool."
msgstr ""
+"Depois de publicar no PyPI, você pode adicionar facilmente seu pacote ao "
+"ecossistema conda-forge usando a ferramenta "
+"[grayskull](https://conda-forge.org/blog/posts/2020-03-05-grayskull/)."
#: ../../tutorials/publish-pypi.md:417
msgid "You will learn how to do that in the next lesson."
-msgstr ""
+msgstr "Você aprenderá a fazer isso na próxima lição."
#: ../../tutorials/publish-pypi.md:421
msgid "https://docs.python.org/3/library/venv.html"
-msgstr ""
+msgstr "https://docs.python.org/3/library/venv.html"
#: ../../tutorials/pyproject-toml.md:6
msgid "Make your Python package PyPI ready - pyproject.toml"
-msgstr ""
+msgstr "Deixe seu pacote Python pronto para o PyPI - pyproject.toml"
#: ../../tutorials/pyproject-toml.md:8
msgid ""
@@ -5042,26 +6551,30 @@ msgid ""
" installable. You then learned how to publish a bare minimum version of "
"your package to [PyPI](publish-pypi)."
msgstr ""
+"Na [lição de código instalável](create-python-package), você aprendeu a "
+"adicionar as informações mínimas necessárias a um arquivo `pyproject.toml` "
+"para torná-lo instalável. Em seguida, aprendeu a publicar uma versão mínima "
+"do seu pacote no [PyPI](publish-pypi)."
#: ../../tutorials/pyproject-toml.md:13
msgid "Following that you learned how to add a:"
-msgstr ""
+msgstr "Depois disso, você aprendeu a adicionar um:"
#: ../../tutorials/pyproject-toml.md:14
msgid "[README.md](add-readme)"
-msgstr ""
+msgstr "[README.md](add-readme)"
#: ../../tutorials/pyproject-toml.md:15
msgid "[LICENSE](add-license-coc) and"
-msgstr ""
+msgstr "[LICENSE](add-license-coc) e"
#: ../../tutorials/pyproject-toml.md:16
msgid "[CODE_OF_CONDUCT](add-coc)"
-msgstr ""
+msgstr "[CODE_OF_CONDUCT](add-coc)"
#: ../../tutorials/pyproject-toml.md:18
msgid "to the root of your project directory."
-msgstr ""
+msgstr "na raiz do diretório do seu projeto."
#: ../../tutorials/pyproject-toml.md:20
msgid ""
@@ -5071,18 +6584,27 @@ msgid ""
"metadata to your `pyproject.toml` file. This lesson will guide you "
"through the process."
msgstr ""
+"Para aumentar a visibilidade do seu pacote no PyPI e fornecer mais "
+"informações sobre sua compatibilidade com versões do Python, status "
+"dedesenvolvimento do projeto e mantenedores, você deve adicionar metadata "
+"adicional ao seu arquivo `pyproject.toml`. Esta lição guiará você pelo "
+"processo."
#: ../../tutorials/pyproject-toml.md:32
msgid ""
"More about the `pyproject.toml` file and how it's used to store different"
" types of metadata about your package"
msgstr ""
+"Mais sobre o arquivo `pyproject.toml` e como ele é usado para armazenar "
+"diferentes tipos de metadata sobre o seu pacote"
#: ../../tutorials/pyproject-toml.md:33
msgid ""
"How to declare information (metadata) about your project to help users "
"find and understand it on PyPI."
msgstr ""
+"Como declarar informações (metadata) sobre o seu projeto para ajudar os "
+"usuários a encontrá-lo e entendê-lo no PyPI."
#: ../../tutorials/pyproject-toml.md:35
msgid ""
@@ -5090,42 +6612,49 @@ msgid ""
"this page. ](../package-structure-code/pyproject-toml-python-package-"
"metadata.md)"
msgstr ""
+"Se você quiser saber mais sobre o formato `pyproject.toml`, [confira esta "
+"página.](../package-structure-code/pyproject-toml-python-package-metadata.md"
+")"
#: ../../tutorials/pyproject-toml.md
msgid "Click for lesson takeaways"
-msgstr ""
+msgstr "Clique para ver os principais pontos da lição"
#: ../../tutorials/pyproject-toml.md:42
msgid "When creating your pyproject.toml file, consider the following:"
-msgstr ""
+msgstr "Ao criar seu arquivo pyproject.toml, considere o seguinte:"
#: ../../tutorials/pyproject-toml.md:44
msgid ""
"There are only two required metadata tables that you need to install and "
"publish your Python package:"
msgstr ""
+"Há apenas duas tabelas de metadata obrigatórias para instalar e publicar "
+"seu pacote Python:"
#: ../../tutorials/pyproject-toml.md:45
msgid "**[build-system]**"
-msgstr ""
+msgstr "**[build-system]**"
#: ../../tutorials/pyproject-toml.md:46
msgid "**[project]**."
-msgstr ""
+msgstr "**[project]**."
#: ../../tutorials/pyproject-toml.md:47
msgid ""
"The **[project]** table stores your package's metadata. Within the "
"**[project]** table, There are only two _required_ fields:"
msgstr ""
+"A tabela **[project]** armazena a metadata do seu pacote. Dentro da tabela "
+"**[project]**, há apenas dois campos _obrigatórios_:"
#: ../../tutorials/pyproject-toml.md:48
msgid "**name=**"
-msgstr ""
+msgstr "**name=**"
#: ../../tutorials/pyproject-toml.md:49
msgid "**version=**"
-msgstr ""
+msgstr "**version=**"
#: ../../tutorials/pyproject-toml.md:50
msgid ""
@@ -5133,6 +6662,9 @@ msgid ""
"easier for users to find your project on PyPI. And it will also make it "
"easier for installers to understand how to install your package."
msgstr ""
+"Você deve adicionar mais metadata à tabela `[project]`, pois isso "
+"facilitará para os usuários encontrarem seu projeto no PyPI. E também "
+"facilitará para os instaladores entenderem como instalar seu pacote."
#: ../../tutorials/pyproject-toml.md:51
msgid ""
@@ -5141,6 +6673,10 @@ msgid ""
"page](https://PyPI.org/classifiers/). An invalid value here will raise an"
" error when you build and publish your package on PyPI."
msgstr ""
+"Ao adicionar classifiers à tabela **[project]**, use apenas valores válidos "
+"da [página de classifiers do PyPI](https://PyPI.org/classifiers/). Um valor "
+"inválido aqui gerará um erro quando você fizer build e publicar seu pacote "
+"no PyPI."
#: ../../tutorials/pyproject-toml.md:52
msgid ""
@@ -5148,28 +6684,37 @@ msgid ""
"However, fields need to be placed within the correct tables. For example "
"`requires =` always need to be in the **[build-system]** table."
msgstr ""
+"Não há uma ordem específica para as tabelas no arquivo `pyproject.toml`. No "
+"entanto, os campos precisam estar nas tabelas corretas. Por exemplo, "
+"`requires =` sempre precisa estar na tabela **[build-system]**."
#: ../../tutorials/pyproject-toml.md:53
msgid ""
"We suggest that you include your **[build-system]** table at the top of "
"your `pyproject.toml` file."
msgstr ""
+"Sugerimos que você inclua a tabela **[build-system]** no topo do seu "
+"arquivo `pyproject.toml`."
#: ../../tutorials/pyproject-toml.md:58
msgid ""
"The `pyproject.toml` file is a human and machine-readable file that "
"serves as the primary configuration file for your Python package."
msgstr ""
+"O arquivo `pyproject.toml` é um arquivo legível por humanos e por máquinas "
+"que serve como arquivo de configuração principal do seu pacote Python."
#: ../../tutorials/pyproject-toml.md:63
msgid ""
"[Building your package](build-package) is the step that created the "
"distribution files that are required for you to publish to PyPI."
msgstr ""
+"[Fazer build do seu pacote](build-package) é a etapa que criou os arquivos "
+"de distribuição necessários para você publicar no PyPI."
#: ../../tutorials/pyproject-toml.md:67
msgid "About the .toml format"
-msgstr ""
+msgstr "Sobre o formato .toml"
#: ../../tutorials/pyproject-toml.md:69
#, python-brace-format
@@ -5179,26 +6724,34 @@ msgid ""
" the **pyproject.toml** file contains a `[table identifier]`. The TOML "
"format can be compared to other structured formats such as `.json`."
msgstr ""
+"O arquivo **pyproject.toml** é escrito no formato {term}`TOML`. TOML é uma "
+"estrutura fácil de ler baseada em pares chave/valor. Cada seção no arquivo "
+"**pyproject.toml** contém um `[identificador da tabela]`. O formato TOML "
+"pode ser comparado a outros formatos estruturados, como `.json`."
#: ../../tutorials/pyproject-toml.md:74
msgid ""
"Below you can see the `[build-system]` table. Within that table there are"
" two required key/value pairs."
msgstr ""
+"Abaixo você pode ver a tabela `[build-system]`. Dentro dessa tabela há dois "
+"pares chave/valor obrigatórios."
#: ../../tutorials/pyproject-toml.md:77
msgid ""
"`requires =` is the key and the value is `[\"hatchling\"]` within the "
"`[build-system]` array specified by square brackets `[]`."
msgstr ""
+"`requires =` é a chave e o valor é `[\"hatchling\"]` dentro do array "
+"`[build-system]` especificado por colchetes `[]`."
#: ../../tutorials/pyproject-toml.md:87
msgid "What is the pyproject.toml used for?"
-msgstr ""
+msgstr "Para que serve o pyproject.toml?"
#: ../../tutorials/pyproject-toml.md:89
msgid "The pyproject.toml file tells your build tool:"
-msgstr ""
+msgstr "O arquivo pyproject.toml informa à sua ferramenta de build:"
#: ../../tutorials/pyproject-toml.md:91
#, python-brace-format
@@ -5207,51 +6760,61 @@ msgid ""
"{term}`Hatchling` in this tutorial but there are [many others to choose "
"from](/package-structure-code/python-package-build-tools))."
msgstr ""
+"Qual {term}`backend de construção ` usar para fazer build do "
+"seu pacote (neste tutorial estamos usando {term}`Hatchling`, mas há [muitas "
+"outras opções](/package-structure-code/python-package-build-tools))."
#: ../../tutorials/pyproject-toml.md:94
msgid "How and where to retrieve your package's version:"
-msgstr ""
+msgstr "Como e onde recuperar a versão do seu pacote:"
#: ../../tutorials/pyproject-toml.md:95
msgid "**statically** where you declare the version `version = \"0.1.0\"` or"
-msgstr ""
+msgstr "**estaticamente**, onde você declara a versão `version = \"0.1.0\"` ou"
#: ../../tutorials/pyproject-toml.md:96
msgid ""
"**dynamically** where the tool looks to the most recent tag in your "
"history to determine the current version."
msgstr ""
+"**dinamicamente**, quando a ferramenta consulta a tag mais recente no seu "
+"histórico para determinar a versão atual."
#: ../../tutorials/pyproject-toml.md:97
#, python-brace-format
msgid "What {term}`Dependencies` your package needs"
-msgstr ""
+msgstr "Quais {term}`dependências ` o seu pacote precisa"
#: ../../tutorials/pyproject-toml.md:98
msgid "What versions of Python your package supports (important for your users)."
msgstr ""
+"Quais versões do Python o seu pacote suporta (importante para seus "
+"usuários)."
#: ../../tutorials/pyproject-toml.md:100
msgid ""
"The `pyproject.toml` file also makes it easy for anyone browsing your "
"GitHub repository to quickly understand your package's structure such as:"
msgstr ""
+"O arquivo `pyproject.toml` também facilita para qualquer pessoa que navegue "
+"no seu repository GitHub entender rapidamente a estrutura do seu pacote, "
+"como:"
#: ../../tutorials/pyproject-toml.md:103
msgid "How your package is built,"
-msgstr ""
+msgstr "Como seu pacote é construído,"
#: ../../tutorials/pyproject-toml.md:104
msgid "What Python versions and operating systems it supports"
-msgstr ""
+msgstr "Quais versões do Python e sistemas operacionais ele suporta"
#: ../../tutorials/pyproject-toml.md:105
msgid "What it does,"
-msgstr ""
+msgstr "O que ele faz,"
#: ../../tutorials/pyproject-toml.md:106
msgid "Who maintains it"
-msgstr ""
+msgstr "Quem o mantém"
#: ../../tutorials/pyproject-toml.md:108
msgid ""
@@ -5259,6 +6822,9 @@ msgid ""
"such as static type checkers (e.g. mypy) and code formatters/linters "
"(e.g. black, ruff)."
msgstr ""
+"Por fim, o arquivo pyproject.toml também é frequentemente usado para "
+"configurar ferramentas como verificadores estáticos de tipos (por exemplo, "
+"mypy) e formatadores/linters de código (por exemplo, black, ruff)."
#: ../../tutorials/pyproject-toml.md:111
msgid ""
@@ -5267,6 +6833,10 @@ msgid ""
"/packaging-projects/#choosing-a-build-backend) if you are interested in "
"setting build configurations for other tools."
msgstr ""
+"Confira a [documentação da "
+"PyPA](https://packaging.python.org/en/latest/tutorials/packaging-projects/#c"
+"hoosing-a-build-backend) se você estiver interessado em definir configurações "
+"de build para outras ferramentas."
#: ../../tutorials/pyproject-toml.md:113
msgid ""
@@ -5276,10 +6846,15 @@ msgid ""
"hatchling and hatch as our tool of choice for this tutorial as it adheres"
" to PyPA rules and guidelines."
msgstr ""
+"Observe que algumas ferramentas de build podem divergir na forma como "
+"armazenam metadata do projeto. Portanto, você pode querer consultar a "
+"documentação delas se decidir usar uma ferramenta diferente de Hatch "
+"e hatchling. Selecionamos hatchling e hatch como nossa ferramenta de escolha "
+"neste tutorial porque ela segue as regras e diretrizes da PyPA."
#: ../../tutorials/pyproject-toml.md:117
msgid "How is pyproject.toml metadata used?"
-msgstr ""
+msgstr "Como a metadata do pyproject.toml é usada?"
#: ../../tutorials/pyproject-toml.md:119
msgid ""
@@ -5289,6 +6864,11 @@ msgid ""
" your package's PyPI landing page and help users filter through the tens "
"of thousands of packages published there."
msgstr ""
+"O arquivo pyproject.toml é o arquivo que sua ferramenta de build usa para "
+"preencher um `METADATA` incluído nos arquivos de distribuição do Python que "
+"são publicados no PyPI. Esse arquivo `METADATA` é então usado pelo PyPI "
+"para preencher a página inicial do seu pacote no PyPI e ajudar os usuários a "
+"filtrar entre as dezenas de milhares de pacotes publicados lá."
#: ../../tutorials/pyproject-toml.md:122
msgid ""
@@ -5298,6 +6878,11 @@ msgid ""
"language, operating system, programming language and topic. Below each of"
" those sections are various classifier options.\" width=\"300px\">"
msgstr ""
+"Imagem mostrando a barra lateral esquerda do PyPI para o pacote xclim. A "
+"seção no topo diz Classifier. Abaixo há uma lista de itens "
+"incluindo Development status, intended audience, License, natural language, "
+"operating system, programming language e topic. Abaixo de cada uma dessas "
+"seções estão várias opções de classifiers.\" width=\"300px\">"
#: ../../tutorials/pyproject-toml.md:127
msgid ""
@@ -5307,40 +6892,51 @@ msgid ""
"classifiers also allow users to sort through packages by version of "
"python they support, categories and more."
msgstr ""
+"Quando você adiciona a seção de classifiers ao seu pyproject.toml e seu "
+"pacote é construído, a ferramenta de build organiza a metadata em um formato "
+"que o PyPI consegue entender e representar na página inicial do seu pacote "
+"no PyPI. Esses classifiers também permitem que os usuários filtrem pacotes "
+"por versão do Python que suportam, categorias e mais."
#: ../../tutorials/pyproject-toml.md:133
msgid "A more in-depth overview of pyproject.toml files"
-msgstr ""
+msgstr "Uma visão geral mais aprofundada dos arquivos pyproject.toml"
#: ../../tutorials/pyproject-toml.md:135
msgid ""
"[Our guidebook page has a more in depth overview of this file"
"](../package-structure-code/pyproject-toml-python-package-metadata/)"
msgstr ""
+"[Nossa página do guia tem uma visão geral mais aprofundada deste "
+"arquivo](../package-structure-code/pyproject-toml-python-package-metadata/)"
#: ../../tutorials/pyproject-toml.md:138
msgid "How to update your pyproject.toml file"
-msgstr ""
+msgstr "Como atualizar seu arquivo pyproject.toml"
#: ../../tutorials/pyproject-toml.md:140
msgid ""
"In the last lesson, you created a bare-bones pyproject.toml file that "
"contained the core elements needed to build your package:"
msgstr ""
+"Na lição anterior, você criou um arquivo pyproject.toml básico que continha "
+"os elementos principais necessários para fazer build do seu pacote:"
#: ../../tutorials/pyproject-toml.md:144
msgid ""
"A `[build-system]` table where you defined your project's backend build "
"tool (`hatchling`)"
msgstr ""
+"Uma tabela `[build-system]` onde você definiu a ferramenta de build backend "
+"do projeto (`hatchling`)"
#: ../../tutorials/pyproject-toml.md:145
msgid "A `[project]` table where you defined your project's version and name."
-msgstr ""
+msgstr "Uma tabela `[project]` onde você definiu a versão e o nome do projeto."
#: ../../tutorials/pyproject-toml.md:147
msgid "The `pyproject.toml` file that you created, looked like this:"
-msgstr ""
+msgstr "O arquivo `pyproject.toml` que você criou ficou assim:"
#: ../../tutorials/pyproject-toml.md:159
msgid ""
@@ -5350,28 +6946,35 @@ msgid ""
"it again. These metadata fields will only be updated periodically when "
"you do something such as:"
msgstr ""
+"Seu próximo passo é adicionar campos de metadata recomendados adicionais "
+"que ajudarão os usuários a encontrar seu pacote no PyPI e também "
+"descreverão melhor o escopo do seu pacote. Depois de adicionar essa "
+"metadata, você não precisará fazer isso novamente. Esses campos de metadata "
+"só serão atualizados periodicamente quando você fizer algo como:"
#: ../../tutorials/pyproject-toml.md:162
msgid "drop a package dependency"
-msgstr ""
+msgstr "remover uma dependência do pacote"
#: ../../tutorials/pyproject-toml.md:163
msgid "modify what Python versions your package supports."
-msgstr ""
+msgstr "modificar quais versões do Python o seu pacote suporta."
#: ../../tutorials/pyproject-toml.md:165
msgid "More on hatchling"
-msgstr ""
+msgstr "Mais sobre hatchling"
#: ../../tutorials/pyproject-toml.md:168
msgid ""
"The documentation for the hatchling back-end is "
"[here](https://hatch.pypa.io/latest/config/metadata/)"
msgstr ""
+"A documentação do back-end hatchling está "
+"[aqui](https://hatch.pypa.io/latest/config/metadata/)"
#: ../../tutorials/pyproject-toml.md:171
msgid "Step 1: Add Author, maintainer and project description"
-msgstr ""
+msgstr "Passo 1: Adicionar autor, mantenedor e descrição do projeto"
#: ../../tutorials/pyproject-toml.md:173
msgid ""
@@ -5379,10 +6982,13 @@ msgid ""
"you should have a pyproject.toml file with a project name and a version "
"in the `[project]` table."
msgstr ""
+"Depois de concluir o [tutorial de código "
+"instalável](create-python-package), você deve ter um arquivo pyproject.toml "
+"com um nome de projeto e uma versão na tabela `[project]`."
#: ../../tutorials/pyproject-toml.md:181
msgid "Add the following to your table:"
-msgstr ""
+msgstr "Adicione o seguinte à sua tabela:"
#: ../../tutorials/pyproject-toml.md:183
msgid ""
@@ -5390,28 +6996,32 @@ msgid ""
"should briefly describe the goal of your package using non technical "
"terms if as all possible!"
msgstr ""
+"Uma **description** do seu pacote. Deve ser uma única linha e descrever "
+"brevemente o objetivo do seu pacote usando termos não técnicos, se possível!"
#: ../../tutorials/pyproject-toml.md:184
msgid "package **authors**"
-msgstr ""
+msgstr "**authors** do pacote"
#: ../../tutorials/pyproject-toml.md:185
msgid "package **maintainers**"
-msgstr ""
+msgstr "**maintainers** do pacote"
#: ../../tutorials/pyproject-toml.md:187
msgid "The `description` is just a string like the other values you've set:"
-msgstr ""
+msgstr "A `description` é apenas uma string como os outros valores que você definiu:"
#: ../../tutorials/pyproject-toml.md:198
msgid ""
"When you add authors and maintainers you need to use a format that will "
"look like a Python list with a dictionary within it:"
msgstr ""
+"Ao adicionar authors e maintainers, você precisa usar um formato que "
+"parecerá uma lista Python com um dicionário dentro dela:"
#: ../../tutorials/pyproject-toml.md:212
msgid "Author names & emails"
-msgstr ""
+msgstr "Nomes e e-mails dos autores"
#: ../../tutorials/pyproject-toml.md:216
msgid ""
@@ -5419,16 +7029,22 @@ msgid ""
"the pyproject.toml. If you are missing the email for one or more authors "
"or maintainers, like this:"
msgstr ""
+"Há uma peculiaridade no PyPI para autores que têm nomes, mas não e-mails, "
+"no pyproject.toml. Se estiver faltando o e-mail de um ou mais autores ou "
+"mantenedores, como neste caso:"
#: ../../tutorials/pyproject-toml.md:225
msgid ""
"Then we suggest that you only provide names in your list of names to "
"ensure that everything renders properly on your PyPI page - like this:"
msgstr ""
+"Então sugerimos que você forneça apenas nomes na sua lista de nomes para "
+"garantir que tudo seja renderizado corretamente na sua página do PyPI — "
+"assim:"
#: ../../tutorials/pyproject-toml.md:234
msgid "don't have emails for everyone, we suggest that you only add names."
-msgstr ""
+msgstr "não tiver e-mails para todos, sugerimos que você adicione apenas nomes."
#: ../../tutorials/pyproject-toml.md:237
msgid ""
@@ -5436,30 +7052,35 @@ msgid ""
"OK if you only have 1 author and the same author is also maintainer of "
"your package:"
msgstr ""
+"Seu arquivo `pyproject.toml` agora deve se parecer com o exemplo abaixo. "
+"Está tudo bem se você tiver apenas 1 autor e o mesmo autor também for "
+"mantenedor do seu pacote:"
#: ../../tutorials/pyproject-toml.md
msgid ""
"Learn More: What's the difference between author and maintainer in open "
"source?"
-msgstr ""
+msgstr "Saiba mais: Qual é a diferença entre author e maintainer em open source?"
#: ../../tutorials/pyproject-toml.md:265
msgid ""
"When adding maintainers and authors, you may want to think about the "
"difference between the two."
msgstr ""
+"Ao adicionar maintainers e authors, você pode querer pensar na diferença "
+"entre os dois."
#: ../../tutorials/pyproject-toml.md:267
msgid "Authors generally include people who:"
-msgstr ""
+msgstr "Authors geralmente incluem pessoas que:"
#: ../../tutorials/pyproject-toml.md:268
msgid "originally created / designed developed the package and"
-msgstr ""
+msgstr "criaram / projetaram originalmente o pacote e"
#: ../../tutorials/pyproject-toml.md:269
msgid "people who add new functionality to the package."
-msgstr ""
+msgstr "pessoas que adicionam nova funcionalidade ao pacote."
#: ../../tutorials/pyproject-toml.md:271
msgid ""
@@ -5467,6 +7088,9 @@ msgid ""
"on the project. It is often the case that there is overlap in authors and"
" maintainers. As such these lists may be similar or the same."
msgstr ""
+"Já os maintainers são as pessoas que estão atualmente trabalhando "
+"ativamente no projeto. Muitas vezes há sobreposição entre authors e "
+"maintainers. Por isso, essas listas podem ser semelhantes ou iguais."
#: ../../tutorials/pyproject-toml.md:273
msgid ""
@@ -5475,12 +7099,18 @@ msgid ""
"maintainer to move on to other things. This person may continue to be "
"considered an author but no longer actively maintains the package."
msgstr ""
+"Um bom exemplo de quando as listas podem divergir é quando um autor inicial "
+"desenvolveu o pacote e depois deixou de ser mantenedor para seguir para "
+"outras coisas. Essa pessoa pode continuar sendo considerada author, mas não "
+"mantém mais ativamente o pacote."
#: ../../tutorials/pyproject-toml.md:275
msgid ""
"It is important to note that there are many ways to define author vs "
"maintainer and we don't prescribe a single approach in this tutorial."
msgstr ""
+"É importante notar que há muitas formas de definir author vs maintainer e "
+"não prescrevemos uma abordagem única neste tutorial."
#: ../../tutorials/pyproject-toml.md:277
msgid ""
@@ -5488,10 +7118,13 @@ msgid ""
"who you want to have listed as authors and maintainers on your PyPI "
"landing page."
msgstr ""
+"No entanto, incentivamos você a considerar cuidadosamente, para publicação "
+"no PyPI, quem você quer listar como authors e maintainers na página inicial "
+"do seu pacote no PyPI."
#: ../../tutorials/pyproject-toml.md:281
msgid "Step 2: Add README and license"
-msgstr ""
+msgstr "Passo 2: Adicionar README e license"
#: ../../tutorials/pyproject-toml.md:283
msgid ""
@@ -5501,6 +7134,11 @@ msgid ""
"file, and add a short code indicating your choice of LICENSE following "
"the example below."
msgstr ""
+"Nas lições anteriores, você adicionou tanto um arquivo "
+"[README.md](add-readme) quanto um [LICENSE](add-license-coc) ao repository "
+"do seu pacote. Depois de ter esses arquivos, você pode referenciar o README "
+"a partir do seu arquivo pyproject.toml e adicionar um código curto "
+"indicando sua escolha de LICENSE seguindo o exemplo abaixo."
#: ../../tutorials/pyproject-toml.md:312
msgid ""
@@ -5512,12 +7150,22 @@ msgid ""
"the [SPDX specification](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-"
"license-expressions/), either version 2.2 or a later compatible version."
msgstr ""
+"A entrada license no seu arquivo pyproject.toml deve usar a [sintaxe de "
+"expressão de "
+"license](https://packaging.python.org/en/latest/specifications/license-expre"
+"ssion/). Muitas vezes é um nome curto (sem espaços) para a license, como \"MIT\", "
+"\"BSD-3-Clause\" ou \"Apache-2.0\". Mais precisamente, deve ser uma expressão "
+"de license SPDX válida, conforme documentado na [especificação "
+"SPDX](https://spdx.github.io/spdx-spec/v2.2.2/SPDX-license-expressions/),seja"
+" a versão 2.2 ou uma versão compatível posterior."
#: ../../tutorials/pyproject-toml.md:314
msgid ""
"If you have multiple licenses, or a custom license, you can also express "
"these using a license expression."
msgstr ""
+"Se você tiver múltiplas licenses ou uma license personalizada, também pode "
+"expressá-las usando uma expressão de license."
#: ../../tutorials/pyproject-toml.md:316
msgid ""
@@ -5526,10 +7174,14 @@ msgid ""
"[`license-files`](https://packaging.python.org/en/latest/guides/writing-"
"pyproject-toml/#license-files) entry, but this is not required."
msgstr ""
+"Se quiser distribuir arquivos de license ou outros arquivos com informações "
+"legais junto com seu pacote, pode incluí-los usando a entrada "
+"[`license-files`](https://packaging.python.org/en/latest/guides/writing-pypr"
+"oject-toml/#license-files), mas isso não é obrigatório."
#: ../../tutorials/pyproject-toml.md:318
msgid "Step 3: Specify Python version with `requires-python`"
-msgstr ""
+msgstr "Passo 3: Especificar a versão do Python com `requires-python`"
#: ../../tutorials/pyproject-toml.md:320
msgid ""
@@ -5544,10 +7196,20 @@ msgid ""
"an upper bound is set to indicate which future Python versions, if any, "
"will be supported."
msgstr ""
+"Adicione o campo `requires-python` à tabela `[project]` do seu "
+"`pyproject.toml`. O campo `requires-python` ajuda o pip a identificar quais "
+"versões do Python o seu pacote suporta. Ele é definido como um único valor. "
+"A [especificação de "
+"empacotamento](https://packaging.python.org/en/latest/specifications/core-me"
+"tadata/#core-metadata-requires-python)define `requires-python` como uma string "
+"que usa especificadores de versão. A maioria dos projetos especifica a "
+"versão mais antiga do Python suportada pelo pacote. Em alguns casos "
+"avançados, um limite superior é definido para indicar quais versões futuras "
+"do Python, se houver, serão suportadas."
#: ../../tutorials/pyproject-toml.md:325
msgid "But how do I figure out which Python versions I should support?"
-msgstr ""
+msgstr "Mas como descubro quais versões do Python devo suportar?"
#: ../../tutorials/pyproject-toml.md:327
msgid ""
@@ -5557,6 +7219,11 @@ msgid ""
"through several different phases that are explained in [PEP "
"602](https://peps.python.org/pep-0602/)."
msgstr ""
+"Boa pergunta. O guia do desenvolvedor Python fornece uma [página de "
+"status](https://devguide.python.org/versions/) (e uma visualização útil) "
+"que explica o status de cada release do Python. Os releases do Python "
+"passam por várias fases diferentes, explicadas no [PEP "
+"602](https://peps.python.org/pep-0602/)."
#: ../../tutorials/pyproject-toml.md:329
msgid ""
@@ -5564,6 +7231,9 @@ msgid ""
"phase. If your Python release is in the **security** phase, we recommend "
"migrating to a newer version of Python."
msgstr ""
+"Recomendamos que você use o release mais recente do Python na fase de "
+"**bugfix**. Se o seu release do Python estiver na fase de **security**, "
+"recomendamos migrar para uma versão mais nova do Python."
#: ../../tutorials/pyproject-toml.md:331
msgid ""
@@ -5572,10 +7242,14 @@ msgid ""
"including Python release versions, and is also worth considering for your"
" project."
msgstr ""
+"O [SPEC 0](https://scientific-python.org/specs/spec-0000/) do projeto "
+"Scientific Python sugere um cronograma comum para dependências, incluindo "
+"versões de release do Python, e também vale a pena considerar para o seu "
+"projeto."
#: ../../tutorials/pyproject-toml.md:360
msgid "Step 4: Specify Dependencies"
-msgstr ""
+msgstr "Passo 4: Especificar Dependencies"
#: ../../tutorials/pyproject-toml.md:362
msgid ""
@@ -5585,10 +7259,17 @@ msgid ""
"environment. Similar to the requirements listed in the `[build-system]` "
"table above:"
msgstr ""
+"Em seguida, adicione sua tabela de dependencies à tabela project. A seção "
+"`dependencies =` contém uma lista (ou array na linguagem toml) dos pacote "
+"Pythons que o seu pacote precisa para funcionar corretamente em um ambiente "
+"Python. Semelhante aos requirements listados na tabela `[build-system]` "
+"acima:"
#: ../../tutorials/pyproject-toml.md:370
msgid "dependencies are added in an array (similar to a Python list) structure."
msgstr ""
+"as dependencies são adicionadas em uma estrutura de array (semelhante a uma "
+"lista Python)."
#: ../../tutorials/pyproject-toml.md:376
msgid ""
@@ -5600,6 +7281,13 @@ msgid ""
"code to be compatible with - a package you wrote this year probably isn't"
" compatible with numpy v0.0.1!"
msgstr ""
+"Uma dependency pode ser limitada a versões específicas usando um "
+"**especificador de versão.** Se a dependency não tiver especificador de "
+"versão após o nome da dependency, seu pacote pode usar qualquer versão do "
+"pacote dependente. O código muda com o tempo, bugs são corrigidos, APIs "
+"mudam, e por isso é bom ser claro sobre qual versão da dependency seu "
+"código foi escrito para ser compatível — um pacote que você escreveu este "
+"ano provavelmente não é compatível com numpy v0.0.1!"
#: ../../tutorials/pyproject-toml.md:380
msgid ""
@@ -5607,6 +7295,10 @@ msgid ""
"here.](https://packaging.python.org/en/latest/specifications/version-"
"specifiers/#id5)"
msgstr ""
+"[Saiba mais sobre várias formas de especificar intervalos de versões de "
+"pacotes "
+"aqui.](https://packaging.python.org/en/latest/specifications/version-specifi"
+"ers/#id5)"
#: ../../tutorials/pyproject-toml.md:382
msgid ""
@@ -5616,10 +7308,15 @@ msgid ""
"practice for new packages this is often set at the version that was "
"current at the time the package was written[^lowerbound]."
msgstr ""
+"O especificador de versão mais comum é um **limite inferior,** permitindo "
+"qualquer versão superior à versão especificada. Idealmente você deve "
+"definir isso para a versão mais baixa que ainda é compatível com seu pacote, "
+"mas na prática, para pacotes novos, isso costuma ser definido na versão que "
+"estava atual no momento em que o pacote foi escrito[^lowerbound]."
#: ../../tutorials/pyproject-toml.md:387
msgid "Lower bounds look like this:"
-msgstr ""
+msgstr "Limites inferiores ficam assim:"
#: ../../tutorials/pyproject-toml.md:393
msgid ""
@@ -5627,24 +7324,29 @@ msgid ""
"your `dependencies` section can use different types of version "
"specifiers:"
msgstr ""
+"Vírgulas são usadas para separar dependencies individuais, e cada pacote na "
+"sua seção `dependencies` pode usar diferentes tipos de especificadores de "
+"versão:"
#: ../../tutorials/pyproject-toml.md:404
msgid "Your `pyproject.toml` file will now look like this:"
-msgstr ""
+msgstr "Seu arquivo `pyproject.toml` agora ficará assim:"
#: ../../tutorials/pyproject-toml.md:434
msgid "Pin dependencies with caution"
-msgstr ""
+msgstr "Fixe dependencies com cautela"
#: ../../tutorials/pyproject-toml.md:435
msgid ""
"\"Pinning\" a dependency means setting it to a specific version, like "
"this:"
msgstr ""
+"\"Fixar\" (pinning) uma dependency significa defini-la para uma "
+"versão específica, assim:"
#: ../../tutorials/pyproject-toml.md:437
msgid "`numpy == 1.0`."
-msgstr ""
+msgstr "`numpy == 1.0`."
#: ../../tutorials/pyproject-toml.md:439
msgid ""
@@ -5657,12 +7359,23 @@ msgid ""
"resolving a Python environment more challenging. As such only pin "
"dependencies to a specific version if you absolutely need to do so."
msgstr ""
+"Se você está construindo um pacote de biblioteca do qual outros "
+"desenvolvedores dependerão, deve ser cauteloso antes de fixar uma "
+"dependency em uma versão precisa. Aplicações, como sites de produção, "
+"frequentemente fixam suas dependencies, já que outros pacotes não "
+"dependerão do projeto delas. Isso porque os usuários instalarão seu pacote "
+"em vários ambientes. Uma dependency fixada em uma única versão específica "
+"pode tornar a resolução de um ambiente Python mais desafiadora. Portanto, "
+"fixe dependencies em uma versão específica somente se você absolutamente "
+"precisar fazer isso."
#: ../../tutorials/pyproject-toml.md:447
msgid ""
"Similarly, you should be cautious when specifying an upper bound on a "
"package. These two specifications are equivalent:"
msgstr ""
+"Da mesma forma, você deve ser cauteloso ao especificar um limite superior "
+"em um pacote. Essas duas especificações são equivalentes:"
#: ../../tutorials/pyproject-toml.md:455
msgid ""
@@ -5670,10 +7383,13 @@ msgid ""
"upper bound by default is Poetry. [Read more about how to safely add "
"dependencies with Poetry, here.](challenges-with-poetry)"
msgstr ""
+"Uma ferramenta de build que você deve conhecer e que fixa dependencies com "
+"um limite superior por padrão é o Poetry. [Leia mais sobre como adicionar "
+"dependencies com segurança usando Poetry, aqui.](challenges-with-poetry)"
#: ../../tutorials/pyproject-toml.md:458
msgid "Step 5: Add PyPI classifiers"
-msgstr ""
+msgstr "Passo 5: Adicionar classifiers do PyPI"
#: ../../tutorials/pyproject-toml.md:460
msgid ""
@@ -5683,10 +7399,15 @@ msgid ""
"here](https://PyPI.org/classifiers/). Any deviations in spelling and "
"format will cause issues when you publish to PyPI."
msgstr ""
+"Em seguida, você adicionará classifiers ao seu arquivo `pyproject.toml`. O "
+"valor de cada classifier que você adicionar ao seu arquivo `pyproject.toml` "
+"deve vir da lista de [valores de classifiers aceitos pelo PyPI encontrada "
+"aqui](https://PyPI.org/classifiers/). Qualquer desvio na ortografia e no "
+"formato causará problemas quando você publicar no PyPI."
#: ../../tutorials/pyproject-toml.md:462
msgid "What happens when you use incorrect classifiers?"
-msgstr ""
+msgstr "O que acontece quando você usa classifiers incorretos?"
#: ../../tutorials/pyproject-toml.md:465
msgid ""
@@ -5695,32 +7416,40 @@ msgid ""
"package on PyPI it will be rejected. 😔 Don't worry if PyPI rejects you on"
" your first try! It has happened to all of us."
msgstr ""
+"Se você não [usar valores de classifiers "
+"padrão](https://PyPI.org/classifiers/), ao tentar publicar seu pacote no "
+"PyPI ele será rejeitado. 😔 Não se preocupe se o PyPI rejeitar você na "
+"primeira tentativa! Isso aconteceu com todos nós."
#: ../../tutorials/pyproject-toml.md:468
msgid "Review that list and add items below to your `pyproject.toml` file:"
msgstr ""
+"Revise essa lista e adicione os itens abaixo ao seu arquivo "
+"`pyproject.toml`:"
#: ../../tutorials/pyproject-toml.md:470
msgid "development status"
-msgstr ""
+msgstr "development status"
#: ../../tutorials/pyproject-toml.md:471
msgid "intended audiences"
-msgstr ""
+msgstr "intended audiences"
#: ../../tutorials/pyproject-toml.md:472
msgid "topic"
-msgstr ""
+msgstr "topic"
#: ../../tutorials/pyproject-toml.md:473
msgid "programming language support"
-msgstr ""
+msgstr "programming language support"
#: ../../tutorials/pyproject-toml.md:475
msgid ""
"The classifier key should look something like the example below. A few "
"notes:"
msgstr ""
+"A chave classifier deve se parecer com o exemplo abaixo. Algumas "
+"observações:"
#: ../../tutorials/pyproject-toml.md:477
msgid ""
@@ -5728,12 +7457,17 @@ msgid ""
"audience, development status of your package and the Python versions that"
" you support"
msgstr ""
+"Seus valores de classifiers podem ser diferentes dependendo do "
+"público-alvo, do status de desenvolvimento do seu pacote e das versões do "
+"Python que você suporta"
#: ../../tutorials/pyproject-toml.md:478
msgid ""
"You can add as many classifiers as you wish as long as you use the "
"[designated PyPI classifier values](https://PyPI.org/classifiers/)."
msgstr ""
+"Você pode adicionar quantos classifiers quiser, desde que use os [valores "
+"de classifiers designados pelo PyPI](https://PyPI.org/classifiers/)."
#: ../../tutorials/pyproject-toml.md:517
msgid ""
@@ -5741,20 +7475,25 @@ msgid ""
"file, they will help users find your package. As such we strongly "
"recommend that you add them."
msgstr ""
+"Observe que, embora os classifiers não sejam obrigatórios no seu arquivo "
+"`pyproject.toml`, eles ajudarão os usuários a encontrar seu pacote. Por "
+"isso, recomendamos fortemente que você os adicione."
#: ../../tutorials/pyproject-toml.md:519
msgid "Step 6: Add the `[project.urls]` table"
-msgstr ""
+msgstr "Passo 6: Adicionar a tabela `[project.urls]`"
#: ../../tutorials/pyproject-toml.md:521
msgid "Finally, add the project.urls table to your pyproject.toml file."
-msgstr ""
+msgstr "Por fim, adicione a tabela project.urls ao seu arquivo pyproject.toml."
#: ../../tutorials/pyproject-toml.md:523
msgid ""
"`project.urls` contains links that are relevant for your project. You "
"might want to include:"
msgstr ""
+"`project.urls` contém links relevantes para o seu projeto. Você pode querer "
+"incluir:"
#: ../../tutorials/pyproject-toml.md:525
msgid ""
@@ -5762,58 +7501,74 @@ msgid ""
" you are working through this tutorial, then you may not have this link "
"yet. That's ok, you can skip it for the time being."
msgstr ""
+"**Homepage:** Um link para a documentação publicada do seu projeto. Se você "
+"está seguindo este tutorial, talvez ainda não tenha esse link. Tudo bem, "
+"você pode pular por enquanto."
#: ../../tutorials/pyproject-toml.md:526
msgid ""
"**Bug reports:** a link to your issues/discussions or wherever you want "
"users to report bugs."
msgstr ""
+"**Bug reports:** um link para suas issues/discussions ou para onde você "
+"quer que os usuários reportem bugs."
#: ../../tutorials/pyproject-toml.md:527
msgid "**Source:** the GitHub / GitLab link for your project."
-msgstr ""
+msgstr "**Fonte:** o link do GitHub / GitLab do seu projeto."
#: ../../tutorials/pyproject-toml.md:572
msgid ""
"There are many other urls that you can add here. Check out the [README "
"file here for an overview](https://github.com/patrick91/links-demo)."
msgstr ""
+"Há muitas outras URLs que você pode adicionar aqui. Confira o "
+"[arquivo README aqui para uma visão "
+"geral](https://github.com/patrick91/links-demo)."
#: ../../tutorials/pyproject-toml.md:575
msgid "Putting it all together - your completed pyproject.toml file"
-msgstr ""
+msgstr "Juntando tudo — seu arquivo pyproject.toml completo"
#: ../../tutorials/pyproject-toml.md:577
msgid ""
"Below is an example of a complete `pyproject.toml` file that is commented"
" with all of the sections we discussed above."
msgstr ""
+"Abaixo está um exemplo de um arquivo `pyproject.toml` completo, com "
+"comentários em todas as seções que discutimos acima."
#: ../../tutorials/pyproject-toml.md
msgid "Appendix - Click for a fully commented pyproject.toml file"
-msgstr ""
+msgstr "Apêndice — Clique para ver um arquivo pyproject.toml totalmente comentado"
#: ../../tutorials/pyproject-toml.md:626
msgid ""
"Below is a fully commented pyproject.toml file if you want to use it for "
"reference."
msgstr ""
+"Abaixo está um arquivo pyproject.toml totalmente comentado, caso queira "
+"usá-lo como referência."
#: ../../tutorials/pyproject-toml.md:692
msgid "Example `pyproject.toml` files"
-msgstr ""
+msgstr "Exemplos de arquivos `pyproject.toml`"
#: ../../tutorials/pyproject-toml.md:694
msgid ""
"Below are some examples of `pyproject.toml` files from various packages "
"in the scientific and pyOpenSci ecosystem."
msgstr ""
+"Abaixo estão alguns exemplos de arquivos `pyproject.toml` de vários pacotes "
+"no ecossistema científico e pyOpenSci."
#: ../../tutorials/pyproject-toml.md:695
msgid ""
"[PyPA's fully documented example pyproject.toml "
"file](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
msgstr ""
+"[Arquivo pyproject.toml de exemplo totalmente documentado do "
+"PyPA](https://github.com/pypa/sampleproject/blob/main/pyproject.toml)"
#: ../../tutorials/pyproject-toml.md:696
msgid ""
@@ -5821,34 +7576,42 @@ msgid ""
"approved "
"package](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a53dd49ad77e4cf143573/pyproject.toml)"
msgstr ""
+"[taxpasta tem um arquivo pyproject.toml bem organizado e é um pacote "
+"aprovado pelo "
+"pyOpenSci](https://github.com/taxprofiler/taxpasta/blob/f9f6eea2ae7dd08bb60a"
+"53dd49ad77e4cf143573/pyproject.toml)"
#: ../../tutorials/pyproject-toml.md:702
msgid "At this point you've created:"
-msgstr ""
+msgstr "Neste ponto, você já criou:"
#: ../../tutorials/pyproject-toml.md:704
msgid "A [README.md](add-readme) file for your package"
-msgstr ""
+msgstr "Um arquivo [README.md](add-readme) para seu pacote"
#: ../../tutorials/pyproject-toml.md:705
msgid "A [CODE_OF_CONDUCT.md](add-coc) file to support your user community"
msgstr ""
+"Um arquivo [CODE_OF_CONDUCT.md](add-coc) para apoiar sua comunidade "
+"de usuários"
#: ../../tutorials/pyproject-toml.md:706
msgid ""
"And a [LICENSE](add-license-coc) file which provides legal boundaries "
"around how people can and can't use your software"
msgstr ""
+"E um arquivo [LICENSE](add-license-coc) que define limites legais sobre "
+"como as pessoas podem e não podem usar seu software"
#: ../../tutorials/pyproject-toml.md:708
msgid ""
"You also learned [how to publish your package to (test)PyPI](publish-"
"pypi)."
-msgstr ""
+msgstr "Você também aprendeu [como publicar seu pacote no (test)PyPI](publish-pypi)."
#: ../../tutorials/pyproject-toml.md:710
msgid "Publish a new version of your package to PyPI"
-msgstr ""
+msgstr "Publicar uma nova versão do seu pacote no PyPI"
#: ../../tutorials/pyproject-toml.md:712
msgid ""
@@ -5856,30 +7619,39 @@ msgid ""
"(test) PyPI. When you do this you will see that the landing page for your"
" package now contains a lot more information."
msgstr ""
+"Agora você está pronto para publicar uma nova versão do seu pacote Python "
+"no (test) PyPI. Ao fazer isso, verá que a página do seu pacote agora contém "
+"muito mais informações."
#: ../../tutorials/pyproject-toml.md:714
msgid "Try to republish now."
-msgstr ""
+msgstr "Tente republicar agora."
#: ../../tutorials/pyproject-toml.md:716
msgid ""
"First, update the version of your package in your pyproject toml file. "
"Below version is updated from `0.1` to `0.1.1`."
msgstr ""
+"Primeiro, atualize a versão do seu pacote no arquivo pyproject.toml. "
+"Abaixo, a versão é atualizada de `0.1` para `0.1.1`."
#: ../../tutorials/pyproject-toml.md:729
msgid "Now use hatch to publish the new version of your package to test.PyPI.org."
msgstr ""
+"Agora use o Hatch para publicar a nova versão do seu pacote em "
+"test.PyPI.org."
#: ../../tutorials/pyproject-toml.md:736
msgid "Next (optional) step - publishing to conda-forge"
-msgstr ""
+msgstr "Próximo passo (opcional) — publicar no conda-forge"
#: ../../tutorials/pyproject-toml.md:738
msgid ""
"You now have all of the skills that you need to publish your package to "
"PyPI."
msgstr ""
+"Agora você tem todas as habilidades necessárias para publicar seu pacote no "
+"PyPI."
#: ../../tutorials/pyproject-toml.md:741
msgid ""
@@ -5887,6 +7659,8 @@ msgid ""
"channel within the conda ecosystem), you will learn how to do that in the"
" next lesson."
msgstr ""
+"Se você também quiser publicar seu pacote no conda-forge (que é um canal "
+"dentro do ecossistema conda), aprenderá como fazer isso na próxima lição."
#: ../../tutorials/pyproject-toml.md:745
msgid ""
@@ -5894,6 +7668,9 @@ msgid ""
"https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet "
"useful (and the linked links-demo even more so)"
msgstr ""
+"Recursos muito bons do Jeremiah "
+"https://daniel.feldroy.com/posts/2023-08-pypi-project-urls-cheatsheet úteis "
+"(e o links-demo linkado ainda mais)"
#: ../../tutorials/pyproject-toml.md:385
msgid ""
@@ -5904,6 +7681,12 @@ msgid ""
"project.org/latest/reference/cli/#add) will add the most recent version "
"with `>=`."
msgstr ""
+"Algumas ferramentas de empacotamento fazem isso por você quando você "
+"adiciona uma dependência usando a interface CLI delas. Por exemplo, "
+"[`poetry add`](https://python-poetry.org/docs/cli/#add) adicionará a versão "
+"mais recente com um especificador `^`, e [`pdm "
+"add`](https://pdm-project.org/latest/reference/cli/#add) adicionará a "
+"versão mais recente com `>=`."
#: ../../tutorials/run-python-scripts-hatch.md:10
msgid ""
@@ -5911,6 +7694,9 @@ msgid ""
"This makes it possible to run standalone scripts with dependencies and "
"Python versions managed automatically."
msgstr ""
+"O Python suporta metadata inline para scripts (um recurso adicionado em "
+"2024). Isso torna possível executar scripts independentes com dependências "
+"e versões do Python gerenciadas automaticamente."
#: ../../tutorials/run-python-scripts-hatch.md:14
#, python-brace-format
@@ -5919,12 +7705,18 @@ msgid ""
"hatch), and {term}`uv`. In this tutorial, we focus on Hatch and UV. The "
"same metadata format can also be used with other tools."
msgstr ""
+"Muitas ferramentas suportam esse workflow, incluindo PDM, "
+"[Hatch](get-to-know-hatch) e {term}`uv`. Neste tutorial, focamos no Hatch e "
+"no UV. O mesmo formato de metadata também pode ser usado com outras "
+"ferramentas."
#: ../../tutorials/run-python-scripts-hatch.md:22
msgid ""
"[Hatch: How to run Python scripts](https://hatch.pypa.io/latest/how-"
"to/run/python-scripts/)"
msgstr ""
+"[Hatch: Como executar scripts "
+"Python](https://hatch.pypa.io/latest/how-to/run/python-scripts/)"
#: ../../tutorials/run-python-scripts-hatch.md:23
msgid ""
@@ -5932,10 +7724,12 @@ msgid ""
"scripts](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-"
"script)"
msgstr ""
+"[uv: Executando "
+"scripts](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)"
#: ../../tutorials/run-python-scripts-hatch.md:26
msgid "How to create a reproducible script"
-msgstr ""
+msgstr "Como criar um script reproduzível"
#: ../../tutorials/run-python-scripts-hatch.md:28
#, python-brace-format
@@ -5945,16 +7739,22 @@ msgid ""
"metadata. This format lets you specify dependencies and Python versions "
"at the top of your script in a comment block."
msgstr ""
+"Às vezes você quer compartilhar ou executar um único script sem criar um "
+"{term}`pacote Python ` completo. Para isso, você pode usar "
+"metadata inline de script. Esse formato permite especificar dependências e "
+"versões do Python no topo do seu script em um bloco de comentários."
#: ../../tutorials/run-python-scripts-hatch.md:34
msgid ""
"When you add metadata at the top of a script, Hatch (or PDM or uv) will "
"use that metadata to:"
msgstr ""
+"Quando você adiciona metadata no topo de um script, o Hatch (ou PDM ouuv) "
+"usará essa metadata para:"
#: ../../tutorials/run-python-scripts-hatch.md:37
msgid "Create an isolated virtual Python environment for that script."
-msgstr ""
+msgstr "Criar um virtual environment Python isolado para esse script."
#: ../../tutorials/run-python-scripts-hatch.md:38
#, python-brace-format
@@ -5962,20 +7762,24 @@ msgid ""
"Install the {term}`Dependencies` listed in the script into that "
"environment."
msgstr ""
+"Instalar as {term}`dependências ` listadas no script nesse "
+"environment."
#: ../../tutorials/run-python-scripts-hatch.md:39
msgid "Use the required Python version that you specify in the metadata."
-msgstr ""
+msgstr "Usar a versão do Python exigida que você especificar na metadata."
#: ../../tutorials/run-python-scripts-hatch.md:41
msgid ""
"This approach is useful for workflows that you want to make reproducible,"
" but that do not need to become full Python packages."
msgstr ""
+"Essa abordagem é útil para workflows que você quer tornar reproduzíveis, "
+"mas que não precisam se tornar pacote Pythons completos."
#: ../../tutorials/run-python-scripts-hatch.md:44
msgid "Why use Hatch for scripts?"
-msgstr ""
+msgstr "Por que usar o Hatch para scripts?"
#: ../../tutorials/run-python-scripts-hatch.md:46
msgid ""
@@ -5984,16 +7788,22 @@ msgid ""
"dependencies it needs. Hatch takes care of installing dependencies and "
"using the correct Python version."
msgstr ""
+"Metadata inline ajuda você a tornar scripts reproduzíveis. Qualquer pessoa "
+"pode executar seu script sem criar manualmente um novo environment ou "
+"adivinhar quais dependências ele precisa. O Hatch cuidade instalar as "
+"dependências e usar a versão correta do Python."
#: ../../tutorials/run-python-scripts-hatch.md:51
msgid "How to add inline metadata to your script"
-msgstr ""
+msgstr "Como adicionar metadata inline ao seu script"
#: ../../tutorials/run-python-scripts-hatch.md:53
msgid ""
"You will use Hatch in this example, but you can also use uv if that is "
"your preferred tool."
msgstr ""
+"Você usará o Hatch neste exemplo, mas também pode usar o uv se essa for sua "
+"ferramenta preferida."
#: ../../tutorials/run-python-scripts-hatch.md:56
#, python-brace-format
@@ -6002,126 +7812,153 @@ msgid ""
"top. The metadata block starts with `# /// script` and ends with `# ///`."
" Everything in between must be {term}`TOML` metadata written as comments."
msgstr ""
+"Primeiro, crie um novo arquivo chamado `script.py` com o bloco abaixo no "
+"topo. O bloco de metadata começa com `# /// script` e termina com `# ///`. "
+"Tudo entre eles deve ser metadata {term}`TOML` escrita como comentários."
#: ../../tutorials/run-python-scripts-hatch.md:60
msgid ""
"In the example below, the script requires Python 3.11 or newer, and NumPy"
" is declared as a dependency."
msgstr ""
+"No exemplo abaixo, o script requer Python 3.11 ou mais recente, e o NumPy é "
+"declarado como dependência."
#: ../../tutorials/run-python-scripts-hatch.md:81
msgid "Run the script with Hatch"
-msgstr ""
+msgstr "Executar o script com o Hatch"
#: ../../tutorials/run-python-scripts-hatch.md:83
msgid ""
"Open your terminal and change to the directory where `script.py` lives. "
"Then run:"
msgstr ""
+"Abra seu terminal e mude para o diretório onde `script.py` está. Em "
+"seguida, execute:"
#: ../../tutorials/run-python-scripts-hatch.md:90
msgid ""
"On first run, Hatch will create an environment and install dependencies. "
"On later runs, Hatch will reuse that environment so startup is faster."
msgstr ""
+"Na primeira execução, o Hatch criará um environment e instalará as "
+"dependências. Nas execuções seguintes, o Hatch reutilizará esse environment "
+"para que a inicialização seja mais rápida."
#: ../../tutorials/run-python-scripts-hatch.md:94
msgid ""
"The environment name is based on the script path. If you move the script "
"to a new location, Hatch will treat it as a new script environment."
msgstr ""
+"O nome do environment é baseado no caminho do script. Se você mover o "
+"script para um novo local, o Hatch o tratará como um novo script "
+"environment."
#: ../../tutorials/run-python-scripts-hatch.md:98
msgid "Optional: configure script environment behavior"
-msgstr ""
+msgstr "Opcional: configurar o comportamento do script environment"
#: ../../tutorials/run-python-scripts-hatch.md:100
msgid ""
"You can control script-specific Hatch behavior in the same metadata "
"block. For example, to use `pip` instead of `uv` as the installer:"
msgstr ""
+"Você pode controlar o comportamento específico do Hatch para scripts no "
+"mesmo bloco de metadata. Por exemplo, para usar `pip` em vez de `uv` como "
+"instalador:"
#: ../../tutorials/run-python-scripts-hatch.md:113
msgid "Run the same script with uv"
-msgstr ""
+msgstr "Executar o mesmo script com uv"
#: ../../tutorials/run-python-scripts-hatch.md:115
msgid "If you prefer uv, you can run the same inline-metadata script with:"
-msgstr ""
+msgstr "Se você preferir o uv, pode executar o mesmo script com metadata inline com:"
#: ../../tutorials/run-python-scripts-hatch.md:121
msgid ""
"The same `# /// script` metadata block works with uv, including "
"`requires-python` and `dependencies`."
msgstr ""
+"O mesmo bloco de metadata `# /// script` funciona com uv, incluindo "
+"`requires-python` e `dependencies`."
#: ../../tutorials/run-python-scripts-hatch.md:124
msgid ""
"For more on using uv to run scripts, see the guide: [Running scripts with"
" uv](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)."
msgstr ""
+"Para mais informações sobre como usar o uv para executar scripts, consulte "
+"o guia: [Executando scripts com "
+"uv](https://docs.astral.sh/uv/guides/scripts/#creating-a-python-script)."
#: ../../tutorials/run-python-scripts-hatch.md:128
msgid "When to use scripts vs. packages"
-msgstr ""
+msgstr "Quando usar scripts vs. pacotes"
#: ../../tutorials/run-python-scripts-hatch.md:130
msgid "You may be wondering when to use scripts versus creating a package."
msgstr ""
+"Você pode estar se perguntando quando usar scripts em vez de criar um "
+"pacote."
#: ../../tutorials/run-python-scripts-hatch.md:132
msgid "This depends on your use case. Scripts are often useful when:"
-msgstr ""
+msgstr "Isso depende do seu caso de uso. Scripts costumam ser úteis quando:"
#: ../../tutorials/run-python-scripts-hatch.md:134
msgid "You have one small task, or a specific workflow that is not generalizable."
msgstr ""
+"Você tem uma tarefa pequena ou um workflow específico que não é "
+"generalizável."
#: ../../tutorials/run-python-scripts-hatch.md:135
msgid ""
"Your workflow is still evolving, but you want to run it in a reproducible"
" environment."
msgstr ""
+"Seu workflow ainda está evoluindo, mas você quer executá-lo em um "
+"environment reproduzível."
#: ../../tutorials/run-python-scripts-hatch.md:137
msgid "You want reproducible dependencies quickly."
-msgstr ""
+msgstr "Você quer dependências reproduzíveis rapidamente."
#: ../../tutorials/run-python-scripts-hatch.md:138
msgid "You are sharing a single file with collaborators."
-msgstr ""
+msgstr "Você está compartilhando um único arquivo com colaboradores."
#: ../../tutorials/run-python-scripts-hatch.md:140
msgid "Create a full package when:"
-msgstr ""
+msgstr "Crie um pacote completo quando:"
#: ../../tutorials/run-python-scripts-hatch.md:142
msgid "You are building reusable modules for multiple projects."
-msgstr ""
+msgstr "Você está construindo modules reutilizáveis para vários projetos."
#: ../../tutorials/run-python-scripts-hatch.md:143
msgid "You need tests, documentation, releases, and long-term maintenance."
-msgstr ""
+msgstr "Você precisa de testes, documentação, releases e manutenção de longo prazo."
#: ../../tutorials/run-python-scripts-hatch.md:144
msgid "Your codebase is growing beyond one or two scripts."
-msgstr ""
+msgstr "Sua base de código está crescendo além de um ou dois scripts."
#: ../../tutorials/run-python-scripts-hatch.md:148
msgid "[Get to know Hatch](get-to-know-hatch.md)"
-msgstr ""
+msgstr "[Conheça o Hatch](get-to-know-hatch.md)"
#: ../../tutorials/run-python-scripts-hatch.md:149
msgid "[Create a Python package](create-python-package.md)"
-msgstr ""
+msgstr "[Criar um pacote Python](create-python-package.md)"
#: ../../tutorials/run-python-scripts-hatch.md:150
msgid "[Command line reference guide](command-line-reference.md)"
-msgstr ""
+msgstr "[Guia de referência da linha de comando](command-line-reference.md)"
#: ../../tutorials/setup-py-to-pyproject-toml.md:7
msgid "Using Hatch to Migrate setup.py to a pyproject.toml"
-msgstr ""
+msgstr "Usando o Hatch para migrar setup.py para pyproject.toml"
#: ../../tutorials/setup-py-to-pyproject-toml.md:9
msgid ""
@@ -6129,32 +7966,41 @@ msgid ""
"[pyproject.toml](pyproject-toml) file if your project already has a "
"`setup.py` file."
msgstr ""
+"O [Hatch](get-to-know-hatch) pode ser útil para gerar o arquivo "
+"[pyproject.toml](pyproject-toml) do seu projeto se ele já tiver um arquivo "
+"`setup.py`."
#: ../../tutorials/setup-py-to-pyproject-toml.md:13
msgid "Note"
-msgstr ""
+msgstr "Nota"
#: ../../tutorials/setup-py-to-pyproject-toml.md:16
msgid ""
"This step is not necessary and is only helpful if your project already "
"has a `setup.py` file defined."
msgstr ""
+"Esta etapa não é necessária e só é útil se seu projeto já tiver um arquivo "
+"`setup.py` definido."
#: ../../tutorials/setup-py-to-pyproject-toml.md:17
msgid ""
"If your project does not already define a `setup.py` see [Make your "
"Python code installable](create-python-package)"
msgstr ""
+"Se seu projeto ainda não define um `setup.py`, consulte [Torne seu código "
+"Python instalável](create-python-package)"
#: ../../tutorials/setup-py-to-pyproject-toml.md:25
msgid ""
"The process of using Hatch to transition to using `pyproject.toml` for "
"projects that already have a `setup.py` defined."
msgstr ""
+"O processo de usar o Hatch para fazer a transição para `pyproject.toml` em "
+"projetos que já têm um `setup.py` definido."
#: ../../tutorials/setup-py-to-pyproject-toml.md:28
msgid "What is Hatch?"
-msgstr ""
+msgstr "O que é o Hatch?"
#: ../../tutorials/setup-py-to-pyproject-toml.md:30
#, python-brace-format
@@ -6165,54 +8011,68 @@ msgid ""
"projects, managing {term}`Dependencies`, building distributions, and "
"publishing packages to repositories like [PyPI](publish-pypi)."
msgstr ""
+"O Hatch é um gerenciador de pacote Pythons projetado para "
+"simplificar o processo de criar, gerenciar e distribuir pacote Pythons. Ele "
+"oferece uma CLI (Command-Line Interface) conveniente para tarefas como criar "
+"novos projetos, gerenciar {term}`dependências `, fazer build "
+"de distribuições e publicar pacotes em repositórios como o "
+"[PyPI](publish-pypi)."
#: ../../tutorials/setup-py-to-pyproject-toml.md:40
msgid "See [Get to know Hatch](get-to-know-hatch) for more information."
-msgstr ""
+msgstr "Consulte [Conheça o Hatch](get-to-know-hatch) para mais informações."
#: ../../tutorials/setup-py-to-pyproject-toml.md:43
msgid "Prerequisites"
-msgstr ""
+msgstr "Pré-requisitos"
#: ../../tutorials/setup-py-to-pyproject-toml.md:45
msgid ""
"Before we begin, ensure that you have Hatch installed on your system. You"
" can install it via pip:"
msgstr ""
+"Antes de começar, certifique-se de que o Hatch está instalado no seu "
+"sistema. Você pode instalá-lo via pip:"
#: ../../tutorials/setup-py-to-pyproject-toml.md:51
msgid "Sample Directory Tree"
-msgstr ""
+msgstr "Árvore de diretórios de exemplo"
#: ../../tutorials/setup-py-to-pyproject-toml.md:53
msgid ""
"Let's take a look at a sample directory tree structure before and after "
"using `hatch init`:"
msgstr ""
+"Vamos dar uma olhada em uma estrutura de árvore de diretórios de exemplo "
+"antes e depois de usar `hatch init`:"
#: ../../tutorials/setup-py-to-pyproject-toml.md:55
msgid "Before `hatch init`"
-msgstr ""
+msgstr "Antes de `hatch init`"
#: ../../tutorials/setup-py-to-pyproject-toml.md:71
msgid "After `hatch init`"
-msgstr ""
+msgstr "Depois de `hatch init`"
#: ../../tutorials/setup-py-to-pyproject-toml.md:89
msgid ""
"As you can see, the main change after running `hatch init` is the "
"addition of the `pyproject.toml` file in the project directory."
msgstr ""
+"Como você pode ver, a principal mudança após executar `hatch init` é "
+"a adição do arquivo `pyproject.toml` no diretório do projeto."
#: ../../tutorials/setup-py-to-pyproject-toml.md:91
msgid "Step-by-Step Guide"
-msgstr ""
+msgstr "Guia passo a passo"
#: ../../tutorials/setup-py-to-pyproject-toml.md:93
msgid ""
"Now, let's walk through the steps to use Hatch to create a "
"`pyproject.toml` file for your project."
msgstr ""
+"Agora, vamos percorrer os passos para usar o Hatch e criar um arquivo "
+"`pyproject.toml` para seu projeto."
#: ../../tutorials/setup-py-to-pyproject-toml.md:95
msgid ""
@@ -6220,12 +8080,16 @@ msgid ""
"prompt and navigate to the directory where your Python project is "
"located."
msgstr ""
+"**Navegue até o diretório do seu projeto**: Abra seu terminal ou prompt de "
+"comando e navegue até o diretório onde seu projeto Python está localizado."
#: ../../tutorials/setup-py-to-pyproject-toml.md:97
msgid ""
"**Initialize Hatch**: Run the following command to initialize Hatch in "
"your project directory:"
msgstr ""
+"**Inicialize o Hatch**: Execute o seguinte comando para inicializar o Hatch "
+"no diretório do seu projeto:"
#: ../../tutorials/setup-py-to-pyproject-toml.md:103
msgid ""
@@ -6237,6 +8101,13 @@ msgid ""
"[pyproject.toml tutorial](pyproject-toml) for more information about the "
"`pyproject.toml`)."
msgstr ""
+"**Revise e personalize**: Após executar o comando anterior, o Hatch gerará "
+"automaticamente um arquivo `pyproject.toml` com base na configuração "
+"existente do seu projeto. Reserve um tempo para revisar o conteúdo do "
+"arquivo `pyproject.toml` gerado. Você pode querer personalizar certas "
+"configurações ou dependências com base nos requisitos do seu projeto "
+"(consulte o [tutorial de pyproject.toml](pyproject-toml) para mais "
+"informações sobre o `pyproject.toml`)."
#: ../../tutorials/setup-py-to-pyproject-toml.md:105
msgid ""
@@ -6244,6 +8115,9 @@ msgid ""
"your project configuration and dependencies. You can manually edit the "
"file, but be cautious and ensure that the syntax is correct."
msgstr ""
+"**Verifique**: Verifique se o arquivo `pyproject.toml` reflete com precisão "
+"a configuração e as dependências do seu projeto. Você pode editar o arquivo "
+"manualmente, mas tenha cuidado e certifique-se de que a sintaxe está correta."
#: ../../tutorials/setup-py-to-pyproject-toml.md:107
msgid ""
@@ -6251,6 +8125,9 @@ msgid ""
"exclusively, the `setup.py` file becomes unnecessary. You can safely "
"delete it from your project directory."
msgstr ""
+"**Exclua o setup.py**: Como estamos migrando para usar exclusivamente "
+"`pyproject.toml`, o arquivo `setup.py` se torna desnecessário. Você pode "
+"excluí-lo com segurança do diretório do seu projeto."
#: ../../tutorials/setup-py-to-pyproject-toml.md:109
msgid ""
@@ -6258,6 +8135,9 @@ msgid ""
"your project builds successfully using only the `pyproject.toml` file. "
"Run the following command to build your project:"
msgstr ""
+"**Teste o build**: Antes de prosseguir, é essencial garantir que seu "
+"projeto faz build com sucesso usando apenas o arquivo `pyproject.toml`. "
+"Execute o seguinte comando para fazer o build do seu projeto:"
#: ../../tutorials/setup-py-to-pyproject-toml.md:115
msgid ""
@@ -6265,6 +8145,9 @@ msgid ""
"`pyproject.toml` file. Make sure to check for any errors or warnings "
"during the build process."
msgstr ""
+"Este comando fará o build do seu projeto com base nas especificações do "
+"arquivo `pyproject.toml`. Certifique-se de verificar se há erros ou avisos "
+"durante o processo de build."
#: ../../tutorials/setup-py-to-pyproject-toml.md:117
msgid ""
@@ -6273,55 +8156,67 @@ msgid ""
"existing functionality remains intact. Run any pre-existing tests to "
"verify that everything still works as expected."
msgstr ""
+"**Teste a funcionalidade existente**: Após fazer o build do seu projeto com "
+"sucesso com `pyproject.toml`, é crucial garantir que a funcionalidade "
+"existente do seu projeto permaneça intacta. Execute quaisquer testes "
+"pré-existentes para verificar se tudo ainda funciona como esperado."
#: ../../tutorials/trusted-publishing.md:6
msgid ""
"Setup Trusted Publishing for secure and automated publishing via GitHub "
"Actions"
msgstr ""
+"Configurar Trusted Publishing para publicação segura e automatizada via "
+"GitHub Actions"
#: ../../tutorials/trusted-publishing.md:8
msgid "In the previous Python packaging lessons, you learned:"
-msgstr ""
+msgstr "Nas lições anteriores de empacotamento Python, você aprendeu:"
#: ../../tutorials/trusted-publishing.md:10
msgid "[How to create a Python package](create-python-package)"
-msgstr ""
+msgstr "[Como criar um pacote Python](create-python-package)"
#: ../../tutorials/trusted-publishing.md:11
msgid ""
"How to publish the code to [PyPI](publish-pypi) and [Conda](publish-"
"conda-forge)"
msgstr ""
+"Como publicar o código no [PyPI](publish-pypi) e no "
+"[Conda](publish-conda-forge)"
#: ../../tutorials/trusted-publishing.md:16
msgid "In this lesson, you will learn how to:"
-msgstr ""
+msgstr "Nesta lição, você aprenderá como:"
#: ../../tutorials/trusted-publishing.md:18
msgid "Automate building and publishing the package on GitHub Actions"
-msgstr ""
+msgstr "Automatizar o build e a publicação do pacote no GitHub Actions"
#: ../../tutorials/trusted-publishing.md:19
#, python-brace-format
msgid "Configure {term}`Trusted publishing` for the project"
-msgstr ""
+msgstr "Configurar {term}`Trusted publishing` para o projeto"
#: ../../tutorials/trusted-publishing.md:20
msgid ""
"Secure your workflow using GitHub action hashes and versions in your "
"workflow file"
msgstr ""
+"Proteger seu workflow usando hashes e versões de GitHub actions no arquivo "
+"de workflow"
#: ../../tutorials/trusted-publishing.md:22
msgid ""
"This tutorial assumes that your project is hosted on GitHub and that you "
"want to publish a package from your project to PyPI."
msgstr ""
+"Este tutorial assume que seu projeto está hospedado no GitHub e que você "
+"quer publicar um pacote do seu projeto no PyPI."
#: ../../tutorials/trusted-publishing.md:26
msgid "Configure a release job on GitHub Actions"
-msgstr ""
+msgstr "Configurar um job de release no GitHub Actions"
#: ../../tutorials/trusted-publishing.md:28
msgid ""
@@ -6333,10 +8228,17 @@ msgid ""
"focus on using actions to release and publish your Python package "
"securely to [PyPI](publish-pypi)."
msgstr ""
+"O GitHub Actions[^gha] é uma infraestrutura fornecida pelo GitHub "
+"para automatizar workflows de software, diretamente do repositório GitHub do "
+"projeto. Você pode configurar testes automatizados para cada pull request, "
+"automatizar a publicação de documentação, automatizar a criação de páginas "
+"web para o projeto e até automatizar o processo de release. Para esta "
+"lição, focaremos no uso de actions para fazer release e publicar seu pacote "
+"Python com segurança no [PyPI](publish-pypi)."
#: ../../tutorials/trusted-publishing.md:36
msgid "Why Trusted Publishing Matters"
-msgstr ""
+msgstr "Por que o Trusted Publishing é importante"
#: ../../tutorials/trusted-publishing.md:38
msgid ""
@@ -6345,10 +8247,15 @@ msgid ""
"security-publish-pypi.html) that dives deeper into what can happen when "
"you don't lock down your publishing workflows."
msgstr ""
+"Se você está se perguntando por que o trusted publishing é tão importante, "
+"[confira este post do "
+"blog:](https://www.pyopensci.org/blog/python-packaging-security-publish-pypi"
+".html)que aprofunda o que pode acontecer quando você não protege seus "
+"workflows de publicação."
#: ../../tutorials/trusted-publishing.md:41
msgid "Step 0: Create a release workflow"
-msgstr ""
+msgstr "Passo 0: Criar um workflow de release"
#: ../../tutorials/trusted-publishing.md:43
msgid ""
@@ -6358,10 +8265,15 @@ msgid ""
"that all GitHub Actions are configured via YAML files in the "
"`.github/workflows` directory."
msgstr ""
+"Para começar, crie um arquivo chamado `release.yaml` no diretório "
+"`.github/workflows` do seu projeto. Se o diretório `.github/workflows` não "
+"existir, você pode criá-lo. É convenção do GitHub que todas as GitHub "
+"Actions sejam configuradas via arquivos YAML no diretório "
+"`.github/workflows`."
#: ../../tutorials/trusted-publishing.md:48
msgid "Naming your workflow file"
-msgstr ""
+msgstr "Nomeando seu arquivo de workflow"
#: ../../tutorials/trusted-publishing.md:51
msgid ""
@@ -6370,14 +8282,18 @@ msgid ""
"self, and contributors who work on your project know exactly what the "
"workflow does."
msgstr ""
+"Você pode dar ao arquivo de workflow o nome que quiser. Sugerimos usar algo "
+"simples e expressivo como `release.yaml`, para que você, seu eu futuro e "
+"colaboradores que trabalham no seu projeto saibam exatamente o que o "
+"workflow faz."
#: ../../tutorials/trusted-publishing.md:56
msgid "Step 1: Name the workflow"
-msgstr ""
+msgstr "Passo 1: Nomear o workflow"
#: ../../tutorials/trusted-publishing.md:58
msgid "At the top of the `release.yaml` file, type the following:"
-msgstr ""
+msgstr "No topo do arquivo `release.yaml`, digite o seguinte:"
#: ../../tutorials/trusted-publishing.md:64
msgid ""
@@ -6385,6 +8301,9 @@ msgid ""
" runs of this GitHub Action on the \"Actions\" tab in the GitHub "
"repository."
msgstr ""
+"Isso fornece um nome ao workflow que você pode usar para encontrar "
+"rapidamente todas as execuções desta GitHub Action na aba \"Actions\" do "
+"repositório GitHub."
#: ../../tutorials/trusted-publishing.md:68
msgid ""
@@ -6396,6 +8315,12 @@ msgid ""
"runs of the workflow, for the \"1.0\" and \"1.0.1\" releases of the "
"package."
msgstr ""
+"Gráfico mostrando um exemplo de workflow configurado para o release. No "
+"topo, na caixa vermelha rotulada \"1\", você vê a aba \"Actions\" do "
+"repositório GitHub. À esquerda, na caixa vermelha rotulada \"2\", você pode "
+"ver o nome do workflow, \"Release\", conforme configurado neste passo. Por "
+"fim, no centro, na caixa vermelha rotulada \"3\", você pode ver várias "
+"execuções do workflow, para os releases \"1.0\" e\"1.0.1\" do pacote."
#: ../../tutorials/trusted-publishing.md:70
msgid ""
@@ -6406,10 +8331,16 @@ msgid ""
"center, in the red box labeled \"3\" you can see several runs of the "
"workflow, for the \"1.0\" and \"1.0.1\" releases of the package."
msgstr ""
+"Esta imagem mostra um exemplo de workflow configurado para o release. No "
+"topo, na caixa vermelha rotulada \"1\", você vê a aba \"Actions\" do "
+"repositório GitHub. À esquerda, na caixa vermelha rotulada \"2\", você pode "
+"ver o nome do workflow, conforme configurado neste passo. Por fim, no "
+"centro, na caixa vermelha rotulada \"3\", você pode ver várias execuções do "
+"workflow, para os releases \"1.0\" e \"1.0.1\" do pacote."
#: ../../tutorials/trusted-publishing.md:73
msgid "Step 2: Add triggers to the workflow"
-msgstr ""
+msgstr "Passo 2: Adicionar triggers ao workflow"
#: ../../tutorials/trusted-publishing.md:75
msgid ""
@@ -6422,10 +8353,18 @@ msgid ""
"following to the `release.yaml` file to ensure it runs when you create "
"and publish a release:"
msgstr ""
+"Todo workflow do GitHub Actions é executado quando [certas "
+"condições](https://docs.github.com/en/actions/reference/events-that-trigger-"
+"workflows)são atendidas. Neste caso, assumimos que um workflow de release só "
+"deve ser executado quando o proprietário do repositório cria um novo "
+"[release](https://docs.github.com/en/repositories/releasing-projects-on-gith"
+"ub/managing-releases-in-a-repository)para o pacote. Adicione o seguinte ao "
+"arquivo `release.yaml` para garantir que ele seja executado quando você "
+"criar e publicar um release:"
#: ../../tutorials/trusted-publishing.md:87
msgid "Step 3: Configure the jobs in the workflow"
-msgstr ""
+msgstr "Passo 3: Configurar os jobs no workflow"
#: ../../tutorials/trusted-publishing.md:89
msgid ""
@@ -6434,6 +8373,10 @@ msgid ""
"the GitHub Action runs all the jobs in a workflow (excluding any steps "
"that have conditional requirements)."
msgstr ""
+"Um arquivo de *workflow* do GitHub Actions pode conter vários *jobs* que "
+"são executados de forma independente; cada job também pode ter vários "
+"*steps.* Quando acionado, a GitHub Action executa todos os jobs em um "
+"workflow (excluindo quaisquer steps que tenham requisitos condicionais)."
#: ../../tutorials/trusted-publishing.md:93
msgid ""
@@ -6444,6 +8387,13 @@ msgid ""
"publish to PyPI if a release was made for the package. But you might want"
" to test building the package every time you merge a new pull request."
msgstr ""
+"Jobs e steps também podem ter [lógica "
+"condicional](https://docs.github.com/en/actions/reference/workflow-syntax-fo"
+"r-github-actions#jobsjob_idif)que permite que sejam executados apenas se "
+"critérios específicos existirem. Por exemplo, você pode querer que um step "
+"do job publique no PyPI apenas se um release foi feito para o pacote. Mas "
+"você pode querer testar o build do pacote toda vez que fizer merge de um "
+"novo pull request."
#: ../../tutorials/trusted-publishing.md:96
msgid ""
@@ -6451,16 +8401,22 @@ msgid ""
" use the `actions/checkout` action to check out the code. You then "
"install and use [Hatch](get-to-know-hatch) to build your package."
msgstr ""
+"Para um job de release, você precisa clonar ou fazer checkout do "
+"repositório. Você pode usar a action `actions/checkout` para fazer checkout "
+"do código. Em seguida, instala e usa o [Hatch](get-to-know-hatch) para "
+"fazer o build do seu pacote."
#: ../../tutorials/trusted-publishing.md:101
msgid ""
"You also need to make sure to set up Hatch on the machine GitHub is using"
" to run the workflow."
msgstr ""
+"Você também precisa garantir que o Hatch esteja configurado na máquina que o "
+"GitHub está usando para executar o workflow."
#: ../../tutorials/trusted-publishing.md:104
msgid "A minimal job definition would look like this:"
-msgstr ""
+msgstr "Uma definição mínima de job seria assim:"
#: ../../tutorials/trusted-publishing.md:124
msgid ""
@@ -6469,22 +8425,30 @@ msgid ""
"action. The checkout action checks out the code from your repository. In "
"this case, the code will be used to build your package."
msgstr ""
+"Observe que acima você fornece uma versão para cada step de action. "
+"`action/checkout@v5` diz ao GitHub para usar a versão 5 da action checkout. "
+"A action checkout faz checkout do código do seu repositório. Neste caso, o "
+"código será usado para fazer o build do seu pacote."
#: ../../tutorials/trusted-publishing.md:126
msgid ""
"Next, you will learn about a better way to secure (or \"harden\") your "
"workflow"
msgstr ""
+"Em seguida, você aprenderá sobre uma maneira melhor de proteger (ou "
+"\"endurecer\") seu workflow"
#: ../../tutorials/trusted-publishing.md:128
msgid "Step 4: Secure the GitHub Actions workflow"
-msgstr ""
+msgstr "Passo 4: Proteger o workflow do GitHub Actions"
#: ../../tutorials/trusted-publishing.md:130
msgid ""
"There are several improvements you can make to the GitHub Actions "
"workflow you just configured to improve security and readability."
msgstr ""
+"Há várias melhorias que você pode fazer no workflow do GitHub Actions que "
+"acabou de configurar para melhorar a segurança e a legibilidade."
#: ../../tutorials/trusted-publishing.md:133
msgid ""
@@ -6492,6 +8456,9 @@ msgid ""
" readability of the logs generated during the workflow run. This can be "
"achieved using `name: ` lines."
msgstr ""
+"Primeiro, podemos dar nomes aos passos relevantes do processo para aumentar "
+"a legibilidade dos logs gerados durante a execução do workflow. Isso pode "
+"ser feito usando linhas `name: `."
#: ../../tutorials/trusted-publishing.md:137
msgid ""
@@ -6502,6 +8469,12 @@ msgid ""
"Actions is the recent `tj-actions/changed-files` attack[^changed-files-"
"supply-chain-attack])."
msgstr ""
+"Mais importante, toda vez que você usar uma action existente (via `uses`), "
+"deve fixar essa action a um commit hash. Fixar sua action garante que, se "
+"um usuário malicioso assumir o controle da action, ele não conseguirá "
+"impactar seu repositório (um exemplo de ataque à cadeia de suprimentos "
+"devido a GitHub Actions é o recente ataque "
+"`tj-actions/changed-files`[^changed-files-supply-chain-attack])."
#: ../../tutorials/trusted-publishing.md:144
msgid ""
@@ -6509,16 +8482,22 @@ msgid ""
"actions stay up to date. The dependabot tool will open pull requests that"
" update your action versions at whatever frequency you want."
msgstr ""
+"Habilitar o Dependabot[^dependabot] no repositório garantirá que suas "
+"actions permaneçam atualizadas. A ferramenta dependabot abrirá pull "
+"requests que atualizam as versões das suas actions na frequência que você "
+"desejar."
#: ../../tutorials/trusted-publishing.md:149
msgid "Thus, the workflow that you should use should be similar to:"
-msgstr ""
+msgstr "Assim, o workflow que você deve usar deve ser semelhante a:"
#: ../../tutorials/trusted-publishing.md:157
msgid ""
"Now, you can commit the `.github/workflows/release.yaml` file to the "
"repository and push to GitHub."
msgstr ""
+"Agora, você pode fazer commit do arquivo `.github/workflows/release.yaml` "
+"no repositório e fazer push para o GitHub."
#: ../../tutorials/trusted-publishing.md:159
msgid ""
@@ -6527,10 +8506,14 @@ msgid ""
"Unfortunately, the wheel is only available on the runner and will be "
"deleted at the end of the workflow run."
msgstr ""
+"Neste ponto, se você criar um novo release para seu projeto no GitHub, o "
+"workflow configurado deve ser executado e fazer o build de uma wheel para "
+"você. Infelizmente, a wheel só está disponível no runner e será excluída ao "
+"final da execução do workflow."
#: ../../tutorials/trusted-publishing.md:163
msgid "Step 5: Upload the built artifact to GitHub Artifacts"
-msgstr ""
+msgstr "Passo 5: Fazer upload do artefato build para GitHub Artifacts"
#: ../../tutorials/trusted-publishing.md:165
msgid ""
@@ -6538,10 +8521,13 @@ msgid ""
"the wheel. You will upload it to the artifacts temporary area[^github-"
"artifacts]. Add the following to the `release.yaml` file:"
msgstr ""
+"Você precisa adicionar mais um step à definição do job para poder acessar a "
+"wheel. Você fará upload dela para a área temporária de "
+"artifacts[^github-artifacts]. Adicione o seguinte ao arquivo `release.yaml`:"
#: ../../tutorials/trusted-publishing.md:175
msgid "Upload artifacts parameters"
-msgstr ""
+msgstr "Parâmetros de upload de artifacts"
#: ../../tutorials/trusted-publishing.md:178
msgid ""
@@ -6549,6 +8535,9 @@ msgid ""
"artifacts storage on GitHub actions is temporary; users should not "
"download your package from the GitHub artifacts."
msgstr ""
+"Acima, você configurou o artifact para ser excluído após 1 dia. O "
+"armazenamento de artifacts no GitHub Actions é temporário; os usuários não "
+"devem baixar seu pacote dos artifacts do GitHub."
#: ../../tutorials/trusted-publishing.md:181
msgid ""
@@ -6557,32 +8546,40 @@ msgid ""
"previous step) failed to build our package, so there is nothing to "
"release."
msgstr ""
+"Você também configurou o job de release para gerar erro se o "
+"diretório`dist/` não existir. Isso significa que `hatch build` (do step "
+"anterior) falhou ao fazer o build do nosso pacote, então não há nada para "
+"fazer release."
#: ../../tutorials/trusted-publishing.md:186
msgid ""
"At this point, if you push the `release.yaml` to GitHub and create a new "
"release, the GitHub Actions job will:"
msgstr ""
+"Neste ponto, se você fizer push do `release.yaml` para o GitHub e criar um "
+"novo release, o job do GitHub Actions irá:"
#: ../../tutorials/trusted-publishing.md:189
msgid "run,"
-msgstr ""
+msgstr "executar,"
#: ../../tutorials/trusted-publishing.md:190
msgid "clone your repository,"
-msgstr ""
+msgstr "clonar seu repositório,"
#: ../../tutorials/trusted-publishing.md:191
msgid "install and set up Hatch,"
-msgstr ""
+msgstr "instalar e configurar o Hatch,"
#: ../../tutorials/trusted-publishing.md:192
msgid "build your package and"
-msgstr ""
+msgstr "fazer o build do seu pacote e"
#: ../../tutorials/trusted-publishing.md:193
msgid "upload your package as an archive to the artifacts storage."
msgstr ""
+"fazer upload do seu pacote como um arquivo para o armazenamento de "
+"artifacts."
#: ../../tutorials/trusted-publishing.md:196
msgid ""
@@ -6590,6 +8587,9 @@ msgid ""
"running. Each step in the log is matched to one step in the workflow "
"definition."
msgstr ""
+"Gráfico mostrando um exemplo de workflow de release que acabou de terminar "
+"de executar. Cada step no log corresponde a um step na definição do "
+"workflow."
#: ../../tutorials/trusted-publishing.md:198
msgid ""
@@ -6597,6 +8597,9 @@ msgid ""
" running. Each step in the log is matched to one step in the workflow "
"definition."
msgstr ""
+"Esta figura mostra um exemplo de workflow de release que acabou de terminar "
+"de executar. Cada step no log corresponde a um step na definição do "
+"workflow."
#: ../../tutorials/trusted-publishing.md:201
msgid ""
@@ -6604,18 +8607,24 @@ msgid ""
"section for the artifacts produced during runtime and uploaded to this "
"storage area:"
msgstr ""
+"Na parte inferior da página de execução do workflow no GitHub, você deve "
+"ver uma seção para os artifacts produzidos durante a execução e enviados "
+"para esta área de armazenamento:"
#: ../../tutorials/trusted-publishing.md:205
msgid ""
"Graphic showing an example of an artifact produced by the release "
"workflow."
-msgstr ""
+msgstr "Gráfico mostrando um exemplo de artifact produzido pelo workflow de release."
#: ../../tutorials/trusted-publishing.md:207
msgid ""
"This figure shows the artifact produced by the above release workflow. It"
" is now marked as expired since the workflow ran more than a day ago."
msgstr ""
+"Esta figura mostra o artifact produzido pelo workflow de release acima. "
+"Agora está marcado como expirado, pois o workflow foi executado há mais de "
+"um dia."
#: ../../tutorials/trusted-publishing.md:210
msgid ""
@@ -6624,10 +8633,14 @@ msgid ""
" to test the built wheel. Next, you will configure uploading to PyPI "
"using trusted publishing."
msgstr ""
+"Você pode baixar o artifact (antes que expire), descompactá-lo e instalar a "
+"wheel contida nele. No entanto, isso só deve ser feito se você quiser "
+"testar a wheel build. Em seguida, você configurará o upload para o PyPI "
+"usando trusted publishing."
#: ../../tutorials/trusted-publishing.md:215
msgid "Configure automatic publishing to PyPI"
-msgstr ""
+msgstr "Configurar publicação automática no PyPI"
#: ../../tutorials/trusted-publishing.md:217
msgid ""
@@ -6637,6 +8650,11 @@ msgid ""
"to maintain a separation of tasks. This is why, in the previous section, "
"we uploaded the artifact to the temporary storage."
msgstr ""
+"O job que você configurou acima usando GitHub Actions faz o build do seu "
+"pacote usando seu código. Você ainda precisa fazer upload dele para o PyPI. "
+"Você poderia fazer upload do pacote no mesmo job, mas é melhor criar um "
+"separado para manter a separação de tarefas. É por isso que, na seção "
+"anterior, fizemos upload do artifact para o armazenamento temporário."
#: ../../tutorials/trusted-publishing.md:223
msgid ""
@@ -6644,48 +8662,55 @@ msgid ""
" PyPI. Since the `build` job does nothing else, there is no possibility "
"that the package could get compromised before the release."
msgstr ""
+"No novo job, você fará download do pacote de lá e fará upload dele para o "
+"PyPI. Como o job `build` não faz mais nada, não há possibilidade de o "
+"pacote ser comprometido antes do release."
#: ../../tutorials/trusted-publishing.md:227
msgid "Step 1: Add the upload job"
-msgstr ""
+msgstr "Passo 1: Adicionar o job de upload"
#: ../../tutorials/trusted-publishing.md:229
msgid ""
"In the `release.yaml` file, add the following new job, after the job "
"defined in the previous section:"
msgstr ""
+"No arquivo `release.yaml`, adicione o seguinte novo job, após o job "
+"definido na seção anterior:"
#: ../../tutorials/trusted-publishing.md:238
msgid "Make sure to change the URL"
-msgstr ""
+msgstr "Certifique-se de alterar a URL"
#: ../../tutorials/trusted-publishing.md:240
msgid "Remember to change the `url:` value to the URL for your package on PyPI!"
-msgstr ""
+msgstr "Lembre-se de alterar o valor `url:` para a URL do seu pacote no PyPI!"
#: ../../tutorials/trusted-publishing.md:243
msgid "This job has two steps:"
-msgstr ""
+msgstr "Este job tem dois steps:"
#: ../../tutorials/trusted-publishing.md:245
msgid ""
"It uses `download-artifact` to download the artifacts built in the "
"previous job"
-msgstr ""
+msgstr "Ele usa `download-artifact` para baixar os artifacts build no job anterior"
#: ../../tutorials/trusted-publishing.md:247
msgid "It uses `gh-action-pypi-publish` to publish the package to PyPI."
-msgstr ""
+msgstr "Ele usa `gh-action-pypi-publish` para publicar o pacote no PyPI."
#: ../../tutorials/trusted-publishing.md:249
msgid ""
"You are almost there!! Now, you just need to enable trusted publishing "
"for your project on PyPI. And then, your work is done!"
msgstr ""
+"Você está quase lá!! Agora, você só precisa habilitar o trusted publishing "
+"para seu projeto no PyPI. E então, seu trabalho está feito!"
#: ../../tutorials/trusted-publishing.md:252
msgid "Step 2: Enable trusted publishing on PyPI"
-msgstr ""
+msgstr "Passo 2: Habilitar trusted publishing no PyPI"
#: ../../tutorials/trusted-publishing.md:256
msgid ""
@@ -6694,6 +8719,11 @@ msgid ""
"Step 3 securely uploads to PyPI. Shows chain of trust with lock icon "
"connecting GitHub Action to Python Package Index."
msgstr ""
+"Diagrama mostrando o workflow de trusted publisher do PyPI: o Passo 1 faz "
+"build dos arquivos de distribuição via GitHub, o Passo 2 usa um environment "
+"confiável (PyPI), o Passo 3 faz upload seguro para o PyPI. Mostra a cadeia "
+"de confiança com ícone de cadeado conectando a GitHub Action ao Python "
+"pacote Index."
#: ../../tutorials/trusted-publishing.md:261
msgid ""
@@ -6707,6 +8737,15 @@ msgid ""
"your account, until you discover the compromise and revoke the leaked "
"credentials."
msgstr ""
+"Antes da criação do trusted publishing, para fazer upload para o PyPI a "
+"partir de GitHub Actions você precisaria adicionar o nome de usuário e a "
+"senha como argumentos ao step `gh-action-pypi-publish`. Embora a "
+"documentação recomende usar o environment `secrets` do GitHub para a "
+"senha/token, em vários casos os usuários colavam a senha diretamente no "
+"arquivo de workflow. Além disso, o vazamento acidental da senha ou token "
+"poderia permitir que atacantes publicassem novos pacotes usando sua conta, "
+"até que você descobrisse o comprometimento e revogasse as credenciais "
+"vazadas."
#: ../../tutorials/trusted-publishing.md:269
msgid ""
@@ -6716,16 +8755,24 @@ msgid ""
"and then map that workflow to an automation workflow (e.g., GitHub "
"Actions) that is allowed to publish the package."
msgstr ""
+"Para prevenir esses incidentes e melhorar a segurança da cadeia de "
+"suprimentos, desenvolvedores criaram o [Trusted "
+"Publishing](https://docs.pypi.org/trusted-publishers/). O Trusted "
+"Publishing permite registrar um workflow de publicação no PyPI e mapear "
+"esse workflow a um workflow de automação (por exemplo, GitHub Actions) que "
+"tem permissão para publicar o pacote."
#: ../../tutorials/trusted-publishing.md:274
msgid ""
"You do not need to enter a token or password value in a trusted publisher"
" workflow. It's a secure connection between your"
msgstr ""
+"Você não precisa inserir um valor de token ou senha em um workflow de "
+"trusted publisher. É uma conexão segura entre seu"
#: ../../tutorials/trusted-publishing.md:277
msgid "Trusted Publishing outside of GitHub Actions"
-msgstr ""
+msgstr "Trusted Publishing fora do GitHub Actions"
#: ../../tutorials/trusted-publishing.md:280
msgid ""
@@ -6734,6 +8781,10 @@ msgid ""
"multiple workflows or multiple publishers for the same package. These are"
" advanced uses, out of scope for this lesson."
msgstr ""
+"O Trusted Publishing suporta outras plataformas de automação, além do "
+"GitHub Actions. Também é possível configurar um trusted publisher "
+"para vários workflows ou vários publishers para o mesmo pacote. Esses são "
+"usos avançados, fora do escopo desta lição."
#: ../../tutorials/trusted-publishing.md:286
msgid ""
@@ -6742,6 +8793,9 @@ msgid ""
"PyPI publishing](create-python-package), you should have this project "
"already created."
msgstr ""
+"Para esta lição, focaremos em configurar um trusted publisher para um "
+"projeto que já existe no PyPI. Se você completou a [lição sobre publicação "
+"no PyPI](create-python-package), você já deve ter este projeto criado."
#: ../../tutorials/trusted-publishing.md:288
msgid ""
@@ -6749,6 +8803,9 @@ msgid ""
"releases will only run the GitHub Actions workflow we are configuring in "
"`release.yaml`."
msgstr ""
+"Esta etapa de configuração precisa ser executada apenas uma vez para "
+"o projeto. Releases futuros apenas executarão o workflow do GitHub Actions "
+"que estamos configurando em `release.yaml`."
#: ../../tutorials/trusted-publishing.md:291
msgid ""
@@ -6756,12 +8813,16 @@ msgid ""
"PyPI](https://pypi.org/manage/projects/), click \"Manage\" on any project"
" you want to configure."
msgstr ""
+"Na [página \"Your projects\" no PyPI](https://pypi.org/manage/projects/), "
+"clique em \"Manage\" em qualquer projeto que você queira configurar."
#: ../../tutorials/trusted-publishing.md:295
msgid ""
"Graphic showing a screenshot of the \"Your projects\" page on PyPI. The "
"\"Manage\" button for one of the projects is highlighted."
msgstr ""
+"Gráfico mostrando uma captura de tela da página \"Your projects\" no PyPI. O "
+"botão \"Manage\" de um dos projetos está destacado."
#: ../../tutorials/trusted-publishing.md:297
msgid ""
@@ -6769,22 +8830,28 @@ msgid ""
"for one of the projects, the one we want to configure trusted publishing "
"for."
msgstr ""
+"Esta imagem mostra vários projetos. O botão \"Manage\" está destacado para um "
+"dos projetos, aquele que queremos configurar o trusted publishing."
#: ../../tutorials/trusted-publishing.md:300
msgid "Then click \"Publishing\" in the project's sidebar."
-msgstr ""
+msgstr "Em seguida, clique em \"Publishing\" na barra lateral do projeto."
#: ../../tutorials/trusted-publishing.md:303
msgid ""
"Graphic showing the management page for one project. The \"Publishing\" "
"link in the sidebar is highlighted."
msgstr ""
+"Gráfico mostrando a página de gerenciamento de um projeto. O link "
+"\"Publishing\" na barra lateral está destacado."
#: ../../tutorials/trusted-publishing.md:305
msgid ""
"Once clicking on the \"Manage\" button we got to the project's page. In "
"the sidebar, we have the \"publishing\" option, as highlighted here."
msgstr ""
+"Após clicar no botão \"Manage\", chegamos à página do projeto. Na barra "
+"lateral, temos a opção \"publishing\", conforme destacado aqui."
#: ../../tutorials/trusted-publishing.md:309
msgid ""
@@ -6792,6 +8859,9 @@ msgid ""
"Trusted publishers can be configured via the forms here. Fill in the "
"GitHub form with the following information:"
msgstr ""
+"Isso levará você à página de configuração do publisher para o "
+"projeto. Trusted publishers podem ser configurados via os formulários aqui. "
+"Preencha o formulário do GitHub com as seguintes informações:"
#: ../../tutorials/trusted-publishing.md:313
msgid ""
@@ -6799,32 +8869,40 @@ msgid ""
"project. If this is your personal project, then use your GitHub username "
"here."
msgstr ""
+"Owner: o nome da organização GitHub da organização que possui o projeto. Se "
+"este for seu projeto pessoal, use seu nome de usuário GitHub aqui."
#: ../../tutorials/trusted-publishing.md:315
msgid "Repository name: the name of the repository that contains the project."
-msgstr ""
+msgstr "Repository name: o nome do repositório que contém o projeto."
#: ../../tutorials/trusted-publishing.md:316
msgid ""
"Workflow name: Should be `release.yaml` if you followed this guide, it is"
" the workflow we just configured."
msgstr ""
+"Workflow name: Deve ser `release.yaml` se você seguiu este guia; é o "
+"workflow que acabamos de configurar."
#: ../../tutorials/trusted-publishing.md:318
msgid ""
"Environment name: Should be `pypi`, as that is what we configured in "
"`release.yaml`."
msgstr ""
+"Environment name: Deve ser `pypi`, pois é o que configuramos em "
+"`release.yaml`."
#: ../../tutorials/trusted-publishing.md:321
msgid ""
"Once you fill in this form and click \"Add\" the publisher is configured "
"and can be used to publish new releases of your package."
msgstr ""
+"Depois de preencher este formulário e clicar em \"Add\", o publisher "
+"é configurado e pode ser usado para publicar novos releases do seu pacote."
#: ../../tutorials/trusted-publishing.md:324
msgid "Fully hardened GitHub Actions release workflow"
-msgstr ""
+msgstr "Workflow de release do GitHub Actions totalmente endurecido"
#: ../../tutorials/trusted-publishing.md:326
msgid ""
@@ -6833,12 +8911,18 @@ msgid ""
"should be scoped at job level and be as minimal as possible. A workflow "
"that configures trusted publishing and also does this is the following:"
msgstr ""
+"Para maior segurança, também é recomendado controlar as permissões do token "
+"GitHub usado em cada job do workflow. As permissões devem ser definidas no "
+"nível do job e ser o mais mínimas possível. Um workflow que configura "
+"trusted publishing e também faz isso é o seguinte:"
#: ../../tutorials/trusted-publishing.md:336
msgid ""
"You can copy the above into your `release.yaml` file. You only need to "
"update the `url:` field and configure trusted publishing on PyPI."
msgstr ""
+"Você pode copiar o conteúdo acima para seu arquivo `release.yaml`. Você só "
+"precisa atualizar o campo `url:` e configurar o trusted publishing no PyPI."
#: ../../tutorials/trusted-publishing.md:340
msgid ""
@@ -6846,10 +8930,13 @@ msgid ""
"GitHub actions. However, it's good to turn on Dependabot to update the "
"action versions in the future."
msgstr ""
+"O workflow acima deve estar atualizado com as versões atuais das GitHub "
+"actions. No entanto, é bom habilitar o Dependabot para atualizar as versões "
+"das actions no futuro."
#: ../../tutorials/trusted-publishing.md:343
msgid "You have enabled trusted publishing for your project"
-msgstr ""
+msgstr "Você habilitou o trusted publishing para seu projeto"
#: ../../tutorials/trusted-publishing.md:345
msgid ""
@@ -6863,23 +8950,36 @@ msgid ""
"world use on the real PyPI, then you can follow the same steps to publish"
" it securely."
msgstr ""
+"Parabéns!! Você agora configurou seu projeto para fazer releases seguros "
+"quando uma nova versão for marcada no GitHub. O workflow que configuramos "
+"faz o build do pacote a partir da versão exata do código que estamos "
+"marcando. Isso oferece uma garantia para seus usuários de que o pacote que "
+"você fez release faz exatamente o que o código declara que faz. Há pouca ou "
+"nenhuma possibilidade de vulnerabilidades relacionadas à cadeia de "
+"suprimentos surgirem do seu pacote! Se você tem um pacote pronto para uso "
+"no mundo real no PyPI real, pode seguiros mesmos passos para publicá-lo com "
+"segurança."
#: ../../tutorials/trusted-publishing.md:349
msgid ""
-msgstr ""
+msgstr ""
#: ../../tutorials/trusted-publishing.md:350
msgid ""
""
msgstr ""
+""
#: ../../tutorials/trusted-publishing.md:351
msgid ""
""
msgstr ""
+""
#: ../../tutorials/trusted-publishing.md:352
msgid ""
-msgstr ""
+msgstr ""
diff --git a/maintain-automate/dev-installs.md b/maintain-automate/dev-installs.md
new file mode 100644
index 000000000..f4d9e6e74
--- /dev/null
+++ b/maintain-automate/dev-installs.md
@@ -0,0 +1,54 @@
+## Installing your own code
+
+You have a conda environment. It works. Maybe it has packages that were hard to install, like GDAL, HDF5, or other compiled scientific dependencies.
+
+You also have code that you are writing locally. Maybe it started as a script, or maybe it is already organized as a Python package. You want to use that code inside the same environment with GDAL, HDF5, and the other tools you already installed.
+
+The instructions to install your code into a conda environment is to first activate your conda environment `conda activate your_env_name` and then run this: `python -m pip install -e . --no-deps`. You may also see this written as `pip install -e .`. See [The Full Command](the-full-command) section below for more info as to the details of this command.
+
+If this is the first time you're seeing pip install commands, you may not be totally sure what is going on here. Conda created the environment, why am I using `pip` to install things now? You may have heard guidance to generally try and avoid mixing conda and pip? You may already be mixing conda and pip and things are totally fine. You may also not care at all because `pip install -e .` seems to work fine and you can get back to what you're actually trying to do. (If that last one is you, you're also probably not reading this page). In any event, all of these situations are perfectly understandable and totally okay for you to be going through.
+
+So... why pip? The short answer is that conda and pip are doing different jobs here.
+
+The slightly longer, mostly apologetic, answer is this is just sort of the current ergonomics of how python packaging works and, honestly? Most of us have turned this confusing pain point into muscle memory. But not you. You're new here. And you're like... wat? And you're totally justified to feel this way.
+
+So, what is happening here? `conda` manages the environment: the Python runtime, compiled libraries, command line tools, and the packages your project depends on. This is stuff that you've already been doing and you're comfortable with (or at least familiar with). `pip` is doing one Python-packaging-specific job: installing your local package into the active environment.
+
+In editable mode, the `-e` flag, `pip` connects the active environment to the source files you are editing. And... why exactly is that useful?
+
+It's useful because it gives you a pretty quick development loop:
+
+1. Edit your code in your editor.
+2. Run it from a terminal, test suite, or Jupyter notebook.
+3. Edit the code again.
+4. Run it again without reinstalling your package.
+
+So the goal is not to switch from conda to pip. The goal is to keep using your conda environment while making your local package importable inside that environment.
+
+## Should I use pip for everything now?
+
+Probably not?
+
+If conda is already working well for your project, keep using conda to manage the environment. Use pip only for this one task: installing your local package in editable mode.
+
+If you are curious about other tools like uv, pixi, Hatch, or pip-only workflows, see [Environment Managers](environment-managers.md). Those tools can be great choices. But you do not need to switch tools just to develop your local package inside a conda environment.
+
+As a final note, people in the conda ecosystem are actively working on better conda/pip interoperability. In the future, this workflow may become less awkward. For now, `python -m pip install -e . --no-deps` is the standard bridge.
+
+(the-full-command)=
+## The full command
+
+`python -m pip install -e . --no-deps` is a mouthful. I know it. You know it. Why do we do these things?
+
+The simplest version of this is:
+```
+pip install -e .
+```
+
+But we recommend the longer version in conda environments for two reasons.
+
+The `python -m pip` part ensures that you're using pip from the active conda environment. Sometimes this results in `pip not found`, which is actually a good error to get because it means you prevented an annoying-to-debug failure mode. If this happens just `conda install pip` and try again. So, why? Sometimes `pip` from a different python environment can be on your PATH which means that you'll accidentally install your code into an unrelated python environment. This can be confusing to debug. This has happened to most (all?) of us. It usually hits when you're least prepared to debug and fix it. So we recommend the `python -m` in front to prevent this from happening. But it does add to the length of the command.
+
+The `--no-deps` flag tells pip not to install your package's dependencies, if you have any listed in your project. If you do have them listed, probably in your `pyproject.toml` file, then `pip install -e .` will try to install the dependencies that are listed in that file. In a conda environment, that can range from "mostly fine" to "now my environment is broken and I am not sure how to recover."
+
+With `--no-deps`, pip installs only your local package. You remain responsible for managing the environment dependencies with conda.
diff --git a/maintain-automate/index.md b/maintain-automate/index.md
index 5df9412bf..0d013e788 100644
--- a/maintain-automate/index.md
+++ b/maintain-automate/index.md
@@ -43,6 +43,11 @@ Together, task runners and CI/CD create a robust development workflow
that makes your package easier to maintain and more welcoming to
contributors.
+[**Development installs in conda environments**](dev-installs) help
+you connect conda-based scientific development environments with local
+Python package development. This is especially useful when your package
+depends on compiled or system-level dependencies that conda manages well.
+
:::{toctree}
:caption: Maintain & Automate
:hidden: true
@@ -50,4 +55,5 @@ contributors.
What is CI?
Task runners
Environment Managers
+Development installs with conda
:::
diff --git a/noxfile.py b/noxfile.py
index c17b6e3ab..56d1dcbea 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -33,7 +33,13 @@
# Sphinx parameters used when checking that links work
# ref: https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-the-linkcheck-builder
-LINKCHECK_PARAMETERS = ["-b", "linkcheck", "-Dlinkcheck_timeout=5", "-Dlinkcheck_rate_limit_timeout=30", "--fail-on-warning"]
+LINKCHECK_PARAMETERS = [
+ "-b",
+ "linkcheck",
+ "-Dlinkcheck_timeout=5",
+ "-Dlinkcheck_rate_limit_timeout=30",
+ "--fail-on-warning",
+]
LINKCHECK_OUTPUT_DIR = pathlib.Path(BUILD_DIR, "linkcheck_output")
# Sphinx parameters used to test the build of the guide
@@ -42,6 +48,9 @@
# Sphinx parameters to generate translation templates
TRANSLATION_TEMPLATE_PARAMETERS = ["-b", "gettext"]
+# Scripts that maintain the translation stats and the translation issues
+TRANSLATION_SCRIPTS_DIR = pathlib.Path("scripts", "translation")
+
# Sphinx-autobuild ignore and include parameters
AUTOBUILD_IGNORE = [
"_build",
@@ -263,6 +272,7 @@ def update_release_languages(session):
if RELEASE_LANGUAGES:
session.install("-e", ".")
session.install("sphinx-intl")
+ _clean_translation_templates(session)
session.log("Updating templates (.pot)")
session.run(
SPHINX_BUILD,
@@ -292,6 +302,7 @@ def update_language(session):
if lang in LANGUAGES:
session.install("-e", ".")
session.install("sphinx-intl")
+ _clean_translation_templates(session)
session.log("Updating templates (.pot)")
session.run(
SPHINX_BUILD,
@@ -384,6 +395,18 @@ def build_all_languages(session):
session.warn("No languages defined in LANGUAGES")
return
session.install("-e", ".")
+ session.log(f"Declared languages: {LANGUAGES}")
+ session.log(f"Release languages: {RELEASE_LANGUAGES}")
+ sphinx_env = _sphinx_env(session)
+ # if running from the docs or docs-test sessions, build only release languages
+ BUILD_LANGUAGES = RELEASE_LANGUAGES if sphinx_env == "production" else LANGUAGES
+ # only build languages that have a locale folder
+ BUILD_LANGUAGES = [
+ lang for lang in BUILD_LANGUAGES if (TRANSLATION_LOCALES_DIR / lang).exists()
+ ]
+ session.log(
+ f"Building languages{' for release' if sphinx_env == 'production' else ''}: {BUILD_LANGUAGES}"
+ )
for lang in LANGUAGES:
session.log(f"Building [{lang}] guide")
session.run(
@@ -396,25 +419,6 @@ def build_all_languages(session):
*session.posargs,
)
session.log(f"Translations built for {LANGUAGES}")
- sphinx_env = _sphinx_env(session)
-
- # if running from the docs or docs-test sessions, build only release languages
- BUILD_LANGUAGES = RELEASE_LANGUAGES if sphinx_env == "production" else LANGUAGES
- # only build languages that have a locale folder
- BUILD_LANGUAGES = [
- lang for lang in BUILD_LANGUAGES if (TRANSLATION_LOCALES_DIR / lang).exists()
- ]
- session.log(f"Declared languages: {LANGUAGES}")
- session.log(f"Release languages: {RELEASE_LANGUAGES}")
- session.log(
- f"Building languages{' for release' if sphinx_env == 'production' else ''}: {BUILD_LANGUAGES}"
- )
- if not BUILD_LANGUAGES:
- session.warn("No translations to build")
- else:
- session.notify(
- "build-languages", [sphinx_env, BUILD_LANGUAGES, *session.posargs]
- )
@nox.session(name="build-all-languages-test")
@@ -428,6 +432,30 @@ def build_all_languages_test(session):
session.notify("build-all-languages", [*TEST_PARAMETERS])
+@nox.session(name="test-translation-scripts")
+def test_translation_scripts(session):
+ """
+ Run the unit tests for the translation helper scripts.
+
+ Only pytest is installed since it's the only thing the scripts under test need.
+ """
+ session.install("pytest")
+ session.run("pytest", str(TRANSLATION_SCRIPTS_DIR), *session.posargs)
+
+
+def _clean_translation_templates(session) -> None:
+ """
+ Remove the gettext output directory before regenerating the templates (.pot).
+
+ The gettext build is incremental and never deletes .pot files whose source page is
+ gone. `sphinx-intl update` creates a .po for every .pot it finds. We need to clean
+ so orphan .pot files don't continue to create orphan .po files in each locale.
+ """
+ if TRANSLATION_TEMPLATE_DIR.exists():
+ session.log(f"Cleaning out {TRANSLATION_TEMPLATE_DIR}")
+ shutil.rmtree(TRANSLATION_TEMPLATE_DIR)
+
+
def _sphinx_env(session) -> str:
"""
Get the sphinx env, from the first positional argument if present or from the
diff --git a/package-structure-code/declare-dependencies.md b/package-structure-code/declare-dependencies.md
index 56519a44c..0ae0c8c76 100644
--- a/package-structure-code/declare-dependencies.md
+++ b/package-structure-code/declare-dependencies.md
@@ -29,8 +29,8 @@ While `pyproject.toml` is now the standard, you may sometimes encounter older ap
### Why specify dependencies
-Specifying dependencies in the [project.dependency] array of your `pyproject.toml` file ensures that libraries needed to run your package are correctly installed into a user's environment.
-For instance, if your package requires Pandas to run properly, and you add Pandas to the `project.dependency` array, Pandas will be installed into the users' environment when they install your package using uv, pip, or conda.
+Specifying dependencies in the `project.dependencies` array of your `pyproject.toml` file ensures that libraries needed to run your package are correctly installed into a user's environment.
+For instance, if your package requires Pandas to run properly, and you add Pandas to the `project.dependencies` array, Pandas will be installed into the users' environment when they install your package using uv, pip, or conda.
```toml
[project]
@@ -42,10 +42,10 @@ dependencies = [
]
```
-Development dependencies make it easier for contributors to work on your package. You can set up instructions for running specific workflows, such as tests, linting, and even typing, that automatically install groups of development dependencies. These dependencies can be stored in arrays (lists of dependencies) within a `[development-group]` table.
+Development dependencies make it easier for contributors to work on your package. You can set up instructions for running specific workflows, such as tests, linting, and even typing, that automatically install groups of development dependencies. These dependencies can be stored in arrays (lists of dependencies) within a `[dependency-groups]` table.
```toml
-[development-group]
+[dependency-groups]
tests = [
"pytest",
"pytest-cov"
@@ -56,9 +56,9 @@ tests = [
There are three different types of dependencies that you will learn about on this page:
-1. **Required dependencies:** These are dependencies that need to be installed for your package to work correctly in a user's environment. You add these dependencies to the `[project.dependencies]` table in your pyproject.toml file.
-2. **Feature Dependencies:** These are dependencies that are required if a user wants to access additional functionality (that is not core) to your package. Store these in the `[project.optional.dependencies]` table or your pyproject.toml file.
-3. **Development Dependencies:** These dependencies are required if someone wants to develop or work on your package. These include instance linters, testing tools like pytest and mypy are examples of development dependencies. Store these in the `[project.dependency.groups]` table or your pyproject.toml file.
+1. **Required dependencies:** These are dependencies that need to be installed for your package to work correctly in a user's environment. You add these dependencies to the `project.dependencies` table in your pyproject.toml file.
+2. **Feature Dependencies:** These are dependencies that are required if a user wants to access additional functionality (that is not core) to your package. Store these in the `[project.optional-dependencies]` table or your pyproject.toml file.
+3. **Development Dependencies:** These dependencies are required if someone wants to develop or work on your package. These include instance linters, testing tools like pytest and mypy are examples of development dependencies. Store these in the `[dependency-groups]` table of your pyproject.toml file.
:::{tip}
A dependency is not part of your project's codebase. It is a package or software called
@@ -106,7 +106,7 @@ You can use uv to add dependencies to your pyproject.toml file:
uv add numpy
```
-Will add numpy as a dependency to your `project.dependency` array:
+Will add numpy as a dependency to your `project.dependencies` array:
```toml
[project]
@@ -139,7 +139,7 @@ are more reliable as they can't be changed
(optional-dependencies)=
## 2. Optional dependencies
-Optional (also referred to as feature) dependencies can be installed by users as needed. Optional dependencies add specific features to your package that not all users need. For example, if your package has an optional interactive plotting feature that uses Bokeh, you would list Bokeh as an `[optional.dependency]`. Users who want interactive plotting will install it. Users who don't need plotting don't have to install it.
+Optional (also referred to as feature) dependencies can be installed by users as needed. Optional dependencies add specific features to your package that not all users need. For example, if your package has an optional interactive plotting feature that uses Bokeh, you would list Bokeh under `[project.optional-dependencies]`. Users who want interactive plotting will install it. Users who don't need plotting don't have to install it.
Place these dependencies in the `[project.optional-dependencies]` table.
@@ -148,13 +148,13 @@ Place these dependencies in the `[project.optional-dependencies]` table.
...
...
...
-[optional.dependencies]
+[project.optional-dependencies]
plot = ["bokeh"]
```
When a user installs your package, uv, pip, or conda automatically installs all required dependencies. Optional dependencies are only installed if the user explicitly requests them.
-:::{dropdown} How to Add optional.dependencies using UV
+:::{dropdown} How to Add optional dependencies using UV
:icon: eye
:color: primary
@@ -169,7 +169,7 @@ uv add --optional feature pandas
Will add this to your pyproject.toml file:
```toml
-[optional.dependencies]
+[project.optional-dependencies]
feature = [
"pandas>=2.3.3",
]
@@ -193,35 +193,34 @@ to install and use your package. However, they will make it easier for
contributors to your project to setup development environments
locally.
-:::{admonition} New: PEP 735 development dependency groups
+:::{admonition} New: PEP 735 dependency groups
:class: note
-`[development-groups]` is a newer specification introduced by PEP 735.
-They are intended to organize development dependencies and are intentionally separate from `[project.optional-dependencies]`, which can be installed into a user's
-environment.
+`[dependency-groups]` is a newer specification introduced by PEP 735.
+They are intended to organize development dependencies and are intentionally separate from `[project.optional-dependencies]`, which can be installed into a user's environment.
:::
### How to declare dependency groups
You declare development dependencies in your **pyproject.toml** file
-within a `[development-groups]` table.
+within a `[dependency-groups]` table.
Similar to optional-dependencies, you can create separate subgroups or arrays with names using the syntax: `group-name = ["dep1", "dep2"]`
```toml
-[development-groups]
+[dependency-groups]
tests = ["pytest", "pytest-cov"]
docs = ["sphinx", "pydata-sphinx-theme"]
lint = ["ruff", "black"]
```
-:::{dropdown} How to Add [development.group] using UV
+:::{dropdown} How to Add [dependency-groups] using UV
:icon: eye
:color: primary
You can use uv to add dependencies to your pyproject.toml file:
-**Add a development group dependency:**
+**Add a development dependency group:**
```bash
uv add --group tests pytest
@@ -296,7 +295,7 @@ You can also use pip and install dependencies into the environment of your choic
We shouldn't show UV pip install, so how do you add optional feature deps with UV??
:::
-**Install development groups:**
+**Install dependency groups:**
:::::{tab-set}
@@ -306,8 +305,15 @@ You can use uv sync to sync dependency groups in your uv-managed venv
```console
uv sync --group docs # Single group
uv sync --group docs --group test # Multiple groups
-uv sync --all-groups # All development groups
+uv sync --all-groups # All dependency groups
+```
+:::{tip}
+use ``--active`` with ``uv sync`` to prefer the currently active virtual environment over the project's own managed environment:
+
+```console
+$ uv sync --active --group docs
```
+:::
**Install optional dependencies:**
@@ -317,6 +323,20 @@ $ uv pip install -e ".[docs]" # Single group
$ uv pip install -e ".[docs,tests,lint]" # Multiple groups
```
+:::{tip}
+Use the `--active` flag with `uv run` to prefer the currently active
+virtual environment over the project's own managed environment:
+
+```console
+$ uv run --active pip install -e ".[docs]"
+```
+:::
+
+This is useful when you have activated a virtual environment and want
+`uv run` to use it instead of automatically creating or selecting the
+project's environment.
+:::
+
**Install everything (package + all dependencies):**
```console
@@ -506,3 +526,214 @@ Why you specify dependencies
How to specify dependencies
When you use different specifiers
:::
+
+## Dependency Locking
+
+In addition to declaring dependencies in `pyproject.toml`, it is common for
+packages to lock down exact versions of all their dependencies in a separate
+lock file. A lock file provides benefits of reproducibility, security, and
+potentially faster installs, among other things. Pinning the exact dependency
+versions used in a project eliminates "works on my machine" bugs and gives CI a
+reproducible baseline. For applications meant to be run rather than imported,
+lock files also ensure anyone installing the project gets a known-good set of
+dependencies instead of whatever happens to be latest.
+
+### `pyproject.toml` vs lock file
+* `pyproject.toml`: defines all environments you intend to support for users
+importing your package into their project.
+* **lock file**: defines a specific environment used for development
+
+`pyproject.toml` should be permissive, erring on the side of allowing too much
+even if it may allow untested environments. In most cases, it is better that
+users install your package but encounter an issue rather than being restricted
+from installing your package by the `pyproject.toml` when it would otherwise
+work.
+
+A lock file is the opposite. If it installs, the resulting environment should
+work even if this means some valid environments are excluded.
+
+:::{admonition} Standardized Lock File
+:class: note
+As of March 2025, [PEP 751](https://peps.python.org/pep-0751) defined a standard
+`pylock.toml` format to unify the various lock file formats in use by other
+package managers (e.g. `uv.lock`, `poetry.lock`, `pdm.lock`). Most package
+managers provide ways to generate a PEP 751 compatible file. See [PyPA
+specification](https://packaging.python.org/en/latest/specifications/pylock-toml/)
+for up-to-date formatting info on `pylock.toml`
+:::
+
+### How to work with lock files?
+
+Lock files are not written by hand. Package managers and IDEs provide tools
+to create, update, and reformat lock files as needed.
+
+1) **Create** - Package managers often do this automatically though it can be
+done manually. For example, calling `uv add numpy` will automatically create a
+`uv.lock` file, setup the environment, and install numpy.
+2) **Update** - This is not done automatically by package managers.
+Maintainers can choose to do this manually or setup their own automated
+workflow. Updates can be for specific packages or all dependencies.
+3) **Reformat** - Package managers currently use native formats (e.g.
+uv uses `uv.lock`) and provide tools for converting into `pylock.toml` and other
+formats (e.g. `requirements.txt`) when needed
+
+Below is the uv CLI workflow for lock files:
+
+```sh
+# Create a uv.lock file based on pyproject.toml
+> uv lock
+
+# Update uv.lock
+> uv lock --upgrade
+> uv lock --upgrade-package pandas
+
+# Install packages into environment based on uv.lock
+> uv sync
+
+# PEP 751 pylock.toml support
+> uv export --format pylock.toml -o pylock.toml # export uv.lock -> pylock.toml
+> uv pip sync pylock.toml # install from pylock.toml
+```
+See [official docs](https://docs.astral.sh/uv/concepts/projects/sync/) for more
+details. See also the relevant docs for [Poetry](
+https://python-poetry.org/docs/basic-usage/#installing-dependencies) and
+[PDM](https://pdm-project.org/latest/usage/lockfile/).
+### Should I use a lock file?
+
+Most package managers will generate a lock file automatically for you (e.g. uv,
+Poetry, PDM). The real question is when you version control the lock file as
+part of your package.
+
+:::{admonition} Recommendation: Versioning a lock file
+:class: tip
+If your project is an application others use directly, include a lock file as
+the recommended environment.
+
+If your project is a library to be used in other projects and it is mature
+enough to have CI, include a lock file for CI and contributors. For a small
+library only you maintain that is shared amongst people you know, waiting to add
+a lock file is not an issue.
+In general, you should version the lock file.
+
+For private libraries shared within a team, a lock file is less important. But
+if the project is an application or tool that others run directly, instead of
+importing into their code, committing the lock file is generally the most
+convenient choice. It gives users a reproducible set of dependencies instead of
+having each user resolve from pyproject.toml.
+:::
+
+:::{admonition} Recommendation: Which format to version control
+:class: tip
+Version control the standard `pylock.toml` format.
+:::
+
+There is some maintenance cost from lock files. Maintainers should aim to update
+the lock file neither too rarely nor too often.
+* Too rarely means you risk missing updates with bugfixes, security patches,
+performance improvements, etc.
+* Too often means you may introduce bugs or even security vulnerablilites before
+maintainers of your dependencies catch them. Package managers are starting to
+support dependency cooldowns to mitigate this.
+
+:::{admonition} Recommendation: Updating a lock file
+:class: tip
+Update lock files frequently (e.g. weekly) but configure a dependency cooldown
+of several days to avoid automatically installing the latest packages. Only
+override the cooldown if a new package has a needed bug fix or security
+patch.
+:::
+
+::::{dropdown} Dependency cooldowns
+:icon: info
+:color: primary
+[Dependency cooldowns](
+https://blog.pypi.org/posts/2026-04-02-incident-report-litellm-telnyx-supply-chain-attack/#dependency-cooldowns
+) are strongly encouraged by security experts to avoid automatically downloading
+the latest package updates that may have been compromised with malware. Package
+manager tools are starting to support configurations for cooldowns
+```sh
+> uv lock --exclude-newer "3 days"`
+```
+or in `pyproject.toml`
+```toml
+[tool.uv]
+exclude-newer = "3 days"
+```
+
+Integrating cooldown constrained lock files into CI is important since this is
+where new packages are commonly tested first. Automated testing code that
+resolves `[project.dependencies]` every time
+```sh
+> python -m pip install .
+```
+can be replaced with lock file based installations
+```sh
+> uv pip sync pylock.toml
+```
+after pylock.toml has been added to the project.
+```sh
+> uv lock --exclude-newer "3 days"`
+> uv export --format pylock.toml -o pylock.toml
+```
+Support for this varies across automated testing frameworks (e.g. hatch, nox) so
+consult their documentation for how to install dependencies from lock files with
+dependency cooldowns.
+::::
+
+When you decide to update a lock file, make sure to test that the resulting
+environment works before committing. If it fails because of some dependency
+update, then it may be necessary to update `pyproject.toml` to cap the supported
+versions of that dependency unless/until the code can be updated to support it.
+
+It can also be good, though not necessary, to double check what changed when
+updating a lock file. The diff can be noisy so the main changes to focus on are
+1) major version updates (e.g. `pandas 2.X.X` -> `pandas 3.X.X`)
+2) new transitive dependencies (i.e. not part of your `pyproject.toml`)
+
+:::{tip}
+A lock file captures one environment for CI testing, not the full compatibility
+range declared in `pyproject.toml`. Projects that use lock files may want to
+have CI test other environments such as
+
+1) the latest packages consistent with your `pyproject.toml`, subject to
+dependency cooldowns. This lets you know if a dependency update breaks your
+package.
+2) older supported versions of Python to let you know if a recent change to your
+package no longer works with an older Python release.
+
+:::
+
+
+::::{dropdown} What about `requirements.txt`
+:icon: info
+:color: primary
+
+Older approaches to locking used `pip freeze` to generate a `requirements.txt`
+that got used as a lock file. These are minimal lock files that pin a specific
+version for the system on which the command was run. They might look like
+```
+# requirements.txt
+numpy==2.4.6
+plotly==6.7.0
+pyzmq==27.1.0
+```
+
+However, this minimal level of specificity has several downsides making lock
+files the preferred format:
+* The versions satisfying `pyproject.toml` may differ between your Windows
+laptop and the Linux server your CI runs on. A single lock file contains the
+information needed to build platform specific and Python version specific
+environments. In contrast, a separate `requirements.txt` files is needed to
+store this information (e.g. `requirements.ci.txt`,
+`requirements.py313-macos.txt`)
+* Packages can get updated without a version update for both legitimate and
+malicious reasons. Lock files include package hashes to catch this. A
+[hash](https://en.wikipedia.org/wiki/Hash_function) is a unique signature
+computed from the code and any change to the code
+will cause the release to have a different hash even if is given the same
+release version number.
+* Other metadata determined during resolution of `pyproject.toml` (e.g. which
+dependencies are transitive, where the packages were downloaded from, etc.) that
+can help speed up future installs is lost.
+
+::::
diff --git a/package-structure-code/intro.md b/package-structure-code/intro.md
index 809129313..bf6e6f666 100644
--- a/package-structure-code/intro.md
+++ b/package-structure-code/intro.md
@@ -14,7 +14,7 @@ This section covers everything you need to structure your Python package, config
- Learn by doing with guided examples
- Perfect for your first package
-```{button-link} /tutorials/intro
+```{button-link} ../tutorials/intro.html
:color: success
:class: sd-rounded-pill
diff --git a/pyproject.toml b/pyproject.toml
index 04455b54b..5edf2d186 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -8,7 +8,7 @@ dynamic = [
"version"
]
dependencies = [
- "pydata-sphinx-theme==0.17.1",
+ "pydata-sphinx-theme==0.20.0",
"myst-nb",
"sphinx",
"sphinx-autobuild",
diff --git a/scripts/translation/check_source_changes.py b/scripts/translation/check_source_changes.py
new file mode 100644
index 000000000..4aec940cc
--- /dev/null
+++ b/scripts/translation/check_source_changes.py
@@ -0,0 +1,120 @@
+#!/usr/bin/env python
+"""Report which `.po` files a change to the English text could affect.
+
+Run over a list of changed files by the GitHub Action ``track-english-changes.yml``,
+which posts the report itself to a tracking issue once the change is on ``main``.
+
+The tracking issue is the lowest numbered issue with the label ``po-refresh-tracker``.
+"""
+
+from __future__ import annotations
+
+import sys
+from pathlib import Path
+
+BASE_DIR = Path(__file__).resolve().parents[2]
+LOCALES_DIR = BASE_DIR / "locales"
+
+
+MAX_ROWS = 20
+
+
+def po_stems() -> set[str]:
+ """Every ``.po`` name in the repository, without the extension."""
+ return {po_file.stem for po_file in LOCALES_DIR.rglob("*.po")}
+
+
+def english_source(stem: str) -> Path | None:
+ """The English page or section a ``.po`` file is generated from."""
+ page = BASE_DIR / f"{stem}.md"
+ if page.is_file():
+ return page
+ section = BASE_DIR / stem
+ return section if section.is_dir() else None
+
+
+def translated_sources() -> dict[str, str]:
+ """Map each repo-relative English source path to the ``.po`` stem it feeds."""
+ found = {}
+ for stem in po_stems():
+ source = english_source(stem)
+ if source is not None:
+ found[str(source.relative_to(BASE_DIR))] = stem
+ return found
+
+
+def locale_codes() -> list[str]:
+ """The locales with catalogs, in alphabetical order."""
+ return sorted(path.name for path in LOCALES_DIR.iterdir() if path.is_dir())
+
+
+def affected(
+ changed: list[str], sources: dict[str, str] | None = None
+) -> dict[str, list[str]]:
+ """Group the changed paths by the ``.po`` stem whose source they belong to.
+
+ In the current config, a source may be a single page or a whole section directory,
+ so a path counts when it is the source itself or sits anywhere below it. Paths that
+ do not belong to any known source are ignored.
+ """
+ known = translated_sources() if sources is None else sources
+ hits: dict[str, list[str]] = {}
+ for path in changed:
+ for source, stem in known.items():
+ if path == source or path.startswith(f"{source}/"):
+ hits.setdefault(stem, []).append(path)
+ break
+ return {stem: sorted(paths) for stem, paths in sorted(hits.items())}
+
+
+def render_report(hits: dict[str, list[str]], locales: list[str]) -> str:
+ """The comment left on the tracking issue, or an empty string when no hits."""
+ if not hits:
+ return ""
+ rows = sorted((path, stem) for stem, paths in hits.items() for path in paths)
+ shown, hidden = rows[:MAX_ROWS], max(0, len(rows) - MAX_ROWS)
+ table = "\n".join(f"| `{path}` | `{stem}.po` |" for path, stem in shown)
+ more = f"\n\n{hidden} more changed file(s) are not listed." if hidden else ""
+ listed = ", ".join(locales)
+ return f"""### English text changed, catalogs (.po files) may need refreshing
+
+A change on `main` touched English text of the guide so the `.po` files may need to be
+refreshed by a maintainer.
+
+| English source changed | Catalog it belongs to |
+| :--- | :--- |
+{table}{more}
+
+To refresh the catalogs, one locale at a time:
+
+```
+nox -s update-language -- # {listed}
+```
+
+Once the catalogs are refreshed, close the issue. The GitHub Action will reopen it when
+new changes are made to the English text.
+
+If this change did not touch any translatable text (e.g., code sample, image, link, format),
+you can simply close the issue directly.
+"""
+
+
+def main(argv: list[str]) -> int:
+ """Print the report for the paths listed in the file named by ``argv[1]``.
+
+ Always succeeds (return 0). We do not fail in CI and cause a red mark on
+ a pull request for something its author very likely did not do wrong.
+ """
+ if len(argv) != 2:
+ print(f"usage: {Path(argv[0]).name} CHANGED_FILES", file=sys.stderr)
+ return 0
+ listing = Path(argv[1])
+ changed = listing.read_text(encoding="utf-8").split() if listing.is_file() else []
+ report = render_report(affected(changed), locale_codes())
+ if report:
+ print(report, end="")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv))
diff --git a/scripts/translation/stats.py b/scripts/translation/stats.py
new file mode 100644
index 000000000..657d56171
--- /dev/null
+++ b/scripts/translation/stats.py
@@ -0,0 +1,290 @@
+#!/usr/bin/env python3
+"""Translation statistics for the guide's ``.po`` files.
+
+This module computes the translation counts and percentages. It is used by:
+
+* ``_ext/translation_graph.py`` to build the site's translation heatmap.
+* ``update_translation_issues.py`` to update the GitHub translation issues.
+
+It can also be run as a script outputting the stats dataset as JSON on stdout.
+
+Note: a string counts as *translated* only when it has a non-empty translation and is
+**not** marked ``fuzzy``.
+"""
+
+from __future__ import annotations
+
+import functools
+import json
+import math
+import subprocess
+from datetime import datetime, timezone
+from pathlib import Path
+from typing import Annotated as A
+from typing import TypeAlias, TypedDict
+
+from babel.messages import pofile
+
+# scripts/translation/stats.py -> repository root
+BASE_DIR = Path(__file__).resolve().parents[2]
+LOCALES_DIR = BASE_DIR / "locales"
+
+# Timeout for the individual git calls used to date the English sources.
+GIT_TIMEOUT = 10
+
+
+class PoFileStats(TypedDict):
+ """Counts for a single ``.po`` file.
+
+ ``stale`` and ``missing`` describe how well the catalog tracks the current
+ English text; see :func:`get_translation_stats` for how they are derived.
+ """
+
+ total: int
+ translated: int
+ fuzzy: int
+ untranslated: int
+ percentage: float
+ stale: bool
+ missing: int
+
+
+TranslationStats: TypeAlias = dict[
+ A[str, "locale"], dict[A[str, "po_file"], PoFileStats]
+]
+
+
+def english_source(po_file: str) -> Path | None:
+ """Return the English source a ``.po`` file was generated from.
+
+ Each ``.po`` file should correspond to either a top-level page (``index.md``)
+ or a section directory (``documentation/``). A ``.po`` file with neither is
+ one whose English source has since been removed -- e.g.,
+ ``continuous-integration`` is discontinued: it still has ``.po``
+ files on disk, but no translation work should be reported against it.
+ """
+ page = BASE_DIR / f"{po_file}.md"
+ if page.is_file():
+ return page
+ section = BASE_DIR / po_file
+ if section.is_dir():
+ return section
+ return None
+
+
+def get_po_files() -> list[Path]:
+ """Every ``.po`` file across all locales, in a stable order.
+
+ Note that discontinued ``.po`` files are included here.
+ :func:`get_translation_stats` does the filtering.
+ """
+ return sorted(LOCALES_DIR.rglob("*.po"))
+
+
+def _as_aware(value: datetime | None) -> datetime | None:
+ """Normalize to an aware datetime."""
+ if value is None:
+ return None
+ if value.tzinfo is None:
+ return value.replace(tzinfo=timezone.utc)
+ return value
+
+
+def _git(*args: str) -> str | None:
+ """Run a read-only git command, returning ``None`` if it cannot be used.
+
+ Note: this must not raise errors, because it runs inside the Sphinx build
+ and if an error occurs (git is missing) the build must not fail over a
+ check for .po staleness.
+ """
+ try:
+ result = subprocess.run(
+ ["git", *args],
+ cwd=BASE_DIR,
+ capture_output=True,
+ text=True,
+ timeout=GIT_TIMEOUT,
+ )
+ except (OSError, subprocess.SubprocessError):
+ return None
+ if result.returncode != 0:
+ return None
+ return result.stdout.strip() or None
+
+
+@functools.lru_cache(maxsize=1)
+def git_history_available() -> bool:
+ """Whether git history is deep enough to date the English sources.
+
+ ``actions/checkout`` clones with ``fetch-depth: 1`` by default, which leaves
+ no usable history. Callers should surface a negative answer rather than
+ imply that nothing is stale -- "we could not check" is not "all current".
+ """
+ return _git("rev-parse", "--is-shallow-repository") == "false"
+
+
+@functools.lru_cache(maxsize=None)
+def source_last_modified(po_file: str) -> datetime | None:
+ """When the ``.po`` file's English source was last committed, if knowable."""
+ source = english_source(po_file)
+ if source is None or not git_history_available():
+ return None
+ stamp = _git("log", "-1", "--format=%cI", "--", str(source))
+ if stamp is None:
+ return None
+ try:
+ return _as_aware(datetime.fromisoformat(stamp))
+ except ValueError:
+ return None
+
+
+def _count(catalog) -> dict[str, int | float]:
+ """Count strings in an already-parsed catalog."""
+ total = translated = fuzzy = 0
+ for message in catalog:
+ if not message.id:
+ continue # the header entry carries no source string
+ total += 1
+ if message.fuzzy:
+ fuzzy += 1
+ elif message.string:
+ translated += 1
+
+ # Floor instead of round: a catalog at 99.996% must not report 100,
+ # because that would imply it is complete when it is not.
+ percentage = math.floor(translated / total * 10000) / 100 if total else 0.0
+ return {
+ "total": total,
+ "translated": translated,
+ "fuzzy": fuzzy,
+ "untranslated": total - translated - fuzzy,
+ "percentage": percentage,
+ }
+
+
+def calculate_translation_percentage(po_path: Path, locale: str) -> PoFileStats:
+ """Counts for a single ``.po`` file, read in isolation.
+
+ ``stale`` and ``missing`` are reported as "not stale" here because detecting
+ staleness requires comparing a ``.po`` file against its siblings in other
+ locales. Use :func:`get_translation_stats` when those fields matter.
+ """
+ with open(po_path, "r", encoding="utf-8") as f:
+ catalog = pofile.read_po(f, locale=locale)
+ return {**_count(catalog), "stale": False, "missing": 0}
+
+
+def get_translation_stats(*, include_english: bool = False) -> TranslationStats:
+ """Stats for every locale, keyed ``{locale: {po_file: PoFileStats}}``.
+
+ Discontinued ``.po`` files are omitted entirely.
+
+ Note: this functions tries to detect the staleness of a ``.po`` file
+ using a couple of heuristics since to compute the exact staleness requires
+ comparing it with a ``.pot`` file that is costly to generate.
+
+ We mark a ``.po`` file as ``stale`` when its ``POT-Creation-Date`` predates
+ the most recent evidence that the English source changed, which is the
+ later of:
+
+ * the newest ``POT-Creation-Date`` for the same ``.po`` file in any locale,
+ and
+ * the last commit touching the English source of that ``.po`` file.
+
+ So ``stale`` means *may* be out of date, not *is*: a commit touching a section
+ may not have changed a single translatable string, so this over-reports by
+ design. ``missing`` counts strings present in the most complete version of
+ this ``.po`` file in another locale but absent in this one.
+ Note that ``missing`` and ``stale`` are different metrics: a ``.po`` file
+ can be stale but not missing any strings, and vice versa.
+
+ When ``include_english`` is true, an ``"en"`` locale is prepended in which
+ every ``.po`` file is 100% translated by definition (for use as a
+ reference row in a chart). It is off by default.
+ """
+ entries = []
+ for po_path in get_po_files():
+ po_file = po_path.stem
+ if english_source(po_file) is None:
+ continue
+ locale = po_path.parent.parent.name
+ with open(po_path, "r", encoding="utf-8") as f:
+ catalog = pofile.read_po(f, locale=locale)
+ entries.append(
+ (locale, po_file, _count(catalog), _as_aware(catalog.creation_date))
+ )
+
+ # Reference points, computed across every locale of the same ``.po`` file.
+ newest_sync: dict[str, datetime] = {}
+ largest_total: dict[str, int] = {}
+ for _, po_file, counts, created in entries:
+ if created is not None:
+ known = newest_sync.get(po_file)
+ if known is None or created > known:
+ newest_sync[po_file] = created
+ largest_total[po_file] = max(largest_total.get(po_file, 0), counts["total"])
+
+ results: TranslationStats = {}
+ for locale, po_file, counts, created in entries:
+ reference = newest_sync.get(po_file)
+ source_date = source_last_modified(po_file)
+ if source_date is not None and (reference is None or source_date > reference):
+ reference = source_date
+
+ results.setdefault(locale, {})[po_file] = {
+ **counts,
+ "stale": bool(created and reference and created < reference),
+ "missing": largest_total[po_file] - counts["total"],
+ }
+
+ if include_english:
+ results = {"en": _english_row(results)} | results
+ return results
+
+
+def english_string_counts(stats: TranslationStats) -> dict[str, int]:
+ """How many strings each ``.po`` file has in the current English source.
+
+ This is the most complete count seen across all locales, since locales
+ might not be up to date. This serves as an estimate of the number of
+ strings in an up-to-date ``.pot`` file without having to generate it.
+ """
+ counts: dict[str, int] = {}
+ for locale_stats in stats.values():
+ for po_file, po_file_stats in locale_stats.items():
+ full_count = po_file_stats["total"] + po_file_stats["missing"]
+ counts[po_file] = max(counts.get(po_file, 0), full_count)
+ return dict(sorted(counts.items()))
+
+
+def _english_row(stats: TranslationStats) -> dict[str, PoFileStats]:
+ """The fake English locale: every ``.po`` file 100% translated."""
+ return {
+ po_file: PoFileStats(
+ total=count,
+ translated=count,
+ fuzzy=0,
+ untranslated=0,
+ percentage=100,
+ stale=False,
+ missing=0,
+ )
+ for po_file, count in english_string_counts(stats).items()
+ }
+
+
+def main() -> None:
+ import argparse
+
+ parser = argparse.ArgumentParser(description="Print translation stats as JSON.")
+ parser.add_argument(
+ "--english",
+ action="store_true",
+ help="prepend a synthetic 'en' locale at 100%% (off by default)",
+ )
+ args = parser.parse_args()
+ print(json.dumps(get_translation_stats(include_english=args.english), indent=2))
+
+
+if __name__ == "__main__":
+ main()
diff --git a/scripts/translation/test_check_source_changes.py b/scripts/translation/test_check_source_changes.py
new file mode 100644
index 000000000..5ab984ff5
--- /dev/null
+++ b/scripts/translation/test_check_source_changes.py
@@ -0,0 +1,79 @@
+"""Tests for the pull request warning about changed English text."""
+
+from __future__ import annotations
+
+import check_source_changes as check
+
+# A stand-in for the real repository layout: one page, one section.
+SOURCES = {
+ "index.md": "index",
+ "documentation": "documentation",
+ "CONTRIBUTING.md": "CONTRIBUTING",
+}
+
+
+def test_a_page_is_matched_exactly():
+ assert check.affected(["index.md"], SOURCES) == {"index": ["index.md"]}
+
+
+def test_a_section_matches_everything_below_it():
+ changed = ["documentation/index.md", "documentation/write/tutorials.md"]
+ assert check.affected(changed, SOURCES) == {"documentation": sorted(changed)}
+
+
+def test_paths_outside_any_translated_source_are_ignored():
+ changed = [
+ "scripts/translation/stats.py",
+ ".github/workflows/build-book.yml",
+ "noxfile.py",
+ "locales/es/LC_MESSAGES/index.po",
+ ]
+ assert check.affected(changed, SOURCES) == {}
+
+
+def test_a_name_that_only_starts_the_same_does_not_match():
+ """`documentation-old.md` is not part of the `documentation/` section."""
+ assert check.affected(["documentation-old.md"], SOURCES) == {}
+
+
+def test_several_sources_are_grouped_by_catalog():
+ changed = ["index.md", "documentation/a.md", "documentation/b.md"]
+ assert check.affected(changed, SOURCES) == {
+ "documentation": ["documentation/a.md", "documentation/b.md"],
+ "index": ["index.md"],
+ }
+
+
+def test_no_report_when_nothing_relevant_changed():
+ assert check.render_report({}, ["es", "pt"]) == ""
+
+
+def test_report_names_the_files_the_catalogs_and_the_command():
+ report = check.render_report(
+ {"documentation": ["documentation/a.md"]}, ["es", "pt"]
+ )
+ assert "`documentation/a.md` | `documentation.po`" in report
+ assert "nox -s update-language -- # es, pt" in report
+ assert "may need refreshing" in report
+
+
+def test_a_long_report_says_how_much_it_left_out():
+ paths = [f"documentation/page{n}.md" for n in range(check.MAX_ROWS + 5)]
+ report = check.render_report({"documentation": paths}, ["es"])
+ assert "5 more changed file(s) are not listed." in report
+ assert report.count("| `documentation/page") == check.MAX_ROWS
+
+
+def test_catalogs_without_an_english_source_are_not_translated_any_more():
+ """`continuous-integration.po` is still on disk; its page is gone."""
+ assert check.english_source("continuous-integration") is None
+ assert "continuous-integration" not in check.translated_sources().values()
+
+
+def test_the_real_repository_resolves_to_pages_and_sections():
+ """A guard on the layout the workflow depends on."""
+ sources = check.translated_sources()
+ assert sources["index.md"] == "index"
+ assert sources["documentation"] == "documentation"
+ assert all("locales" not in path for path in sources)
+ assert "es" in check.locale_codes()