From 8954361b403e9b12e28226155c7edbec027f9ecc Mon Sep 17 00:00:00 2001
From: Wes Turner <50891+westurner@users.noreply.github.com>
Date: Sat, 19 Dec 2020 15:12:12 -0500
Subject: [PATCH 0001/1064] Update distributing-packages-using-setuptools.rst
---
.../distributing-packages-using-setuptools.rst | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/source/guides/distributing-packages-using-setuptools.rst b/source/guides/distributing-packages-using-setuptools.rst
index ff7a360a3..d2fac7512 100644
--- a/source/guides/distributing-packages-using-setuptools.rst
+++ b/source/guides/distributing-packages-using-setuptools.rst
@@ -659,24 +659,27 @@ For example::
Working in "development mode"
=============================
-Although not required, it's common to locally install your project in "editable"
-or "develop" mode while you're working on it. This allows your project to be
-both installed and editable in project form.
+You can install a project in "editable"
+or "develop" mode while you're working on it.
+When installed as editable, a project can be
+edited in-place without reinstallation:
+changes to Python source files in projects installed as editable will be reflected the next time an interpreter process is started.
-Assuming you're in the root of your project directory, then run:
+To install a Python package in "editable"/"development" mode
+Change directory to the root of the project directory and run ``pip install -e .``:
::
pip install -e .
-Although somewhat cryptic, ``-e`` is short for ``--editable``, and ``.`` refers
+The pip command-line flag ``-e`` is short for ``--editable``, and ``.`` refers
to the current working directory, so together, it means to install the current
directory (i.e. your project) in editable mode. This will also install any
dependencies declared with "install_requires" and any scripts declared with
"console_scripts". Dependencies will be installed in the usual, non-editable mode.
-It's fairly common to also want to install some of your dependencies in editable
+You may want to install some of your dependencies in editable
mode as well. For example, supposing your project requires "foo" and "bar", but
you want "bar" installed from VCS in editable mode, then you could construct a
requirements file like so::
From a714ff7788ba96889e992ee83ac33657e6f688d6 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Mon, 12 Jul 2021 19:38:37 +0800
Subject: [PATCH 0002/1064] Add some sections
---
.../deploying-python-applications.rst | 41 ++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/source/discussions/deploying-python-applications.rst b/source/discussions/deploying-python-applications.rst
index 8734833f5..a013694c6 100644
--- a/source/discussions/deploying-python-applications.rst
+++ b/source/discussions/deploying-python-applications.rst
@@ -83,9 +83,48 @@ Application bundles
FIXME
- - py2exe/py2app/PEX
- wheels kinda/sorta
+Windows
+-------
+
+py2exe
+^^^^^^
+
+`py2exe `__ is a distutils extension which
+allows to build standalone Windows executable programs (32-bit and 64-bit)
+from Python scripts. Python versions included in the official development
+cycle are supported (from 3.6 to 3.9 included). py2exe can build console
+executables and windows (GUI) executables. Building windows services,
+and DLL/EXE COM servers might work but it is not actively supported.
+The distutils extension is released under the MIT-licence and Mozilla
+Public License 2.0.
+
+Mac OS
+------
+
+py2app
+^^^^^^
+
+`py2app `__ is a Python setuptools
+command which will allow you to make standalone Mac OS X application
+bundles and plugins from Python scripts. Note that py2app MUST be used
+on OSX to build applications, it cannot create Mac applications on other
+platforms. py2app is released under the MIT-license.
+
+Unix (including Linux and Mac OS X)
+-----------------------------------
+
+pex
+^^^
+
+`pex `__ is a library for generating .pex
+(Python EXecutable) files which are executable Python environments in the
+spirit of virtualenvs. pex is an expansion upon the ideas outlined in PEP 441
+and makes the deployment of Python applications as simple as cp. pex files may
+even include multiple platform-specific Python distributions, meaning that a
+single pex file can be portable across Linux and OS X. pex is released under the
+Apache License 2.0.
Configuration management
========================
From 21b6da8ff483be7208f26d5155c8825bc7f4114a Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Mon, 12 Jul 2021 23:32:01 +0800
Subject: [PATCH 0003/1064] Add reference to pep and status of Python branches
---
source/discussions/deploying-python-applications.rst | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/source/discussions/deploying-python-applications.rst b/source/discussions/deploying-python-applications.rst
index a013694c6..f2bb5f756 100644
--- a/source/discussions/deploying-python-applications.rst
+++ b/source/discussions/deploying-python-applications.rst
@@ -94,12 +94,14 @@ py2exe
`py2exe `__ is a distutils extension which
allows to build standalone Windows executable programs (32-bit and 64-bit)
from Python scripts. Python versions included in the official development
-cycle are supported (from 3.6 to 3.9 included). py2exe can build console
-executables and windows (GUI) executables. Building windows services,
-and DLL/EXE COM servers might work but it is not actively supported.
+cycle are supported (refers to `Status of Python branches`__). py2exe can
+build console executables and windows (GUI) executables. Building windows
+services, and DLL/EXE COM servers might work but it is not actively supported.
The distutils extension is released under the MIT-licence and Mozilla
Public License 2.0.
+.. __: https://devguide.python.org/#status-of-python-branches
+
Mac OS
------
@@ -120,7 +122,7 @@ pex
`pex `__ is a library for generating .pex
(Python EXecutable) files which are executable Python environments in the
-spirit of virtualenvs. pex is an expansion upon the ideas outlined in PEP 441
+spirit of virtualenvs. pex is an expansion upon the ideas outlined in :pep:`441`
and makes the deployment of Python applications as simple as cp. pex files may
even include multiple platform-specific Python distributions, meaning that a
single pex file can be portable across Linux and OS X. pex is released under the
From 8ac20c1968bc0e32825a77195f7d92c488eacee7 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 13:21:36 +0800
Subject: [PATCH 0004/1064] Add translation.yml
---
.github/workflows/translation.yml | 36 +++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 .github/workflows/translation.yml
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
new file mode 100644
index 000000000..ba648d60d
--- /dev/null
+++ b/.github/workflows/translation.yml
@@ -0,0 +1,36 @@
+name: Translation
+
+ on:
+ schedule:
+ - cron: '0 0 0 ? * WED,SUN *'
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Set up Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: 3.9
+
+ - name: Install Dependencies
+ run: python -m pip install --upgrade nox virtualenv
+
+ - name: Create local changes
+ run: python -m nox -s translation
+
+ - name: Commit files
+ run: |
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
+ git config --local user.name "github-actions[bot]"
+ git_hash=$(git rev-parse --short "$GITHUB_SHA")
+ git commit -m "Update messages.pot ${git_hash}" locales/messages.pot
+ if: ${{job.status == 'failure'}}
+ run: echo "No Changes!"
+
+ - name: Push changes
+ run: |
+ git push --atomic main
\ No newline at end of file
From b5e4f1835f229fd82d407fc029b89952fa66edeb Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 13:23:19 +0800
Subject: [PATCH 0005/1064] Update translation.yml
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index ba648d60d..d3b3ba8b3 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -1,6 +1,6 @@
name: Translation
- on:
+on:
schedule:
- cron: '0 0 0 ? * WED,SUN *'
From b9abb50bb1e15ce593024e6d3ffe5f0d27bf3d8b Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 13:23:59 +0800
Subject: [PATCH 0006/1064] Update translation.yml
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index d3b3ba8b3..b8e8ea1be 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -2,7 +2,7 @@ name: Translation
on:
schedule:
- - cron: '0 0 0 ? * WED,SUN *'
+ - cron: '00 00,00 * * *'
jobs:
build:
From d7eaa57ab540a686d0606bcaa72f94c4a4f86af0 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 13:25:31 +0800
Subject: [PATCH 0007/1064] Update translation.yml
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index b8e8ea1be..c86b837a0 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -2,7 +2,7 @@ name: Translation
on:
schedule:
- - cron: '00 00,00 * * *'
+ - cron: '30 13 * * *'
jobs:
build:
From 39fabed254c10a67bf11ae8f6558f9b978a58936 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 14:08:04 +0800
Subject: [PATCH 0008/1064] Update translation.yml
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index c86b837a0..2cd188f29 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -2,7 +2,7 @@ name: Translation
on:
schedule:
- - cron: '30 13 * * *'
+ - cron: '10 14 * * *'
jobs:
build:
From 0e28251d2999effe7b0267d08920166ea77b4d02 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 14:18:22 +0800
Subject: [PATCH 0009/1064] Update cron spec
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 2cd188f29..e6f6ae1ce 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -2,7 +2,7 @@ name: Translation
on:
schedule:
- - cron: '10 14 * * *'
+ - cron: '00 00,00 * * sun'
jobs:
build:
From 4780502450042337a09f00858e4e15c6019c9d33 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 15:06:08 +0800
Subject: [PATCH 0010/1064] Update translation.yml
---
.github/workflows/translation.yml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index e6f6ae1ce..e93ceaf14 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -28,9 +28,11 @@ jobs:
git config --local user.name "github-actions[bot]"
git_hash=$(git rev-parse --short "$GITHUB_SHA")
git commit -m "Update messages.pot ${git_hash}" locales/messages.pot
- if: ${{job.status == 'failure'}}
- run: echo "No Changes!"
+
+ - name: Check on failures
+ if: ${{job.status == 'failure'}}
+ run: echo "No Changes!"
- name: Push changes
run: |
- git push --atomic main
\ No newline at end of file
+ git push --atomic origin test1
\ No newline at end of file
From 552714ecc1f8a675440acba74d630097724189d1 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 15:06:55 +0800
Subject: [PATCH 0011/1064] Update translation.yml
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index e93ceaf14..f54b41333 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -35,4 +35,4 @@ jobs:
- name: Push changes
run: |
- git push --atomic origin test1
\ No newline at end of file
+ git push --atomic origin main
\ No newline at end of file
From 962f81e1176ccdcb57b4eaa8760d460fada64849 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 13 Jul 2021 19:12:33 +0800
Subject: [PATCH 0012/1064] Add a new line at the end of file
---
.github/workflows/translation.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index f54b41333..b4c1fd35b 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -35,4 +35,5 @@ jobs:
- name: Push changes
run: |
- git push --atomic origin main
\ No newline at end of file
+ git push --atomic origin main
+
From d281ad460107810c8d97625a0c1d4037fbb6c777 Mon Sep 17 00:00:00 2001
From: Rafael Fontenelle
Date: Fri, 16 Jul 2021 16:24:09 -0300
Subject: [PATCH 0013/1064] fix: easy_install URL now includes /deprecated/
---
source/discussions/pip-vs-easy-install.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/discussions/pip-vs-easy-install.rst b/source/discussions/pip-vs-easy-install.rst
index 5f2d18737..4fa590cf3 100644
--- a/source/discussions/pip-vs-easy-install.rst
+++ b/source/discussions/pip-vs-easy-install.rst
@@ -65,7 +65,7 @@ Here's a breakdown of the important differences between pip and the deprecated e
.. _deprecated: https://setuptools.readthedocs.io/en/latest/history.html#v42-0-0
-.. [1] https://setuptools.readthedocs.io/en/latest/easy_install.html#natural-script-launcher
+.. [1] https://setuptools.readthedocs.io/en/latest/deprecated/easy_install.html#natural-script-launcher
.. _pylauncher support: https://bitbucket.org/vinay.sajip/pylauncher
From fc8ffc9c8a82971f5217b88f66e285bf3940ad97 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Tue, 24 Aug 2021 16:21:14 +0800
Subject: [PATCH 0014/1064] Fix a broken link
---
source/guides/index-mirrors-and-caches.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/guides/index-mirrors-and-caches.rst b/source/guides/index-mirrors-and-caches.rst
index 284665eb0..9a1c5d41c 100644
--- a/source/guides/index-mirrors-and-caches.rst
+++ b/source/guides/index-mirrors-and-caches.rst
@@ -35,7 +35,7 @@ cached copies of :term:`packages `:
those downloaded files instead of going to PyPI.
2. A variation on the above which pre-builds the installation files for
the requirements using `python -m pip wheel
- `_:
+ `_:
.. code-block:: bash
From cf22b4523589185ee3de96624e95dd67d185291b Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Tue, 24 Aug 2021 17:15:09 +0800
Subject: [PATCH 0015/1064] `Mac OS X/OS X` -> `macOS`
---
source/discussions/deploying-python-applications.rst | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/source/discussions/deploying-python-applications.rst b/source/discussions/deploying-python-applications.rst
index f2bb5f756..989ca2e89 100644
--- a/source/discussions/deploying-python-applications.rst
+++ b/source/discussions/deploying-python-applications.rst
@@ -102,19 +102,19 @@ Public License 2.0.
.. __: https://devguide.python.org/#status-of-python-branches
-Mac OS
-------
+macOS
+-----
py2app
^^^^^^
`py2app `__ is a Python setuptools
-command which will allow you to make standalone Mac OS X application
+command which will allow you to make standalone macOS application
bundles and plugins from Python scripts. Note that py2app MUST be used
-on OSX to build applications, it cannot create Mac applications on other
+on macOS to build applications, it cannot create Mac applications on other
platforms. py2app is released under the MIT-license.
-Unix (including Linux and Mac OS X)
+Unix (including Linux and macOS)
-----------------------------------
pex
@@ -125,7 +125,7 @@ pex
spirit of virtualenvs. pex is an expansion upon the ideas outlined in :pep:`441`
and makes the deployment of Python applications as simple as cp. pex files may
even include multiple platform-specific Python distributions, meaning that a
-single pex file can be portable across Linux and OS X. pex is released under the
+single pex file can be portable across Linux and macOS. pex is released under the
Apache License 2.0.
Configuration management
From 0b1ee1390b8b9e8506d438c89a20092b9b4ebefa Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Tue, 24 Aug 2021 17:16:03 +0800
Subject: [PATCH 0016/1064] Update reviewed date
---
source/discussions/deploying-python-applications.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/discussions/deploying-python-applications.rst b/source/discussions/deploying-python-applications.rst
index 989ca2e89..d1bd91c05 100644
--- a/source/discussions/deploying-python-applications.rst
+++ b/source/discussions/deploying-python-applications.rst
@@ -4,7 +4,7 @@ Deploying Python applications
=============================
:Page Status: Incomplete
-:Last Reviewed: 2014-11-11
+:Last Reviewed: 2021-8-24
.. contents:: Contents
:local:
From cfa58cd016cd8a1e935bf2db144a8189151bc60a Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 24 Aug 2021 17:47:06 +0800
Subject: [PATCH 0017/1064] Use intersphinx references
---
source/guides/index-mirrors-and-caches.rst | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/source/guides/index-mirrors-and-caches.rst b/source/guides/index-mirrors-and-caches.rst
index 9a1c5d41c..fdfece50a 100644
--- a/source/guides/index-mirrors-and-caches.rst
+++ b/source/guides/index-mirrors-and-caches.rst
@@ -34,8 +34,7 @@ cached copies of :term:`packages `:
by downloading all the requirements for a project and then pointing pip at
those downloaded files instead of going to PyPI.
2. A variation on the above which pre-builds the installation files for
- the requirements using `python -m pip wheel
- `_:
+ the requirements using :ref:`python -m pip wheel `:
.. code-block:: bash
From 9c1f339af1480c6affda784ec1dd5b59446cd336 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Tue, 24 Aug 2021 18:26:43 +0800
Subject: [PATCH 0018/1064] Add a comment for cron
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index b4c1fd35b..a0001e765 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -2,7 +2,7 @@ name: Translation
on:
schedule:
- - cron: '00 00,00 * * sun'
+ - cron: '00 00,00 * * sun' # Runs at 00:00 UTC on Sunday
jobs:
build:
From 622d8265dbc8a093ce13d17f3af0e6fe555fca00 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 24 Aug 2021 20:01:08 +0800
Subject: [PATCH 0019/1064] FIx a broken link
---
source/tutorials/installing-packages.rst | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/source/tutorials/installing-packages.rst b/source/tutorials/installing-packages.rst
index ccda474f0..201980283 100644
--- a/source/tutorials/installing-packages.rst
+++ b/source/tutorials/installing-packages.rst
@@ -298,8 +298,7 @@ Use pip for Installing
:ref:`pip` is the recommended installer. Below, we'll cover the most common
usage scenarios. For more detail, see the `pip docs `_,
-which includes a complete `Reference Guide
-`_.
+which includes a complete :std:doc:`Reference Guide `.
Installing from PyPI
From 33dbcf5a5661b28348793d65c7a23b129b64f1e3 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Tue, 24 Aug 2021 20:07:57 +0800
Subject: [PATCH 0020/1064] Use intersphinx references
---
source/guides/index-mirrors-and-caches.rst | 2 +-
source/tutorials/installing-packages.rst | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/guides/index-mirrors-and-caches.rst b/source/guides/index-mirrors-and-caches.rst
index fdfece50a..e765a5d07 100644
--- a/source/guides/index-mirrors-and-caches.rst
+++ b/source/guides/index-mirrors-and-caches.rst
@@ -34,7 +34,7 @@ cached copies of :term:`packages `:
by downloading all the requirements for a project and then pointing pip at
those downloaded files instead of going to PyPI.
2. A variation on the above which pre-builds the installation files for
- the requirements using :ref:`python -m pip wheel `:
+ the requirements using :ref:`python -m pip wheel `:
.. code-block:: bash
diff --git a/source/tutorials/installing-packages.rst b/source/tutorials/installing-packages.rst
index 201980283..ab5156fb5 100644
--- a/source/tutorials/installing-packages.rst
+++ b/source/tutorials/installing-packages.rst
@@ -298,7 +298,7 @@ Use pip for Installing
:ref:`pip` is the recommended installer. Below, we'll cover the most common
usage scenarios. For more detail, see the `pip docs `_,
-which includes a complete :std:doc:`Reference Guide `.
+which includes a complete :doc:`Reference Guide `.
Installing from PyPI
From b24d52d370699a5854d1d2578b6586681406fb6c Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:12:57 +0800
Subject: [PATCH 0021/1064] Use `failure()`
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index a0001e765..025af8a66 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -30,7 +30,7 @@ jobs:
git commit -m "Update messages.pot ${git_hash}" locales/messages.pot
- name: Check on failures
- if: ${{job.status == 'failure'}}
+ if: failure()
run: echo "No Changes!"
- name: Push changes
From b7d3cdb603c97910773c6c5ad2602949ba415656 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:19:19 +0800
Subject: [PATCH 0022/1064] Update comment
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 025af8a66..1703ca48a 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -19,7 +19,7 @@ jobs:
- name: Install Dependencies
run: python -m pip install --upgrade nox virtualenv
- - name: Create local changes
+ - name: Generate a fresh POT file out of RST documents
run: python -m nox -s translation
- name: Commit files
From 88645afa6f8441fe06f593a53506f63e26e8bcaa Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:19:41 +0800
Subject: [PATCH 0023/1064] Update .github/workflows/translation.yml
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 1703ca48a..c7e7d2f59 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -36,4 +36,3 @@ jobs:
- name: Push changes
run: |
git push --atomic origin main
-
From 6d488423b1382a425ee5ab5b4597b9fe86a8e2dd Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:19:50 +0800
Subject: [PATCH 0024/1064] Update .github/workflows/translation.yml
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index c7e7d2f59..de29d3fed 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -28,7 +28,6 @@ jobs:
git config --local user.name "github-actions[bot]"
git_hash=$(git rev-parse --short "$GITHUB_SHA")
git commit -m "Update messages.pot ${git_hash}" locales/messages.pot
-
- name: Check on failures
if: failure()
run: echo "No Changes!"
From 13b6460d29e0bcf4c0c660f65d83eb29ccf4a2ba Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:20:02 +0800
Subject: [PATCH 0025/1064] Update name
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index de29d3fed..4aa9b8043 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -22,7 +22,7 @@ jobs:
- name: Generate a fresh POT file out of RST documents
run: python -m nox -s translation
- - name: Commit files
+ - name: Commit the POT file to Git
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
From 5b8faa975efff21299d7104168a0fe6dde19b44e Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:20:21 +0800
Subject: [PATCH 0026/1064] Update commit message
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 4aa9b8043..c752afa2d 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -27,7 +27,7 @@ jobs:
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git_hash=$(git rev-parse --short "$GITHUB_SHA")
- git commit -m "Update messages.pot ${git_hash}" locales/messages.pot
+ git commit -m "Update messages.pot as of version ${git_hash}" locales/messages.pot
- name: Check on failures
if: failure()
run: echo "No Changes!"
From 238397a96aa25da36e83c4f28e7b9b418fa83fb5 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:22:00 +0800
Subject: [PATCH 0027/1064] Update the message
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index c752afa2d..b7279a118 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -30,7 +30,7 @@ jobs:
git commit -m "Update messages.pot as of version ${git_hash}" locales/messages.pot
- name: Check on failures
if: failure()
- run: echo "No Changes!"
+ run: echo "There are no changes to the RST sources since the last update. Nothing to do."
- name: Push changes
run: |
From 8b2e3a4c9c90e70504f85e89d6a07b737e0ebc0c Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:22:14 +0800
Subject: [PATCH 0028/1064] Update name
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index b7279a118..29d22b936 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -28,7 +28,7 @@ jobs:
git config --local user.name "github-actions[bot]"
git_hash=$(git rev-parse --short "$GITHUB_SHA")
git commit -m "Update messages.pot as of version ${git_hash}" locales/messages.pot
- - name: Check on failures
+ - name: Check if any sources have changed since the last update
if: failure()
run: echo "There are no changes to the RST sources since the last update. Nothing to do."
From 28d37351386a397adfe2e26a7ba650e9de54d3da Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:22:26 +0800
Subject: [PATCH 0029/1064] Update name
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 29d22b936..9b28c150f 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -16,7 +16,7 @@ jobs:
with:
python-version: 3.9
- - name: Install Dependencies
+ - name: Install Python tooling
run: python -m pip install --upgrade nox virtualenv
- name: Generate a fresh POT file out of RST documents
From 8f3530ee4b00988b959d6093fb76d16d87b23229 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:22:56 +0800
Subject: [PATCH 0030/1064] Update .github/workflows/translation.yml
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 9b28c150f..23e4b0277 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -26,7 +26,7 @@ jobs:
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
- git_hash=$(git rev-parse --short "$GITHUB_SHA")
+ git_hash=$(git rev-parse --short "${GITHUB_SHA}")
git commit -m "Update messages.pot as of version ${git_hash}" locales/messages.pot
- name: Check if any sources have changed since the last update
if: failure()
From 9da5275b121e3ffe23637da7e8e9dfac0bfbae82 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:24:20 +0800
Subject: [PATCH 0031/1064] Update name
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 23e4b0277..194f9005f 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -32,6 +32,6 @@ jobs:
if: failure()
run: echo "There are no changes to the RST sources since the last update. Nothing to do."
- - name: Push changes
+ - name: Push the updated POT file back to ${{ github.repository }} on GitHub
run: |
git push --atomic origin main
From b1109a348beba9cfe1c5ed0aacc87f003ba2fefc Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:25:05 +0800
Subject: [PATCH 0032/1064] Update .github/workflows/translation.yml
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 194f9005f..10240a11c 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -34,4 +34,4 @@ jobs:
- name: Push the updated POT file back to ${{ github.repository }} on GitHub
run: |
- git push --atomic origin main
+ git push --atomic origin HEAD:${{ github.event.repository.default_branch }}
From b7e9720b2e056cce6a839431746ed6efdf81d476 Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko
Date: Tue, 24 Aug 2021 18:25:43 +0200
Subject: [PATCH 0033/1064] Make the push step name more specific
---
.github/workflows/translation.yml | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 10240a11c..5038e462a 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -32,6 +32,9 @@ jobs:
if: failure()
run: echo "There are no changes to the RST sources since the last update. Nothing to do."
- - name: Push the updated POT file back to ${{ github.repository }} on GitHub
+ - name: >-
+ Push the updated POT file back to
+ ${{ github.repository }}@${{ github.event.repository.default_branch }}
+ on GitHub
run: |
git push --atomic origin HEAD:${{ github.event.repository.default_branch }}
From 897d10adb2b1a0e72758e158d96a75f732bcc289 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:27:31 +0800
Subject: [PATCH 0034/1064] Add name
Co-authored-by: Sviatoslav Sydorenko
---
.github/workflows/translation.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 5038e462a..4d28ed393 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -9,7 +9,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - name: Grab the repo src
+ uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
From d5a9b5de233c65f7c766126401e0b75e6425a7a8 Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko
Date: Tue, 24 Aug 2021 18:36:42 +0200
Subject: [PATCH 0035/1064] Trigger the translation workflow on the test
completion
---
.github/workflows/translation.yml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 4d28ed393..2237b44e0 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -1,6 +1,13 @@
name: Translation
on:
+ workflow_run:
+ workflows:
+ - Test
+ branches:
+ - main
+ types:
+ - completed
schedule:
- cron: '00 00,00 * * sun' # Runs at 00:00 UTC on Sunday
From f1a0b0be5d3bebbb459e1e1222d5c089c6afab7d Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:38:15 +0800
Subject: [PATCH 0036/1064] Remove cron time
---
.github/workflows/translation.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 2237b44e0..2513c0715 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -8,8 +8,6 @@ on:
- main
types:
- completed
- schedule:
- - cron: '00 00,00 * * sun' # Runs at 00:00 UTC on Sunday
jobs:
build:
From 4010107771c2d3cfc96aa19539d22e9db7f4eb96 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Wed, 25 Aug 2021 00:39:33 +0800
Subject: [PATCH 0037/1064] Add a space
---
.github/workflows/translation.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml
index 2513c0715..4638e5c4e 100644
--- a/.github/workflows/translation.yml
+++ b/.github/workflows/translation.yml
@@ -34,6 +34,7 @@ jobs:
git config --local user.name "github-actions[bot]"
git_hash=$(git rev-parse --short "${GITHUB_SHA}")
git commit -m "Update messages.pot as of version ${git_hash}" locales/messages.pot
+
- name: Check if any sources have changed since the last update
if: failure()
run: echo "There are no changes to the RST sources since the last update. Nothing to do."
From f54c752e49b56e28bfddd31e40b9c9bc4006b9c8 Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Thu, 26 Aug 2021 00:04:26 +0800
Subject: [PATCH 0038/1064] Use intersphinx references
---
source/glossary.rst | 5 ++---
.../distributing-packages-using-setuptools.rst | 16 ++++++++--------
source/guides/index-mirrors-and-caches.rst | 3 +--
...alling-using-pip-and-virtual-environments.rst | 6 ++----
source/guides/packaging-binary-extensions.rst | 4 ++--
source/guides/packaging-namespace-packages.rst | 5 ++---
source/guides/tool-recommendations.rst | 5 ++---
source/overview.rst | 10 +++++-----
source/tutorials/installing-packages.rst | 16 ++++++++--------
source/tutorials/managing-dependencies.rst | 4 ++--
10 files changed, 34 insertions(+), 40 deletions(-)
diff --git a/source/glossary.rst b/source/glossary.rst
index 55041cbd7..c4ac86c7a 100644
--- a/source/glossary.rst
+++ b/source/glossary.rst
@@ -42,9 +42,8 @@ Glossary
Egg
A :term:`Built Distribution` format introduced by :ref:`setuptools`,
- which is being replaced by :term:`Wheel`. For details, see `The
- Internal Structure of Python Eggs
- `_ and
+ which is being replaced by :term:`Wheel`. For details, see `
+ :doc:`The Internal Structure of Python Eggs ` and
`Python Eggs `_
Extension Module
diff --git a/source/guides/distributing-packages-using-setuptools.rst b/source/guides/distributing-packages-using-setuptools.rst
index e2272dd4a..fecffddbd 100644
--- a/source/guides/distributing-packages-using-setuptools.rst
+++ b/source/guides/distributing-packages-using-setuptools.rst
@@ -509,8 +509,8 @@ points (see below).
Use this keyword to specify any plugins that your project provides for any named
entry points that may be defined by your project or others that you depend on.
-For more information, see the section on `Advertising Behavior
-`_
+For more information, see the section on
+:ref:`Advertising Behavior `
from the :ref:`setuptools` docs.
The most commonly used entry point is "console_scripts" (see below).
@@ -528,8 +528,8 @@ The most commonly used entry point is "console_scripts" (see below).
],
},
-Use ``console_script`` `entry points
-`_
+Use ``console_script``
+:ref:`entry points `
to register your script interfaces. You can then let the toolchain handle the
work of turning these interfaces into actual scripts [2]_. The scripts will be
generated during the install of your :term:`distribution `.
For more information, see `Automatic Script Creation
`_
-from the `setuptools docs `_.
+from the :doc:`setuptools docs `.
.. _`Choosing a versioning scheme`:
@@ -706,9 +706,9 @@ Lastly, if you don't want to install any dependencies at all, you can run:
python -m pip install -e . --no-deps
-For more information, see the `Development Mode
-`_ section
-of the `setuptools docs `_.
+For more information, see the
+:doc:`` section
+of the :doc:`setuptools docs `.
.. _`Packaging your project`:
diff --git a/source/guides/index-mirrors-and-caches.rst b/source/guides/index-mirrors-and-caches.rst
index e765a5d07..d960e7bee 100644
--- a/source/guides/index-mirrors-and-caches.rst
+++ b/source/guides/index-mirrors-and-caches.rst
@@ -29,8 +29,7 @@ Caching with pip
pip provides a number of facilities for speeding up installation by using local
cached copies of :term:`packages `:
-1. `Fast & local installs
- `_
+1. :ref:`Fast & local installs `
by downloading all the requirements for a project and then pointing pip at
those downloaded files instead of going to PyPI.
2. A variation on the above which pre-builds the installation files for
diff --git a/source/guides/installing-using-pip-and-virtual-environments.rst b/source/guides/installing-using-pip-and-virtual-environments.rst
index 1a369763b..16b7a2cfb 100644
--- a/source/guides/installing-using-pip-and-virtual-environments.rst
+++ b/source/guides/installing-using-pip-and-virtual-environments.rst
@@ -323,7 +323,8 @@ pip can install a package directly from source, for example:
cd google-auth
py -m pip install .
-Additionally, pip can install packages from source in `development mode`_,
+Additionally, pip can install packages from source in
+:doc:`development mode `,
meaning that changes to the source directory will immediately affect the
installed package without needing to re-install:
@@ -339,9 +340,6 @@ installed package without needing to re-install:
py -m pip install --editable .
-.. _development mode:
- https://setuptools.readthedocs.io/en/latest/setuptools.html#development-mode
-
Installing from version control systems
---------------------------------------
diff --git a/source/guides/packaging-binary-extensions.rst b/source/guides/packaging-binary-extensions.rst
index f3d42fb82..001787b97 100644
--- a/source/guides/packaging-binary-extensions.rst
+++ b/source/guides/packaging-binary-extensions.rst
@@ -221,9 +221,9 @@ above to make the interface available as an importable Python module.
Implementing binary extensions
==============================
-The CPython `Extending and Embedding `_
+The CPython :doc:`Extending and Embedding `
guide includes an introduction to writing a
-`custom extension module in C `_.
+:doc:`custom extension module in C `.
::
diff --git a/source/guides/packaging-namespace-packages.rst b/source/guides/packaging-namespace-packages.rst
index aac7c2652..dd3c0f4b7 100644
--- a/source/guides/packaging-namespace-packages.rst
+++ b/source/guides/packaging-namespace-packages.rst
@@ -128,8 +128,8 @@ the `native namespace package example project`_.
pkgutil-style namespace packages
--------------------------------
-Python 2.3 introduced the `pkgutil`_ module and the
-`extend_path`_ function. This can be used to declare namespace
+Python 2.3 introduced the :doc:`pkgutil ` module and the
+:py:func:`python:pkgutil.extend_path` function. This can be used to declare namespace
packages that need to be compatible with both Python 2.3+ and Python 3. This
is the recommended approach for the highest level of compatibility.
@@ -160,7 +160,6 @@ additional code in :file:`__init__.py` will be inaccessible.
A complete working example of two pkgutil-style namespace packages can be found
in the `pkgutil namespace example project`_.
-.. _pkgutil: https://docs.python.org/3/library/pkgutil.html
.. _extend_path:
https://docs.python.org/3/library/pkgutil.html#pkgutil.extend_path
.. _pkgutil namespace example project:
diff --git a/source/guides/tool-recommendations.rst b/source/guides/tool-recommendations.rst
index cd7996b00..54acc1e33 100644
--- a/source/guides/tool-recommendations.rst
+++ b/source/guides/tool-recommendations.rst
@@ -31,8 +31,8 @@ Installation tool recommendations
is installed, you may need to also install :ref:`wheel` to get the benefit
of wheel caching. [3]_
-* Use :ref:`virtualenv`, or `venv`_ to isolate application specific
- dependencies from a shared Python installation. [4]_
+* Use :ref:`virtualenv`, or :doc:`venv ` to isolate application
+ specific dependencies from a shared Python installation. [4]_
* If you're looking for management of fully integrated cross-platform software
stacks, consider:
@@ -111,4 +111,3 @@ migration, and what settings to change in your clients.
choice for packaging.
.. _distribute: https://pypi.org/project/distribute
-.. _venv: https://docs.python.org/3/library/venv.html
diff --git a/source/overview.rst b/source/overview.rst
index 3ed4f2141..c4fdaaf18 100644
--- a/source/overview.rst
+++ b/source/overview.rst
@@ -94,8 +94,8 @@ you can use Python's native packaging tools to create a *source*
Python's *sdists* are compressed archives (``.tar.gz`` files)
containing one or more packages or modules. If your code is
-pure-Python, and you only depend on other Python packages, you can `go
-here to learn more `_.
+pure-Python, and you only depend on other Python packages, you can
+:doc:`go here to learn more `.
If you rely on any non-Python code, or non-Python packages (such as
`libxml2 `_ in the case of
@@ -166,8 +166,8 @@ audience.
Python's native packaging is mostly built for distributing reusable
code, called libraries, between developers. You can piggyback
**tools**, or basic applications for developers, on top of Python's
-library packaging, using technologies like `setuptools entry_points
-`_.
+library packaging, using technologies like
+:doc:`setuptools entry_points `.
Libraries are building blocks, not complete applications. For
distributing applications, there's a whole new world of technologies
@@ -249,7 +249,7 @@ machines of developers and data scientists.
Technologies which support this model:
* `PEX `_ (Python EXecutable)
-* `zipapp `_ (does not help manage dependencies, requires Python 3.5+)
+* :doc:`zipapp ` (does not help manage dependencies, requires Python 3.5+)
* `shiv `_ (requires Python 3)
.. note:: Of all the approaches here, depending on a pre-installed
diff --git a/source/tutorials/installing-packages.rst b/source/tutorials/installing-packages.rst
index ab5156fb5..f6bb02b79 100644
--- a/source/tutorials/installing-packages.rst
+++ b/source/tutorials/installing-packages.rst
@@ -178,7 +178,7 @@ Optionally, create a virtual environment
----------------------------------------
See :ref:`section below ` for details,
-but here's the basic `venv`_ [3]_ command to use on a typical Linux system:
+but here's the basic :doc:`venv ` [3]_ command to use on a typical Linux system:
.. tab:: Unix/macOS
@@ -228,7 +228,7 @@ environments.
Currently, there are two common tools for creating Python virtual environments:
-* `venv`_ is available by default in Python 3.3 and later, and installs
+* :doc:`venv ` is available by default in Python 3.3 and later, and installs
:ref:`pip` and :ref:`setuptools` into created virtual environments in
Python 3.4 and later.
* :ref:`virtualenv` needs to be installed separately, but supports Python 2.7+
@@ -238,7 +238,7 @@ Currently, there are two common tools for creating Python virtual environments:
The basic usage is like so:
-Using `venv`_:
+Using :doc:`venv `:
.. tab:: Unix/macOS
@@ -270,7 +270,8 @@ Using :ref:`virtualenv`:
virtualenv \Scripts\activate
-For more information, see the `venv`_ docs or the `virtualenv `_ docs.
+For more information, see the :doc:`venv ` docs or
+the `virtualenv `_ docs.
The use of :command:`source` under Unix shells ensures
that the virtual environment's variables are set within the current
@@ -297,7 +298,7 @@ Use pip for Installing
======================
:ref:`pip` is the recommended installer. Below, we'll cover the most common
-usage scenarios. For more detail, see the `pip docs `_,
+usage scenarios. For more detail, see the :doc:`pip docs `,
which includes a complete :doc:`Reference Guide `.
@@ -542,8 +543,8 @@ Installing from a local src tree
================================
-Installing from local src in `Development Mode
-`_,
+Installing from local src in
+:doc:`Development Mode `,
i.e. in such a way that the project appears to be installed, but yet is
still editable from the src tree.
@@ -682,5 +683,4 @@ Install `setuptools extras`_.
and support was released in :ref:`setuptools` v8.0 and
:ref:`pip` v6.0
-.. _venv: https://docs.python.org/3/library/venv.html
.. _setuptools extras: https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-extras-optional-features-with-their-own-dependencies
diff --git a/source/tutorials/managing-dependencies.rst b/source/tutorials/managing-dependencies.rst
index 99b889ca1..6eb94b1b6 100644
--- a/source/tutorials/managing-dependencies.rst
+++ b/source/tutorials/managing-dependencies.rst
@@ -53,12 +53,12 @@ Use ``pip`` to install Pipenv:
.. Note:: This does a `user installation`_ to prevent breaking any system-wide
packages. If ``pipenv`` isn't available in your shell after installation,
- you'll need to add the `user base`_'s binary directory to your ``PATH``.
+ you'll need to add the :py:data:`user base `'s
+ binary directory to your ``PATH``.
See :ref:`Installing to the User Site` for more information.
.. _npm: https://www.npmjs.com/
.. _bundler: http://bundler.io/
-.. _user base: https://docs.python.org/3/library/site.html#site.USER_BASE
.. _user installation: https://pip.pypa.io/en/stable/user_guide/#user-installs
Installing packages for your project
From 2e80e845a6e4e380f4809212eb7fca370d0089dc Mon Sep 17 00:00:00 2001
From: meowmeowcat <68463158+meowmeowmeowcat@users.noreply.github.com>
Date: Thu, 26 Aug 2021 21:32:05 +0800
Subject: [PATCH 0039/1064] Use Python 3.9 for the workflow
---
.../github-actions-ci-cd-sample/publish-to-test-pypi.yml | 4 ++--
...ribution-releases-using-github-actions-ci-cd-workflows.rst | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/source/guides/github-actions-ci-cd-sample/publish-to-test-pypi.yml b/source/guides/github-actions-ci-cd-sample/publish-to-test-pypi.yml
index 361203b49..c24d08091 100644
--- a/source/guides/github-actions-ci-cd-sample/publish-to-test-pypi.yml
+++ b/source/guides/github-actions-ci-cd-sample/publish-to-test-pypi.yml
@@ -9,10 +9,10 @@ jobs:
steps:
- uses: actions/checkout@master
- - name: Set up Python 3.7
+ - name: Set up Python 3.9
uses: actions/setup-python@v1
with:
- python-version: 3.7
+ python-version: 3.9
- name: Install pypa/build
run: >-
python -m
diff --git a/source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst b/source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst
index 4dd1969b6..bd8ea42eb 100644
--- a/source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst
+++ b/source/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows.rst
@@ -90,7 +90,7 @@ Then, add the following under the ``build-n-publish`` section:
:end-before: Install pypa/build
This will download your repository into the CI runner and then
-install and activate Python 3.7.
+install and activate Python 3.9.
And now we can build dists from source. In this example, we'll
use ``build`` package, assuming that your project has a
@@ -107,7 +107,7 @@ So add this to the steps list:
.. literalinclude:: github-actions-ci-cd-sample/publish-to-test-pypi.yml
:language: yaml
- :start-after: version: 3.7
+ :start-after: version: 3.9
:end-before: Actually publish to PyPI/TestPyPI
From dcb3add9cd8c0237b0b4e32fadb26332e0a99c71 Mon Sep 17 00:00:00 2001
From: Wes Turner <50891+westurner@users.noreply.github.com>
Date: Fri, 27 Aug 2021 07:49:42 -0400
Subject: [PATCH 0040/1064] DOC:
source/guides/distributing-packages-using-setuptools.rst: remove extra pip
install -e
Co-authored-by: meowmeowcat
---
source/guides/distributing-packages-using-setuptools.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/guides/distributing-packages-using-setuptools.rst b/source/guides/distributing-packages-using-setuptools.rst
index c6171ab70..3a27a4b90 100644
--- a/source/guides/distributing-packages-using-setuptools.rst
+++ b/source/guides/distributing-packages-using-setuptools.rst
@@ -665,7 +665,7 @@ edited in-place without reinstallation:
changes to Python source files in projects installed as editable will be reflected the next time an interpreter process is started.
To install a Python package in "editable"/"development" mode
-Change directory to the root of the project directory and run ``pip install -e .``:
+Change directory to the root of the project directory and run:
::
From 9c8996b5cc81d9ff35944131be8bc020b990dda9 Mon Sep 17 00:00:00 2001
From: meowmeowcat
Date: Sat, 28 Aug 2021 17:38:19 +0800
Subject: [PATCH 0041/1064] Fix a typo (#970)
---
source/guides/distributing-packages-using-setuptools.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/guides/distributing-packages-using-setuptools.rst b/source/guides/distributing-packages-using-setuptools.rst
index b16dc8f1c..a179ea130 100644
--- a/source/guides/distributing-packages-using-setuptools.rst
+++ b/source/guides/distributing-packages-using-setuptools.rst
@@ -710,7 +710,7 @@ Lastly, if you don't want to install any dependencies at all, you can run:
For more information, see the
-:doc:`` section
+:doc:`Development Mode ` section
of the :doc:`setuptools docs `.
.. _`Packaging your project`:
From 750346bb32d6ed5f7bec1353267055301b6ce3b6 Mon Sep 17 00:00:00 2001
From: Tim Hopper
Date: Sat, 28 Aug 2021 05:58:17 -0400
Subject: [PATCH 0042/1064] Switch example reading Markdown to use pathlib
(#969)
Co-authored-by: Zachary Blackwood
Co-authored-by: Zachary Blackwood
Co-authored-by: Brian Rutledge
---
source/guides/making-a-pypi-friendly-readme.rst | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/source/guides/making-a-pypi-friendly-readme.rst b/source/guides/making-a-pypi-friendly-readme.rst
index eea221b4a..0cba44c2c 100644
--- a/source/guides/making-a-pypi-friendly-readme.rst
+++ b/source/guides/making-a-pypi-friendly-readme.rst
@@ -78,10 +78,9 @@ and identifies the markup as GitHub-flavored Markdown:
from setuptools import setup
# read the contents of your README file
- from os import path
- this_directory = path.abspath(path.dirname(__file__))
- with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
- long_description = f.read()
+ from pathlib import Path
+ this_directory = Path(__file__).parent
+ long_description = (this_directory / "README.md").read_text()
setup(
name='an_example_package',
From f45cb58daee330c9c3f088f49ebd0a205ef00983 Mon Sep 17 00:00:00 2001
From: meowmeowmeowcat
Date: Sun, 29 Aug 2021 18:15:29 +0200
Subject: [PATCH 0043/1064] Translated using Weblate (Chinese (Simplified))
Currently translated at 8.6% (196 of 2271 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 1.3% (31 of 2271 strings)
Translated using Weblate (Chinese (Traditional))
Currently translated at 1.1% (25 of 2271 strings)
Added translation using Weblate (Chinese (Simplified))
Added translation using Weblate (Chinese (Traditional))
Co-authored-by: meowmeowmeowcat
Translate-URL: https://hosted.weblate.org/projects/pypa/packaging-python-org/zh_Hans/
Translate-URL: https://hosted.weblate.org/projects/pypa/packaging-python-org/zh_Hant/
Translation: pypa/packaging.python.org
---
locales/zh_Hans/LC_MESSAGES/messages.po | 9324 +++++++++++++++++++++++
locales/zh_Hant/LC_MESSAGES/messages.po | 9260 ++++++++++++++++++++++
2 files changed, 18584 insertions(+)
create mode 100644 locales/zh_Hans/LC_MESSAGES/messages.po
create mode 100644 locales/zh_Hant/LC_MESSAGES/messages.po
diff --git a/locales/zh_Hans/LC_MESSAGES/messages.po b/locales/zh_Hans/LC_MESSAGES/messages.po
new file mode 100644
index 000000000..84341c490
--- /dev/null
+++ b/locales/zh_Hans/LC_MESSAGES/messages.po
@@ -0,0 +1,9324 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) 2013–2020, PyPA
+# This file is distributed under the same license as the Python Packaging User Guide package.
+# meowmeowmeowcat , 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: Python Packaging User Guide\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-07-06 19:32+0800\n"
+"PO-Revision-Date: 2021-07-16 11:12+0000\n"
+"Last-Translator: meowmeowmeowcat \n"
+"Language-Team: Chinese (Simplified) \n"
+"Language: zh_Hans\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.7.2-dev\n"
+
+#: ../source/contribute.rst:5
+msgid "Contribute to this guide"
+msgstr "为本指南做出贡献"
+
+#: ../source/contribute.rst:7
+msgid "The |PyPUG| welcomes contributors! There are lots of ways to help out, including:"
+msgstr "|PyPUG| 欢迎贡献者!有很多方法可以帮助我们,包括:"
+
+#: ../source/contribute.rst:10
+msgid "Reading the guide and giving feedback"
+msgstr "阅读指南并提供反馈"
+
+#: ../source/contribute.rst:11
+msgid "Reviewing new contributions"
+msgstr "审查新的贡献"
+
+#: ../source/contribute.rst:12
+msgid "Revising existing content"
+msgstr "修改现有内容"
+
+#: ../source/contribute.rst:13
+msgid "Writing new content"
+msgstr "撰写新内容"
+
+#: ../source/contribute.rst:15
+msgid "Most of the work on the |PyPUG| takes place on the `project's GitHub repository`__. To get started, check out the list of `open issues`__ and `pull requests`__. If you're planning to write or edit the guide, please read the :ref:`style guide `."
+msgstr ""
+"大部分关于 |PyPUG| 的工作都是在 `本项目的GitHub仓库`__ 进行的。要开始工作,请查看`open issues`__ 和`pull "
+"requests`__ 的列表。如果你打算编写或编辑指南,请阅读 :ref:`style guide "
+"`。"
+
+#: ../source/contribute.rst:24
+msgid "By contributing to the |PyPUG|, you're expected to follow the PSF's `Code of Conduct`__."
+msgstr "如果您想为 |PyPUG| 作出贡献,您应该遵守 PSF 的 `行为准则 (Code of Conduct)`__ 。"
+
+#: ../source/contribute.rst:31
+msgid "Documentation types"
+msgstr "文档类型"
+
+#: ../source/contribute.rst:33
+msgid "This project consists of four distinct documentation types with specific purposes. When proposing new additions to the project please pick the appropriate documentation type."
+msgstr "本项目由具有特定目的的四种不同的文档类型组成。当提议对项目进行新的补充时,请选择适当的文档类型。"
+
+#: ../source/contribute.rst:38
+#: ../source/tutorials/index.rst:2
+msgid "Tutorials"
+msgstr "教程"
+
+#: ../source/contribute.rst:40
+msgid "Tutorials are focused on teaching the reader new concepts by accomplishing a goal. They are opinionated step-by-step guides. They do not include extraneous warnings or information. `example tutorial-style document`_."
+msgstr "教程的重点是通过完成一个目标来教导读者新的概念。它们是有观点的分步指南。它们不包括不相干的警告或信息。`示例教程式文件`_ 。"
+
+#: ../source/contribute.rst:47
+#: ../source/guides/index.rst:2
+msgid "Guides"
+msgstr "指南"
+
+#: ../source/contribute.rst:49
+msgid "Guides are focused on accomplishing a specific task and can assume some level of pre-requisite knowledge. These are similar to tutorials, but have a narrow and clear focus and can provide lots of caveats and additional information as needed. They may also discuss multiple approaches to accomplishing the task. :doc:`example guide-style document `."
+msgstr ""
+"指南的重点是完成一项具体的任务,并可以假定有一定程度的前提知识。这类似于教程,但有一个狭窄和明确的重点,并可以根据需要提供大量的注意事项和附加信息。他们还"
+"可以讨论完成任务的多种方法。 :doc:`示例指南式文档`。"
+
+#: ../source/contribute.rst:56
+#: ../source/discussions/index.rst:2
+msgid "Discussions"
+msgstr "讨论"
+
+#: ../source/contribute.rst:58
+msgid "Discussions are focused on understanding and information. These explore a specific topic without a specific goal in mind. :doc:`example discussion-style document `."
+msgstr ""
+"讨论 (Discussions) 的重点是理解和信息。这些探索一个特定的主题,没有具体的目标。 :doc:`示例讨论式文件 `。"
+
+#: ../source/contribute.rst:63
+msgid "Specifications"
+msgstr "规格"
+
+#: ../source/contribute.rst:65
+msgid "Specifications are reference documention focused on comprehensively documenting an agreed-upon interface for interoperability between packaging tools. :doc:`example specification-style document `."
+msgstr ""
+"规范 (Specifications) 是一种参考文件,侧重于全面记录包装工具之间互操作性的一致接口。 :doc:`范例规范式文件 <"
+"specifications/core-metadata>`。"
+
+#: ../source/contribute.rst:73
+msgid "Building the guide locally"
+msgstr "在本地构建指南"
+
+#: ../source/contribute.rst:75
+msgid "Though not required to contribute, it may be useful to build this guide locally in order to test your changes. In order to build this guide locally, you'll need:"
+msgstr "虽然这不需要做出贡献,但为了测试您的改动,在本地建立本指南可能是有用的。为了在本地构建本指南,你需要:"
+
+#: ../source/contribute.rst:79
+msgid "`Nox `_. You can install or upgrade nox using ``pip``::"
+msgstr ""
+"`Nox `_ 。你可以用 ``pip`` 来安装或升级nox::"
+
+#: ../source/contribute.rst:84
+msgid "Python 3.6. Our build scripts are designed to work with Python 3.6 only. See the `Hitchhiker's Guide to Python installation instructions`_ to install Python 3.6 on your operating system."
+msgstr ""
+"Python 3.6。我们的构建脚本只为 Python 3.6 而设计。请参阅 `Hitchhiker's Guide to Python "
+"installation instructions`_ 以在你的操作系统上安装Python 3.6。"
+
+#: ../source/contribute.rst:91
+msgid "To build the guide, run the following bash command in the source folder::"
+msgstr "要构建指南,在 source 文件夹中运行以下 bash 命令::"
+
+#: ../source/contribute.rst:95
+msgid "After the process has completed you can find the HTML output in the ``./build/html`` directory. You can open the ``index.html`` file to view the guide in web browser, but it's recommended to serve the guide using an HTTP server."
+msgstr ""
+"在该过程完成后,您可以在 ``./build/html`` 目录中找到 HTML 输出。您可以打开 ``index.html`` "
+"文件,并在浏览器中查看指南,但我们建议使用 HTTP 服务器为指南服务。"
+
+#: ../source/contribute.rst:100
+msgid "You can build the guide and serve it via an HTTP server using the following command::"
+msgstr "您可以使用以下命令建立指南并通过 HTTP 服务器为其提供服务::"
+
+#: ../source/contribute.rst:105
+msgid "The guide will be browsable via http://localhost:8000."
+msgstr "该指南将可通过 http://localhost:8000 进行浏览。"
+
+#: ../source/contribute.rst:109
+msgid "Where the guide is deployed"
+msgstr "指南的部署地点"
+
+#: ../source/contribute.rst:111
+msgid "The guide is deployed via ReadTheDocs and the configuration lives at https://readthedocs.org/projects/python-packaging-user-guide/. It's served from a custom domain and fronted by Fast.ly."
+msgstr ""
+"该指南是通过ReadTheDocs部署的,配置位于 https://readthedocs.org/projects/"
+"python-packaging-user-guide/ 。它由一个自定义域名提供服务,并由 Fast.ly 提供支持。"
+
+#: ../source/contribute.rst:117
+msgid "Style guide"
+msgstr "风格指南"
+
+#: ../source/contribute.rst:119
+msgid "This style guide has recommendations for how you should write the |PyPUG|. Before you start writing, please review it. By following the style guide, your contributions will help add to a cohesive whole and make it easier for your contributions to be accepted into the project."
+msgstr ""
+"本风格指南提供了关于如何编写 |PyPUG| "
+"的建议。在开始写作之前,请先查看它。通过遵循样式指南,您的贡献将有助于增加一个有凝聚力的整体,并使您的贡献更容易被项目接受。"
+
+#: ../source/contribute.rst:126
+msgid "Purpose"
+msgstr "目的"
+
+#: ../source/contribute.rst:128
+msgid "The purpose of the |PyPUG| is to be the authoritative resource on how to package, publish, and install Python projects using current tools."
+msgstr "|PyPUG| 的目的是成为关于如何使用当前工具打包、发布和安装 Python 项目的权威性资源。"
+
+#: ../source/contribute.rst:133
+msgid "Scope"
+msgstr "范围"
+
+#: ../source/contribute.rst:135
+msgid "The guide is meant to answer questions and solve problems with accurate and focused recommendations."
+msgstr "该指南旨在通过准确和有针对性的建议来回答问题和解决问题。"
+
+#: ../source/contribute.rst:138
+msgid "The guide isn't meant to be comprehensive and it's not meant to replace individual projects' documentation. For example, pip has dozens of commands, options, and settings. The pip documentation describes each of them in detail, while this guide describes only the parts of pip that are needed to complete the specific tasks described in this guide."
+msgstr ""
+"本指南并不意味着是全面的,也不意味着可以取代单个项目的文档。例如,pip 有几十个命令、选项和设置。pip 文档详细描述了它们中的每一个,"
+"而本指南只描述了完成本指南中描述的特定任务所需的 pip 部分。"
+
+#: ../source/contribute.rst:146
+msgid "Audience"
+msgstr "读者"
+
+#: ../source/contribute.rst:148
+msgid "The audience of this guide is anyone who uses Python with packages."
+msgstr "本指南的受众是任何使用 Python 包的人。"
+
+#: ../source/contribute.rst:150
+msgid "Don't forget that the Python community is big and welcoming. Readers may not share your age, gender, education, culture, and more, but they deserve to learn about packaging just as much as you do."
+msgstr "不要忘记,Python 社区是很大,而且很受欢迎的。读者可能与您的年龄、性别、教育、文化等不尽相同,但他们和您一样值得学习包装知识。"
+
+#: ../source/contribute.rst:154
+msgid "In particular, keep in mind that not all people who use Python see themselves as programmers. The audience of this guide includes astronomers or painters or students as well as professional software developers."
+msgstr "特别是要记住,不是所有使用 Python 的人都把自己看作是程序员。本指南的受众包括天文学家,画家或学生以及专业的软件开发人员。"
+
+#: ../source/contribute.rst:160
+msgid "Voice and tone"
+msgstr "声音和语气"
+
+#: ../source/contribute.rst:162
+msgid "When writing this guide, strive to write with a voice that's approachable and humble, even if you have all the answers."
+msgstr "在撰写本指南时,即使您已经掌握了所有答案,也要努力以平易近人且谦逊的语气写作。"
+
+#: ../source/contribute.rst:165
+msgid "Imagine you're working on a Python project with someone you know to be smart and skilled. You like working with them and they like working with you. That person has asked you a question and you know the answer. How do you respond? *That* is how you should write this guide."
+msgstr ""
+"想象一下,您正在和一个您知道是聪明和熟练的人一起做 Python "
+"项目。您喜欢和他们一起工作,他们也喜欢和您一起工作。那个人问了您一个问题,你知道答案。你怎么回答?*这* 就是你应该如何写这个指南的方式。"
+
+#: ../source/contribute.rst:170
+msgid "Here's a quick check: try reading aloud to get a sense for your writing's voice and tone. Does it sound like something you would say or does it sound like you're acting out a part or giving a speech? Feel free to use contractions and don't worry about sticking to fussy grammar rules. You are hereby granted permission to end a sentence in a preposition, if that's what you want to end it with."
+msgstr ""
+"这里有一个快速检查:试着大声朗读以了解您写作的声音和语气。它听起来像您会说的话,还是听起来像您在演戏或发表演讲?随意使用缩略语,不要担心拘泥于繁琐的语法规"
+"则。您在此允许用介词来结束一个句子,如果这是您想结束它的话。"
+
+#: ../source/contribute.rst:177
+msgid "When writing the guide, adjust your tone for the seriousness and difficulty of the topic. If you're writing an introductory tutorial, it's OK to make a joke, but if you're covering a sensitive security recommendation, you might want to avoid jokes altogether."
+msgstr ""
+"在写指南时,根据主题的严肃性和难度调整你的语气。如果你写的是一个介绍性的教程,开个玩笑是可以的,但如果你涉及的是一个敏感的安全建议,你可能要完全避免玩笑。"
+
+#: ../source/contribute.rst:184
+msgid "Conventions and mechanics"
+msgstr "公约和机制"
+
+#: ../source/contribute.rst:192
+msgid "**Write to the reader**"
+msgstr "**写给读者**"
+
+#: ../source/contribute.rst:187
+msgid "When giving recommendations or steps to take, address the reader as *you* or use the imperative mood."
+msgstr "在提出建议或采取的步骤时,您应称呼读者为 *你* 或使用命令语气。"
+
+#: ../source/contribute.rst:0
+msgid "Wrong: To install it, the user runs…"
+msgstr "错误:要安装它,用户运行…"
+
+#: ../source/contribute.rst:0
+msgid "Right: You can install it by running…"
+msgstr "正确:您可以通过运行...来安装它"
+
+#: ../source/contribute.rst:0
+msgid "Right: To install it, run…"
+msgstr "正确:要安装它,请运行…"
+
+#: ../source/contribute.rst:198
+msgid "**State assumptions**"
+msgstr "**陈述假设**"
+
+#: ../source/contribute.rst:195
+msgid "Avoid making unstated assumptions. Reading on the web means that any page of the guide may be the first page of the guide that the reader ever sees. If you're going to make assumptions, then say what assumptions that you're going to make."
+msgstr "避免做出未说明的假设。在网上阅读意味着指南的任何一页都可能是读者所看到的指南的第一页。如果您要做假设,那就要说明您要做什么假设。"
+
+#: ../source/contribute.rst:203
+msgid "**Cross-reference generously**"
+msgstr "**慷慨地交叉参考**"
+
+#: ../source/contribute.rst:201
+msgid "The first time you mention a tool or practice, link to the part of the guide that covers it, or link to a relevant document elsewhere. Save the reader a search."
+msgstr "当你第一次提到一个工具或做法时,请链接到指南中涉及它的部分,或链接到其他地方的相关文件。这样可以为读者省去搜索的麻烦。"
+
+#: ../source/contribute.rst:213
+msgid "**Respect naming practices**"
+msgstr "**尊重命名的做法**"
+
+#: ../source/contribute.rst:206
+msgid "When naming tools, sites, people, and other proper nouns, use their preferred capitalization."
+msgstr "当给工具、网站、人和其他专有名词命名时,请使用它们的首选大写字母。"
+
+#: ../source/contribute.rst:0
+msgid "Wrong: Pip uses…"
+msgstr "错误:Pip 使用…"
+
+#: ../source/contribute.rst:0
+msgid "Right: pip uses…"
+msgstr "正确:pip 使用…"
+
+#: ../source/contribute.rst:0
+msgid "Wrong: …hosted on github."
+msgstr "错误:...托管在 github 上。"
+
+#: ../source/contribute.rst:0
+msgid "Right: …hosted on GitHub."
+msgstr "正确:……托管在 GitHub 上。"
+
+#: ../source/contribute.rst:222
+msgid "**Use a gender-neutral style**"
+msgstr "**使用中性风格**"
+
+#: ../source/contribute.rst:216
+msgid "Often, you'll address the reader directly with *you*, *your* and *yours*. Otherwise, use gender-neutral pronouns *they*, *their*, and *theirs* or avoid pronouns entirely."
+msgstr ""
+"通常,您会用 *you*、*your* 和 *yours* 来直接称呼读者。否则,请使用性别中立的代词 *they*、*their* 和 *theirs*"
+" ,或者完全避免使用代词。"
+
+#: ../source/contribute.rst:0
+msgid "Wrong: A maintainer uploads the file. Then he…"
+msgstr "错误:一个维护人员上传了文件。然后他…"
+
+#: ../source/contribute.rst:0
+msgid "Right: A maintainer uploads the file. Then they…"
+msgstr "正确:一个维护人员上传了文件。然后他们…"
+
+#: ../source/contribute.rst:0
+msgid "Right: A maintainer uploads the file. Then the maintainer…"
+msgstr "正确:A maintainer uploads the file. Then the maintainer…"
+
+#: ../source/contribute.rst:234
+msgid "**Headings**"
+msgstr "**标题**"
+
+#: ../source/contribute.rst:225
+msgid "Write headings that use words the reader is searching for. A good way to do this is to have your heading complete an implied question. For example, a reader might want to know *How do I install MyLibrary?* so a good heading might be *Install MyLibrary*."
+msgstr ""
+"写标题时要使用读者正在搜索的词。一个好方法是让你的标题完成一个隐含的问题。例如,读者可能想知道 *How do I install "
+"MyLibrary?*,所以一个好的标题可能是 *Install MyLibrary* 。"
+
+#: ../source/contribute.rst:230
+msgid "In section headings, use sentence case. In other words, write headings as you would write a typical sentence."
+msgstr "在章节标题中,使用句子大小写。换句话说,要像写一个典型的句子那样写标题。"
+
+#: ../source/contribute.rst:0
+msgid "Wrong: Things You Should Know About Python"
+msgstr "错误:Things You Should Know About Python"
+
+#: ../source/contribute.rst:0
+msgid "Right: Things you should know about Python"
+msgstr "正确:Things you should know about Python"
+
+#: ../source/contribute.rst:237
+msgid "**Numbers**"
+msgstr "**数字**"
+
+#: ../source/contribute.rst:237
+msgid "In body text, write numbers one through nine as words. For other numbers or numbers in tables, use numerals."
+msgstr "在正文中,将数字1到9写成单词。对于其他数字或表格中的数字,使用数字。"
+
+#: ../source/discussions/deploying-python-applications.rst:4
+msgid "Deploying Python applications"
+msgstr "部署 Python 应用程序"
+
+#: ../source/discussions/deploying-python-applications.rst:0
+#: ../source/guides/index-mirrors-and-caches.rst:0
+#: ../source/guides/installing-using-linux-tools.rst:0
+#: ../source/guides/packaging-binary-extensions.rst:0
+#: ../source/guides/supporting-multiple-python-versions.rst:0
+#: ../source/guides/supporting-windows-using-appveyor.rst:0
+msgid "Page Status"
+msgstr "页面状态"
+
+#: ../source/discussions/deploying-python-applications.rst:6
+#: ../source/guides/index-mirrors-and-caches.rst:7
+#: ../source/guides/installing-using-linux-tools.rst:7
+#: ../source/guides/packaging-binary-extensions.rst:7
+#: ../source/guides/supporting-multiple-python-versions.rst:7
+#: ../source/guides/supporting-windows-using-appveyor.rst:5
+msgid "Incomplete"
+msgstr "不完全的"
+
+#: ../source/discussions/deploying-python-applications.rst:0
+#: ../source/guides/index-mirrors-and-caches.rst:0
+#: ../source/guides/installing-using-linux-tools.rst:0
+#: ../source/guides/packaging-binary-extensions.rst:0
+#: ../source/guides/supporting-multiple-python-versions.rst:0
+#: ../source/guides/supporting-windows-using-appveyor.rst:0
+msgid "Last Reviewed"
+msgstr "最后审查"
+
+#: ../source/discussions/deploying-python-applications.rst:7
+msgid "2014-11-11"
+msgstr "2014-11-11"
+
+#: ../source/discussions/deploying-python-applications.rst:11
+#: ../source/discussions/install-requires-vs-requirements.rst:9
+#: ../source/guides/analyzing-pypi-package-downloads.rst:12
+#: ../source/guides/distributing-packages-using-setuptools.rst:22
+#: ../source/guides/index-mirrors-and-caches.rst:12
+#: ../source/guides/installing-scientific-packages.rst:9
+#: ../source/guides/packaging-binary-extensions.rst:17
+#: ../source/guides/supporting-multiple-python-versions.rst:12
+#: ../source/guides/supporting-windows-using-appveyor.rst:15
+#: ../source/overview.rst:23
+#: ../source/specifications/core-metadata.rst:38
+#: ../source/specifications/direct-url.rst:14
+#: ../source/tutorials/installing-packages.rst:23
+msgid "Contents"
+msgstr "内容"
+
+#: ../source/discussions/deploying-python-applications.rst:14
+msgid "Overview"
+msgstr "总览"
+
+#: ../source/discussions/deploying-python-applications.rst:18
+msgid "Supporting multiple hardware platforms"
+msgstr "支持多种硬件平台"
+
+#: ../source/discussions/deploying-python-applications.rst:40
+msgid "OS packaging & installers"
+msgstr "操作系统包装和安装程序"
+
+#: ../source/discussions/deploying-python-applications.rst:52
+msgid "Windows"
+msgstr "Windows系统"
+
+#: ../source/discussions/deploying-python-applications.rst:61
+msgid "Pynsist"
+msgstr "Pynsist"
+
+#: ../source/discussions/deploying-python-applications.rst:63
+msgid "`Pynsist `__ is a tool that bundles Python programs together with the Python-interpreter into a single installer based on NSIS. In most cases, packaging only requires the user to choose a version of the Python-interpreter and declare the dependencies of the program. The tool downloads the specified Python-interpreter for Windows and packages it with all the dependencies in a single Windows-executable installer."
+msgstr ""
+"`Pynsist `__ 是一个基于NSIS的单一安装程序,并将 Python "
+"程序与 Python 解释器捆绑在一起的工具。在大多数情况下,打包 (packaging) 只需要用户选择 Python 解释器的版本并声明程序的依赖性 "
+"(dependencies) 。该工具会下载用于 Windows 的 Python 解释器,并将其与所有依赖项打包成一个可在 Windows "
+"执行的安装程序。"
+
+#: ../source/discussions/deploying-python-applications.rst:70
+msgid "The installed program can be started from a shortcut that the installer adds to the start-menu. It uses a Python interpreter installed within its application directory, independent of any other Python installation on the computer."
+msgstr ""
+"安装的程序可以从安装程序添加到开始菜单的快捷方式启动。它使用一个安装在其应用程序目录中的Python解释器,与计算机上的任何其他 Python 安装无关。"
+
+#: ../source/discussions/deploying-python-applications.rst:74
+msgid "A big advantage of Pynsist is that the Windows packages can be built on Linux. There are several examples for different kinds of programs (console, GUI) in the `documentation `__. The tool is released under the MIT-licence."
+msgstr ""
+"Pynsist 的一大优势是可以在 Linux 上构建 Windows 软件包。在`文档 `__ 中,有几个不同类型程序(控制台、GUI)的例子。该工具是在 MIT 许可下发布的。"
+
+#: ../source/discussions/deploying-python-applications.rst:80
+msgid "Application bundles"
+msgstr "应用捆绑"
+
+#: ../source/discussions/deploying-python-applications.rst:91
+msgid "Configuration management"
+msgstr "配置管理"
+
+#: ../source/discussions/index.rst:4
+msgid "**Discussions** are focused on providing comprehensive information about a specific topic. If you're just trying to get stuff done, see :doc:`/guides/index`."
+msgstr ""
+"**讨论 (Discussions)** 的重点是提供关于特定主题的全面信息。如果您只是想把事情做好,请看 :doc:`/guides/index` 。"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:5
+msgid "install_requires vs requirements files"
+msgstr "install_requires 与 requirements files"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:12
+#: ../source/guides/distributing-packages-using-setuptools.rst:382
+msgid "install_requires"
+msgstr "install_requires"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:14
+msgid "``install_requires`` is a :ref:`setuptools` :file:`setup.py` keyword that should be used to specify what a project **minimally** needs to run correctly. When the project is installed by :ref:`pip`, this is the specification that is used to install its dependencies."
+msgstr ""
+"``install_requires`` 是一个 :ref:`setuptools` :file:`setup.py` 关键字,它应该用来指定一个项目 "
+"**最小** 需要正确运行的内容。当项目由 :ref:`pip` 安装时,这就是用来安装其依赖的规范。"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:19
+msgid "For example, if the project requires A and B, your ``install_requires`` would be like so:"
+msgstr "例如,如果项目需要 A 和 B ,您的 ``install_requires`` 会是这样的:"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:29
+msgid "Additionally, it's best practice to indicate any known lower or upper bounds."
+msgstr "此外,最好的做法是指出任何已知的下限或上限。"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:31
+msgid "For example, it may be known, that your project requires at least v1 of 'A', and v2 of 'B', so it would be like so:"
+msgstr "例如,您可能知道您的项目至少需要 'A' 的 v1 ,'B' 的 v2 ,所以它会是这样的:"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:41
+msgid "It may also be known that project A follows semantic versioning, and that v2 of 'A' will indicate a break in compatibility, so it makes sense to not allow v2:"
+msgstr ""
+
+#: ../source/discussions/install-requires-vs-requirements.rst:51
+msgid "It is not considered best practice to use ``install_requires`` to pin dependencies to specific versions, or to specify sub-dependencies (i.e. dependencies of your dependencies). This is overly-restrictive, and prevents the user from gaining the benefit of dependency upgrades."
+msgstr ""
+
+#: ../source/discussions/install-requires-vs-requirements.rst:56
+msgid "Lastly, it's important to understand that ``install_requires`` is a listing of \"Abstract\" requirements, i.e just names and version restrictions that don't determine where the dependencies will be fulfilled from (i.e. from what index or source). The where (i.e. how they are to be made \"Concrete\") is to be determined at install time using :ref:`pip` options. [1]_"
+msgstr ""
+
+#: ../source/discussions/install-requires-vs-requirements.rst:64
+#: ../source/tutorials/installing-packages.rst:460
+msgid "Requirements files"
+msgstr "Requirements files"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:66
+msgid ":ref:`Requirements Files ` described most simply, are just a list of :ref:`pip:pip install` arguments placed into a file."
+msgstr ""
+":ref:`Requirements Files ` 最简单的描述,只是放在文件中的 :ref:`pip:"
+"pip install` 参数列表。"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:69
+msgid "Whereas ``install_requires`` defines the dependencies for a single project, :ref:`Requirements Files ` are often used to define the requirements for a complete Python environment."
+msgstr ""
+
+#: ../source/discussions/install-requires-vs-requirements.rst:73
+msgid "Whereas ``install_requires`` requirements are minimal, requirements files often contain an exhaustive listing of pinned versions for the purpose of achieving :ref:`repeatable installations ` of a complete environment."
+msgstr ""
+
+#: ../source/discussions/install-requires-vs-requirements.rst:78
+msgid "Whereas ``install_requires`` requirements are \"Abstract\", i.e. not associated with any particular index, requirements files often contain pip options like ``--index-url`` or ``--find-links`` to make requirements \"Concrete\", i.e. associated with a particular index or directory of packages. [1]_"
+msgstr ""
+
+#: ../source/discussions/install-requires-vs-requirements.rst:84
+msgid "Whereas ``install_requires`` metadata is automatically analyzed by pip during an install, requirements files are not, and only are used when a user specifically installs them using ``python -m pip install -r``."
+msgstr ""
+"在安装过程中,``install_requires`` 元数据会被 pip 自动分析,而需求文件则不会,而它只有在用户使用 ``python -m "
+"pip install -r`` 专门安装时才会使用。"
+
+#: ../source/discussions/install-requires-vs-requirements.rst:90
+msgid "For more on \"Abstract\" vs \"Concrete\" requirements, see https://caremad.io/2013/07/setup-vs-requirement/."
+msgstr ""
+"关于 \"抽象 (Abstract) \"与 \"具体 (Concrete)\"要求的更多信息,请参阅 https://caremad.io/2013/"
+"07/setup-vs-requirement/ 。"
+
+#: ../source/discussions/pip-vs-easy-install.rst:6
+msgid "pip vs easy_install"
+msgstr "pip 与 easy_install"
+
+#: ../source/discussions/pip-vs-easy-install.rst:9
+msgid ":ref:`easy_install `, now `deprecated`_, was released in 2004 as part of :ref:`setuptools`. It was notable at the time for installing :term:`packages ` from :term:`PyPI ` using requirement specifiers, and automatically installing dependencies."
+msgstr ""
+
+#: ../source/discussions/pip-vs-easy-install.rst:14
+msgid ":ref:`pip` came later in 2008, as alternative to :ref:`easy_install `, although still largely built on top of :ref:`setuptools` components. It was notable at the time for *not* installing packages as :term:`Eggs ` or from :term:`Eggs ` (but rather simply as 'flat' packages from :term:`sdists `), and introducing the idea of :ref:`Requirements Files `, which gave users the power to easily replicate environments."
+msgstr ""
+
+#: ../source/discussions/pip-vs-easy-install.rst:22
+msgid "Here's a breakdown of the important differences between pip and the deprecated easy_install:"
+msgstr "下面是 pip 和被废弃的 easy_install 之间的重要区别的分类:"
+
+#: ../source/discussions/pip-vs-easy-install.rst:25
+msgid "**pip**"
+msgstr "**pip**"
+
+#: ../source/discussions/pip-vs-easy-install.rst:25
+msgid "**easy_install**"
+msgstr "**easy_install**"
+
+#: ../source/discussions/pip-vs-easy-install.rst:27
+msgid "Installs from :term:`Wheels `"
+msgstr "从 :term:`Wheels ` 安装"
+
+#: ../source/discussions/pip-vs-easy-install.rst:27
+#: ../source/discussions/pip-vs-easy-install.rst:38
+#: ../source/discussions/pip-vs-easy-install.rst:44
+#: ../source/discussions/pip-vs-easy-install.rst:48
+#: ../source/discussions/pip-vs-easy-install.rst:54
+#: ../source/discussions/pip-vs-easy-install.rst:57
+msgid "Yes"
+msgstr "有"
+
+#: ../source/discussions/pip-vs-easy-install.rst:27
+#: ../source/discussions/pip-vs-easy-install.rst:30
+#: ../source/discussions/pip-vs-easy-install.rst:32
+#: ../source/discussions/pip-vs-easy-install.rst:35
+#: ../source/discussions/pip-vs-easy-install.rst:38
+#: ../source/discussions/pip-vs-easy-install.rst:44
+#: ../source/discussions/pip-vs-easy-install.rst:48
+#: ../source/discussions/pip-vs-easy-install.rst:51
+#: ../source/discussions/pip-vs-easy-install.rst:54
+#: ../source/discussions/pip-vs-easy-install.rst:57
+msgid "No"
+msgstr "没有"
+
+#: ../source/discussions/pip-vs-easy-install.rst:30
+msgid "Uninstall Packages"
+msgstr "卸载软件包"
+
+#: ../source/discussions/pip-vs-easy-install.rst:30
+msgid "Yes (``python -m pip uninstall``)"
+msgstr "有(``python -m pip uninstall``)"
+
+#: ../source/discussions/pip-vs-easy-install.rst:32
+msgid "Dependency Overrides"
+msgstr "依赖性覆盖"
+
+#: ../source/discussions/pip-vs-easy-install.rst:32
+msgid "Yes (:ref:`Requirements Files `)"
+msgstr "有(:ref:`Requirements Files `)"
+
+#: ../source/discussions/pip-vs-easy-install.rst:35
+msgid "List Installed Packages"
+msgstr "列出已安装的软件包"
+
+#: ../source/discussions/pip-vs-easy-install.rst:35
+msgid "Yes (``python -m pip list`` and ``python -m pip freeze``)"
+msgstr "有(``python -m pip list`` and ``python -m pip freeze``)"
+
+#: ../source/discussions/pip-vs-easy-install.rst:38
+msgid ":pep:`438` Support"
+msgstr ":pep:`438` 支持"
+
+#: ../source/discussions/pip-vs-easy-install.rst:41
+msgid "Installation format"
+msgstr "安装格式"
+
+#: ../source/discussions/pip-vs-easy-install.rst:41
+msgid "'Flat' packages with :file:`egg-info` metadata."
+msgstr ""
+
+#: ../source/discussions/pip-vs-easy-install.rst:41
+msgid "Encapsulated Egg format"
+msgstr "封装的 Egg 格式"
+
+#: ../source/discussions/pip-vs-easy-install.rst:44
+msgid "sys.path modification"
+msgstr "sys.path 修改"
+
+#: ../source/discussions/pip-vs-easy-install.rst:48
+msgid "Installs from :term:`Eggs `"
+msgstr "从 :term:`Eggs ` 安装"
+
+#: ../source/discussions/pip-vs-easy-install.rst:51
+msgid "`pylauncher support`_"
+msgstr "`pylauncher 支持`_"
+
+#: ../source/discussions/pip-vs-easy-install.rst:51
+msgid "Yes [1]_"
+msgstr "有[1]_"
+
+#: ../source/discussions/pip-vs-easy-install.rst:54
+msgid ":ref:`Multi-version Installs`"
+msgstr ":ref:`Multi-version Installs`"
+
+#: ../source/discussions/pip-vs-easy-install.rst:57
+msgid "Exclude scripts during install"
+msgstr "安装时排除脚本"
+
+#: ../source/discussions/pip-vs-easy-install.rst:60
+msgid "per project index"
+msgstr "每个项目索引"
+
+#: ../source/discussions/pip-vs-easy-install.rst:60
+msgid "Only in virtualenv"
+msgstr "仅在 virtualenv 中"
+
+#: ../source/discussions/pip-vs-easy-install.rst:60
+msgid "Yes, via setup.cfg"
+msgstr "有,通过 setup.cfg"
+
+#: ../source/discussions/pip-vs-easy-install.rst:68
+msgid "https://setuptools.readthedocs.io/en/latest/easy_install.html#natural-script-launcher"
+msgstr ""
+"https://setuptools.readthedocs.io/en/latest/easy_install.html#natural-script-"
+"launcher"
+
+#: ../source/discussions/wheel-vs-egg.rst:5
+msgid "Wheel vs Egg"
+msgstr "Wheel 与 Egg"
+
+#: ../source/discussions/wheel-vs-egg.rst:7
+msgid ":term:`Wheel` and :term:`Egg` are both packaging formats that aim to support the use case of needing an install artifact that doesn't require building or compilation, which can be costly in testing and production workflows."
+msgstr ""
+":term:`Wheel` 和 :term:`Egg` 都是打包格式,旨在支持不需要构建或编译的安装工件的使用情况,这在测试和生产工作流程中可能是昂贵的。"
+
+#: ../source/discussions/wheel-vs-egg.rst:11
+msgid "The :term:`Egg` format was introduced by :ref:`setuptools` in 2004, whereas the :term:`Wheel` format was introduced by :pep:`427` in 2012."
+msgstr ""
+
+#: ../source/discussions/wheel-vs-egg.rst:14
+msgid ":term:`Wheel` is currently considered the standard for :term:`built ` and :term:`binary ` packaging for Python."
+msgstr ""
+
+#: ../source/discussions/wheel-vs-egg.rst:17
+msgid "Here's a breakdown of the important differences between :term:`Wheel` and :term:`Egg`."
+msgstr "下面是关于 :term: `Wheel` 和 :term: `Egg` 之间的重要区别。"
+
+#: ../source/discussions/wheel-vs-egg.rst:20
+msgid ":term:`Wheel` has an :pep:`official PEP <427>`. :term:`Egg` did not."
+msgstr ":term:`Wheel` 有一个 :pep:`official PEP <427>` 。 :term:`Egg` 没有。"
+
+#: ../source/discussions/wheel-vs-egg.rst:22
+msgid ":term:`Wheel` is a :term:`distribution ` format, i.e a packaging format. [1]_ :term:`Egg` was both a distribution format and a runtime installation format (if left zipped), and was designed to be importable."
+msgstr ""
+
+#: ../source/discussions/wheel-vs-egg.rst:26
+msgid ":term:`Wheel` archives do not include .pyc files. Therefore, when the distribution only contains Python files (i.e. no compiled extensions), and is compatible with Python 2 and 3, it's possible for a wheel to be \"universal\", similar to an :term:`sdist `."
+msgstr ""
+
+#: ../source/discussions/wheel-vs-egg.rst:31
+msgid ":term:`Wheel` uses :pep:`PEP376-compliant <376>` ``.dist-info`` directories. Egg used ``.egg-info``."
+msgstr ""
+":term:`Wheel` 使用 :pep:`PEP376-compliant <376>```.dist-info`` 目录。 Egg 使用 "
+"``.egg-info`` 。"
+
+#: ../source/discussions/wheel-vs-egg.rst:34
+msgid ":term:`Wheel` has a :pep:`richer file naming convention <425>`. A single wheel archive can indicate its compatibility with a number of Python language versions and implementations, ABIs, and system architectures."
+msgstr ""
+
+#: ../source/discussions/wheel-vs-egg.rst:38
+msgid ":term:`Wheel` is versioned. Every wheel file contains the version of the wheel specification and the implementation that packaged it."
+msgstr ""
+
+#: ../source/discussions/wheel-vs-egg.rst:41
+msgid ":term:`Wheel` is internally organized by `sysconfig path type `_, therefore making it easier to convert to other formats."
+msgstr ""
+
+#: ../source/discussions/wheel-vs-egg.rst:47
+msgid "Circumstantially, in some cases, wheels can be used as an importable runtime format, although :pep:`this is not officially supported at this time <427#is-it-possible-to-import-python-code-directly-from-a-wheel-file>`."
+msgstr ""
+
+#: ../source/glossary.rst:3
+msgid "Glossary"
+msgstr "词汇表"
+
+#: ../source/glossary.rst:8
+msgid "Binary Distribution"
+msgstr ""
+
+#: ../source/glossary.rst:11
+msgid "A specific kind of :term:`Built Distribution` that contains compiled extensions."
+msgstr ""
+
+#: ../source/glossary.rst:14
+msgid "Built Distribution"
+msgstr ""
+
+#: ../source/glossary.rst:17
+msgid "A :term:`Distribution ` format containing files and metadata that only need to be moved to the correct location on the target system, to be installed. :term:`Wheel` is such a format, whereas distutil's :term:`Source Distribution ` is not, in that it requires a build step before it can be installed. This format does not imply that Python files have to be precompiled (:term:`Wheel` intentionally does not include compiled Python files)."
+msgstr ""
+
+#: ../source/glossary.rst:26
+msgid "Distribution Package"
+msgstr "分发软件包"
+
+#: ../source/glossary.rst:29
+msgid "A versioned archive file that contains Python :term:`packages `, :term:`modules `, and other resource files that are used to distribute a :term:`Release`. The archive file is what an end-user will download from the internet and install."
+msgstr ""
+
+#: ../source/glossary.rst:34
+msgid "A distribution package is more commonly referred to with the single words \"package\" or \"distribution\", but this guide may use the expanded term when more clarity is needed to prevent confusion with an :term:`Import Package` (which is also commonly called a \"package\") or another kind of distribution (e.g. a Linux distribution or the Python language distribution), which are often referred to with the single term \"distribution\"."
+msgstr ""
+
+#: ../source/glossary.rst:41
+msgid "Egg"
+msgstr "Egg"
+
+#: ../source/glossary.rst:44
+msgid "A :term:`Built Distribution` format introduced by :ref:`setuptools`, which is being replaced by :term:`Wheel`. For details, see `The Internal Structure of Python Eggs `_ and `Python Eggs `_"
+msgstr ""
+
+#: ../source/glossary.rst:49
+msgid "Extension Module"
+msgstr "扩展模块"
+
+#: ../source/glossary.rst:52
+msgid "A :term:`Module` written in the low-level language of the Python implementation: C/C++ for Python, Java for Jython. Typically contained in a single dynamically loadable pre-compiled file, e.g. a shared object (.so) file for Python extensions on Unix, a DLL (given the .pyd extension) for Python extensions on Windows, or a Java class file for Jython extensions."
+msgstr ""
+
+#: ../source/glossary.rst:59
+msgid "Known Good Set (KGS)"
+msgstr ""
+
+#: ../source/glossary.rst:62
+msgid "A set of distributions at specified versions which are compatible with each other. Typically a test suite will be run which passes all tests before a specific set of packages is declared a known good set. This term is commonly used by frameworks and toolkits which are comprised of multiple individual distributions."
+msgstr ""
+
+#: ../source/glossary.rst:68
+msgid "Import Package"
+msgstr "导入包"
+
+#: ../source/glossary.rst:71
+msgid "A Python module which can contain other modules or recursively, other packages."
+msgstr ""
+
+#: ../source/glossary.rst:74
+msgid "An import package is more commonly referred to with the single word \"package\", but this guide will use the expanded term when more clarity is needed to prevent confusion with a :term:`Distribution Package` which is also commonly called a \"package\"."
+msgstr ""
+
+#: ../source/glossary.rst:78
+msgid "Module"
+msgstr "模块(Module)"
+
+#: ../source/glossary.rst:81
+msgid "The basic unit of code reusability in Python, existing in one of two types: :term:`Pure Module`, or :term:`Extension Module`."
+msgstr ""
+
+#: ../source/glossary.rst:84
+msgid "Package Index"
+msgstr "包索引 (Package Index)"
+
+#: ../source/glossary.rst:87
+msgid "A repository of distributions with a web interface to automate :term:`package ` discovery and consumption."
+msgstr ""
+
+#: ../source/glossary.rst:90
+msgid "Per Project Index"
+msgstr ""
+
+#: ../source/glossary.rst:93
+msgid "A private or other non-canonical :term:`Package Index` indicated by a specific :term:`Project` as the index preferred or required to resolve dependencies of that project."
+msgstr ""
+
+#: ../source/glossary.rst:97
+msgid "Project"
+msgstr "项目 (Project)"
+
+#: ../source/glossary.rst:100
+msgid "A library, framework, script, plugin, application, or collection of data or other resources, or some combination thereof that is intended to be packaged into a :term:`Distribution `."
+msgstr ""
+
+#: ../source/glossary.rst:104
+msgid "Since most projects create :term:`Distributions ` using either :pep:`518` ``build-system``, :ref:`distutils` or :ref:`setuptools`, another practical way to define projects currently is something that contains a :term:`pyproject.toml`, :term:`setup.py`, or :term:`setup.cfg` file at the root of the project source directory."
+msgstr ""
+
+#: ../source/glossary.rst:110
+msgid "Python projects must have unique names, which are registered on :term:`PyPI `. Each project will then contain one or more :term:`Releases `, and each release may comprise one or more :term:`distributions `."
+msgstr ""
+"Python 项目必须具有独特且唯一的名称,这些名字可以在 :term:`PyPI ` 上注册。"
+"然后每个项目将包含一个或多个 :term:`发布` ,每个版本可能包括一个或多个 :term:`套件 ` 。"
+
+#: ../source/glossary.rst:115
+msgid "Note that there is a strong convention to name a project after the name of the package that is imported to run that project. However, this doesn't have to hold true. It's possible to install a distribution from the project 'foo' and have it provide a package importable only as 'bar'."
+msgstr ""
+
+#: ../source/glossary.rst:121
+msgid "Pure Module"
+msgstr "纯模块 (Pure Module)"
+
+#: ../source/glossary.rst:124
+msgid "A :term:`Module` written in Python and contained in a single ``.py`` file (and possibly associated ``.pyc`` and/or ``.pyo`` files)."
+msgstr ""
+
+#: ../source/glossary.rst:127
+msgid "Python Packaging Authority (PyPA)"
+msgstr "Python 包装管理局 (PyPA)"
+
+#: ../source/glossary.rst:130
+msgid "PyPA is a working group that maintains many of the relevant projects in Python packaging. They maintain a site at https://www.pypa.io, host projects on `GitHub `_ and `Bitbucket `_, and discuss issues on the `distutils-sig mailing list `_ and `the Python Discourse forum `__."
+msgstr ""
+"PyPA 是一个工作小组,负责维护 Python 包装中的许多相关项目。他们在 https://www.pypa.io,`GitHub "
+"`_ 和`Bitbucket `_ 上托管项目,"
+"并在 `distutils-sig 邮件列表 `_ 和 `Python Discourse 论坛 `__ 上讨论问题。"
+
+#: ../source/glossary.rst:139
+msgid "Python Package Index (PyPI)"
+msgstr "Python 包索引 (PyPI)"
+
+#: ../source/glossary.rst:142
+msgid "`PyPI `_ is the default :term:`Package Index` for the Python community. It is open to all Python developers to consume and distribute their distributions."
+msgstr ""
+"`PyPI `_ 是 Python 社区的默认 :term:`包索引 (Package Index)` 。所有 "
+"Python 开发人员都可以使用和分发他们的发行版。"
+
+#: ../source/glossary.rst:145
+msgid "pypi.org"
+msgstr "pypi.org"
+
+#: ../source/glossary.rst:148
+msgid "`pypi.org `_ is the domain name for the :term:`Python Package Index (PyPI)`. It replaced the legacy index domain name, ``pypi.python.org``, in 2017. It is powered by :ref:`warehouse`."
+msgstr ""
+
+#: ../source/glossary.rst:152
+msgid "pyproject.toml"
+msgstr "pyproject.toml"
+
+#: ../source/glossary.rst:155
+msgid "The tool-agnostic :term:`Project` specification file. Defined in :pep:`518`."
+msgstr ""
+
+#: ../source/glossary.rst:157
+msgid "Release"
+msgstr ""
+
+#: ../source/glossary.rst:160
+msgid "A snapshot of a :term:`Project` at a particular point in time, denoted by a version identifier."
+msgstr ""
+
+#: ../source/glossary.rst:163
+msgid "Making a release may entail the publishing of multiple :term:`Distributions `. For example, if version 1.0 of a project was released, it could be available in both a source distribution format and a Windows installer distribution format."
+msgstr ""
+
+#: ../source/glossary.rst:168
+msgid "Requirement"
+msgstr ""
+
+#: ../source/glossary.rst:171
+msgid "A specification for a :term:`package ` to be installed. :ref:`pip`, the :term:`PYPA ` recommended installer, allows various forms of specification that can all be considered a \"requirement\". For more information, see the :ref:`pip:pip install` reference."
+msgstr ""
+
+#: ../source/glossary.rst:177
+msgid "Requirement Specifier"
+msgstr ""
+
+#: ../source/glossary.rst:180
+msgid "A format used by :ref:`pip` to install packages from a :term:`Package Index`. For an EBNF diagram of the format, see the `pkg_resources.Requirement `_ entry in the :ref:`setuptools` docs. For example, \"foo>=1.3\" is a requirement specifier, where \"foo\" is the project name, and the \">=1.3\" portion is the :term:`Version Specifier`"
+msgstr ""
+
+#: ../source/glossary.rst:187
+msgid "Requirements File"
+msgstr ""
+
+#: ../source/glossary.rst:190
+msgid "A file containing a list of :term:`Requirements ` that can be installed using :ref:`pip`. For more information, see the :ref:`pip` docs on :ref:`pip:Requirements Files`."
+msgstr ""
+
+#: ../source/glossary.rst:194
+#: ../source/guides/distributing-packages-using-setuptools.rst:56
+msgid "setup.py"
+msgstr "setup.py"
+
+#: ../source/glossary.rst:195
+#: ../source/guides/distributing-packages-using-setuptools.rst:77
+msgid "setup.cfg"
+msgstr "setup.cfg"
+
+#: ../source/glossary.rst:198
+msgid "The project specification files for :ref:`distutils` and :ref:`setuptools`. See also :term:`pyproject.toml`."
+msgstr ""
+
+#: ../source/glossary.rst:201
+msgid "Source Archive"
+msgstr ""
+
+#: ../source/glossary.rst:204
+msgid "An archive containing the raw source code for a :term:`Release`, prior to creation of a :term:`Source Distribution ` or :term:`Built Distribution`."
+msgstr ""
+
+#: ../source/glossary.rst:208
+msgid "Source Distribution (or \"sdist\")"
+msgstr "源代码分发(或“sdist”)"
+
+#: ../source/glossary.rst:211
+msgid "A :term:`distribution ` format (usually generated using ``python setup.py sdist``) that provides metadata and the essential source files needed for installing by a tool like :ref:`pip`, or for generating a :term:`Built Distribution`."
+msgstr ""
+
+#: ../source/glossary.rst:216
+msgid "System Package"
+msgstr "系统包 (System Package)"
+
+#: ../source/glossary.rst:219
+msgid "A package provided in a format native to the operating system, e.g. an rpm or dpkg file."
+msgstr ""
+
+#: ../source/glossary.rst:222
+msgid "Version Specifier"
+msgstr "版本说明符 (Version Specifier)"
+
+#: ../source/glossary.rst:225
+msgid "The version component of a :term:`Requirement Specifier`. For example, the \">=1.3\" portion of \"foo>=1.3\". :pep:`440` contains a :pep:`full specification <440#version-specifiers>` of the specifiers that Python packaging currently supports. Support for PEP440 was implemented in :ref:`setuptools` v8.0 and :ref:`pip` v6.0."
+msgstr ""
+
+#: ../source/glossary.rst:231
+msgid "Virtual Environment"
+msgstr "虚拟环境 (Virtual Environment)"
+
+#: ../source/glossary.rst:234
+msgid "An isolated Python environment that allows packages to be installed for use by a particular application, rather than being installed system wide. For more information, see the section on :ref:`Creating and using Virtual Environments`."
+msgstr ""
+
+#: ../source/glossary.rst:238
+msgid "Wheel"
+msgstr "Wheel"
+
+#: ../source/glossary.rst:241
+msgid "A :term:`Built Distribution` format introduced by :pep:`427`, which is intended to replace the :term:`Egg` format. Wheel is currently supported by :ref:`pip`."
+msgstr ""
+
+#: ../source/glossary.rst:244
+msgid "Working Set"
+msgstr "工作集 (Working Set)"
+
+#: ../source/glossary.rst:247
+msgid "A collection of :term:`distributions ` available for importing. These are the distributions that are on the `sys.path` variable. At most, one :term:`Distribution ` for a project is possible in a working set."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:3
+msgid "Analyzing PyPI package downloads"
+msgstr "分析 PyPI 软件包的下载情况"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:5
+msgid "This section covers how to use the public PyPI download statistics dataset to learn more about downloads of a package (or packages) hosted on PyPI. For example, you can use it to discover the distribution of Python versions used to download a package."
+msgstr ""
+"本节介绍了如何使用公共的 PyPI 下载统计数据集来了解PyPI上托管的软件包 (packages) 的下载情况。例如,您可以用它来发现用于下载软件包的 "
+"Python 版本的分布。"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:15
+#: ../source/guides/supporting-windows-using-appveyor.rst:18
+msgid "Background"
+msgstr "背景"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:17
+msgid "PyPI does not display download statistics for a number of reasons: [#]_"
+msgstr "由于一些原因,PyPI 不显示下载统计数据。[#]_"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:19
+msgid "**Inefficient to make work with a Content Distribution Network (CDN):** Download statistics change constantly. Including them in project pages, which are heavily cached, would require invalidating the cache more often, and reduce the overall effectiveness of the cache."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:24
+msgid "**Highly inaccurate:** A number of things prevent the download counts from being accurate, some of which include:"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:27
+msgid "``pip``'s download cache (lowers download counts)"
+msgstr "``pip`` 的下载缓存(降低下载次数)"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:28
+msgid "Internal or unofficial mirrors (can both raise or lower download counts)"
+msgstr "内部或非官方的镜像(既可以提高也可以降低下载量)"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:29
+msgid "Packages not hosted on PyPI (for comparisons sake)"
+msgstr "未在 PyPI 上托管的软件包(为了比较)"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:30
+msgid "Unofficial scripts or attempts at download count inflation (raises download counts)"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:32
+msgid "Known historical data quality issues (lowers download counts)"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:34
+msgid "**Not particularly useful:** Just because a project has been downloaded a lot doesn't mean it's good; Similarly just because a project hasn't been downloaded a lot doesn't mean it's bad!"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:38
+msgid "In short, because it's value is low for various reasons, and the tradeoffs required to make it work are high, it has been not an effective use of limited resources."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:43
+msgid "Public dataset"
+msgstr "公共数据集"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:45
+msgid "As an alternative, the `Linehaul project `__ streams download logs from PyPI to `Google BigQuery`_ [#]_, where they are stored as a public dataset."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:50
+msgid "Getting set up"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:52
+msgid "In order to use `Google BigQuery`_ to query the `public PyPI download statistics dataset`_, you'll need a Google account and to enable the BigQuery API on a Google Cloud Platform project. You can run the up to 1TB of queries per month `using the BigQuery free tier without a credit card `__"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:58
+msgid "Navigate to the `BigQuery web UI`_."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:59
+msgid "Create a new project."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:60
+msgid "Enable the `BigQuery API `__."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:63
+msgid "For more detailed instructions on how to get started with BigQuery, check out the `BigQuery quickstart guide `__."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:69
+msgid "Data schema"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:71
+msgid "Linehaul writes an entry in a ``bigquery-public-data.pypi.file_downloads`` table for each download. The table contains information about what file was downloaded and how it was downloaded. Some useful columns from the `table schema `__ include:"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:78
+msgid "Column"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:78
+#: ../source/guides/using-manifest-in.rst:67
+#: ../source/specifications/core-metadata.rst:185
+msgid "Description"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:78
+#: ../source/specifications/direct-url.rst:226
+msgid "Examples"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:80
+msgid "timestamp"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:80
+msgid "Date and time"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:80
+msgid "``2020-03-09 00:33:03 UTC``"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:82
+msgid "file.project"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:82
+msgid "Project name"
+msgstr "项目名称"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:82
+msgid "``pipenv``, ``nose``"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:84
+msgid "file.version"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:84
+msgid "Package version"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:84
+msgid "``0.1.6``, ``1.4.2``"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:86
+msgid "details.installer.name"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:86
+msgid "Installer"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:86
+msgid "pip, `bandersnatch`_"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:88
+msgid "details.python"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:88
+msgid "Python version"
+msgstr "Python 版本"
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:88
+msgid "``2.7.12``, ``3.6.4``"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:93
+msgid "Useful queries"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:95
+msgid "Run queries in the `BigQuery web UI`_ by clicking the \"Compose query\" button."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:97
+msgid "Note that the rows are stored in a partitioned, which helps limit the cost of queries. These example queries analyze downloads from recent history by filtering on the ``timestamp`` column."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:102
+msgid "Counting package downloads"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:104
+msgid "The following query counts the total number of downloads for the project \"pytest\"."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:119
+#: ../source/guides/analyzing-pypi-package-downloads.rst:140
+#: ../source/guides/analyzing-pypi-package-downloads.rst:168
+#: ../source/guides/analyzing-pypi-package-downloads.rst:205
+msgid "num_downloads"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:121
+msgid "26190085"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:124
+msgid "To only count downloads from pip, filter on the ``details.installer.name`` column."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:142
+msgid "24334215"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:146
+msgid "Package downloads over time"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:148
+msgid "To group by monthly downloads, use the ``TIMESTAMP_TRUNC`` function. Also filtering by this column reduces corresponding costs."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:168
+msgid "month"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:170
+msgid "1956741"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:170
+msgid "2018-01-01"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:172
+msgid "2344692"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:172
+msgid "2017-12-01"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:174
+msgid "1730398"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:174
+msgid "2017-11-01"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:176
+msgid "2047310"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:176
+msgid "2017-10-01"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:178
+msgid "1744443"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:178
+msgid "2017-09-01"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:180
+msgid "1916952"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:180
+msgid "2017-08-01"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:184
+msgid "Python versions over time"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:186
+msgid "Extract the Python version from the ``details.python`` column. Warning: This query processes over 500 GB of data."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:205
+msgid "python"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:207
+msgid "3.7"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:207
+msgid "18051328726"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:209
+msgid "3.6"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:209
+msgid "9635067203"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:211
+msgid "3.8"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:211
+msgid "7781904681"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:213
+msgid "2.7"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:213
+msgid "6381252241"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:215
+msgid "null"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:215
+msgid "2026630299"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:217
+msgid "3.5"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:217
+msgid "1894153540"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:221
+msgid "Caveats"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:223
+msgid "In addition to the caveats listed in the background above, Linehaul suffered from a bug which caused it to significantly under-report download statistics prior to July 26, 2018. Downloads before this date are proportionally accurate (e.g. the percentage of Python 2 vs. Python 3 downloads) but total numbers are lower than actual by an order of magnitude."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:231
+msgid "Additional tools"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:233
+msgid "Besides using the BigQuery console, there are some additional tools which may be useful when analyzing download statistics."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:237
+msgid "``google-cloud-bigquery``"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:239
+msgid "You can also access the public PyPI download statistics dataset programmatically via the BigQuery API and the `google-cloud-bigquery`_ project, the official Python client library for BigQuery."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:267
+msgid "``pypinfo``"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:269
+msgid "`pypinfo`_ is a command-line tool which provides access to the dataset and can generate several useful queries. For example, you can query the total number of download for a package with the command ``pypinfo package_name``."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:273
+msgid "Install `pypinfo`_ using pip."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:279
+msgid "Usage:"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:295
+msgid "``pandas-gbq``"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:297
+msgid "The `pandas-gbq`_ project allows for accessing query results via `Pandas`_."
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:301
+#: ../source/specifications/binary-distribution-format.rst:459
+msgid "References"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:303
+msgid "`PyPI Download Counts deprecation email `__"
+msgstr ""
+
+#: ../source/guides/analyzing-pypi-package-downloads.rst:304
+msgid "`PyPI BigQuery dataset announcement email `__"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:3
+msgid "Creating and discovering plugins"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:5
+msgid "Often when creating a Python application or library you'll want the ability to provide customizations or extra features via **plugins**. Because Python packages can be separately distributed, your application or library may want to automatically **discover** all of the plugins available."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:10
+msgid "There are three major approaches to doing automatic plugin discovery:"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:12
+msgid "`Using naming convention`_."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:13
+msgid "`Using namespace packages`_."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:14
+msgid "`Using package metadata`_."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:18
+msgid "Using naming convention"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:20
+msgid "If all of the plugins for your application follow the same naming convention, you can use :func:`pkgutil.iter_modules` to discover all of the top-level modules that match the naming convention. For example, `Flask`_ uses the naming convention ``flask_{plugin_name}``. If you wanted to automatically discover all of the Flask plugins installed:"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:38
+msgid "If you had both the `Flask-SQLAlchemy`_ and `Flask-Talisman`_ plugins installed then ``discovered_plugins`` would be:"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:48
+msgid "Using naming convention for plugins also allows you to query the Python Package Index's `simple API`_ for all packages that conform to your naming convention."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:59
+msgid "Using namespace packages"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:61
+msgid ":doc:`Namespace packages ` can be used to provide a convention for where to place plugins and also provides a way to perform discovery. For example, if you make the sub-package ``myapp.plugins`` a namespace package then other :term:`distributions ` can provide modules and packages to that namespace. Once installed, you can use :func:`pkgutil.iter_modules` to discover all modules and packages installed under that namespace:"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:89
+msgid "Specifying ``myapp.plugins.__path__`` to :func:`~pkgutil.iter_modules` causes it to only look for the modules directly under that namespace. For example, if you have installed distributions that provide the modules ``myapp.plugins.a`` and ``myapp.plugins.b`` then ``discovered_plugins`` in this case would be:"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:101
+msgid "This sample uses a sub-package as the namespace package (``myapp.plugins``), but it's also possible to use a top-level package for this purpose (such as ``myapp_plugins``). How to pick the namespace to use is a matter of preference, but it's not recommended to make your project's main top-level package (``myapp`` in this case) a namespace package for the purpose of plugins, as one bad plugin could cause the entire namespace to break which would in turn make your project unimportable. For the \"namespace sub-package\" approach to work, the plugin packages must omit the :file:`__init__.py` for your top-level package directory (``myapp`` in this case) and include the namespace-package style :file:`__init__.py` in the namespace sub-package directory (``myapp/plugins``). This also means that plugins will need to explicitly pass a list of packages to :func:`setup`'s ``packages`` argument instead of using :func:`setuptools.find_packages`."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:115
+msgid "Namespace packages are a complex feature and there are several different ways to create them. It's highly recommended to read the :doc:`packaging-namespace-packages` documentation and clearly document which approach is preferred for plugins to your project."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:121
+msgid "Using package metadata"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:123
+msgid "`Setuptools`_ provides :doc:`special support ` for plugins. By providing the ``entry_points`` argument to :func:`setup` in :file:`setup.py` plugins can register themselves for discovery."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:128
+msgid "For example if you have a package named ``myapp-plugin-a`` and it includes in its :file:`setup.py`:"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:139
+msgid "Then you can discover and load all of the registered entry points by using :func:`importlib.metadata.entry_points` (or the `backport`_ ``importlib_metadata >= 3.6`` for Python 3.6-3.9):"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:154
+msgid "In this example, ``discovered_plugins`` would be a collection of type :class:`importlib.metadata.EntryPoint`:"
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:163
+msgid "Now the module of your choice can be imported by executing ``discovered_plugins['a'].load()``."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:166
+msgid "The ``entry_point`` specification in :file:`setup.py` is fairly flexible and has a lot of options. It's recommended to read over the entire section on :doc:`entry points ` ."
+msgstr ""
+
+#: ../source/guides/creating-and-discovering-plugins.rst:170
+msgid "Since this specification is part of the :doc:`standard library `, most packaging tools other than setuptools provide support for defining entry points."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:5
+msgid "Packaging and distributing projects"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:7
+msgid "This section covers the basics of how to configure, package and distribute your own Python projects. It assumes that you are already familiar with the contents of the :doc:`/tutorials/installing-packages` page."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:11
+msgid "The section does *not* aim to cover best practices for Python project development as a whole. For example, it does not provide guidance or tool recommendations for version control, documentation, or testing."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:15
+msgid "For more reference material, see :std:doc:`Building and Distributing Packages ` in the :ref:`setuptools` docs, but note that some advisory content there may be outdated. In the event of conflicts, prefer the advice in the Python Packaging User Guide."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:25
+msgid "Requirements for packaging and distributing"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:26
+msgid "First, make sure you have already fulfilled the :ref:`requirements for installing packages `."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:29
+msgid "Install \"twine\" [1]_:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:43
+msgid "You'll need this to upload your project :term:`distributions ` to :term:`PyPI ` (see :ref:`below `)."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:49
+msgid "Configuring your project"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:53
+msgid "Initial files"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:58
+msgid "The most important file is :file:`setup.py` which exists at the root of your project directory. For an example, see the `setup.py `_ in the `PyPA sample project `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:63
+msgid ":file:`setup.py` serves two primary functions:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:65
+msgid "It's the file where various aspects of your project are configured. The primary feature of :file:`setup.py` is that it contains a global ``setup()`` function. The keyword arguments to this function are how specific details of your project are defined. The most relevant arguments are explained in :ref:`the section below `."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:71
+msgid "It's the command line interface for running various commands that relate to packaging tasks. To get a listing of available commands, run ``python setup.py --help-commands``."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:79
+msgid ":file:`setup.cfg` is an ini file that contains option defaults for :file:`setup.py` commands. For an example, see the `setup.cfg `_ in the `PyPA sample project `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:86
+msgid "README.rst / README.md"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:88
+msgid "All projects should contain a readme file that covers the goal of the project. The most common format is `reStructuredText `_ with an \"rst\" extension, although this is not a requirement; multiple variants of `Markdown `_ are supported as well (look at ``setup()``'s :ref:`long_description_content_type ` argument)."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:95
+msgid "For an example, see `README.md `_ from the `PyPA sample project `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:99
+msgid "Projects using :ref:`setuptools` 0.6.27+ have standard readme files (:file:`README.rst`, :file:`README.txt`, or :file:`README`) included in source distributions by default. The built-in :ref:`distutils` library adopts this behavior beginning in Python 3.7. Additionally, :ref:`setuptools` 36.4.0+ will include a :file:`README.md` if found. If you are using setuptools, you don't need to list your readme file in :file:`MANIFEST.in`. Otherwise, include it to be explicit."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:108
+msgid "MANIFEST.in"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:110
+msgid "A :file:`MANIFEST.in` is needed when you need to package additional files that are not automatically included in a source distribution. For details on writing a :file:`MANIFEST.in` file, including a list of what's included by default, see \":ref:`Using MANIFEST.in`\"."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:115
+msgid "For an example, see the `MANIFEST.in `_ from the `PyPA sample project `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:119
+msgid ":file:`MANIFEST.in` does not affect binary distributions such as wheels."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:122
+msgid "LICENSE.txt"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:124
+msgid "Every package should include a license file detailing the terms of distribution. In many jurisdictions, packages without an explicit license can not be legally used or distributed by anyone other than the copyright holder. If you're unsure which license to choose, you can use resources such as `GitHub's Choose a License `_ or consult a lawyer."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:130
+msgid "For an example, see the `LICENSE.txt `_ from the `PyPA sample project `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:135
+msgid ""
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:137
+msgid "Although it's not required, the most common practice is to include your Python modules and packages under a single top-level package that has the same :ref:`name ` as your project, or something very close."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:141
+msgid "For an example, see the `sample `_ package that's included in the `PyPA sample project `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:149
+msgid "setup() args"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:151
+msgid "As mentioned above, the primary feature of :file:`setup.py` is that it contains a global ``setup()`` function. The keyword arguments to this function are how specific details of your project are defined."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:155
+msgid "The most relevant arguments are explained below. Most of the snippets given are taken from the `setup.py `_ contained in the `PyPA sample project `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:164
+msgid "name"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:170
+msgid "This is the name of your project, determining how your project is listed on :term:`PyPI `. Per :pep:`508`, valid project names must:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:174
+msgid "Consist only of ASCII letters, digits, underscores (``_``), hyphens (``-``), and/or periods (``.``), and"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:176
+msgid "Start & end with an ASCII letter or digit."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:178
+msgid "Comparison of project names is case insensitive and treats arbitrarily-long runs of underscores, hyphens, and/or periods as equal. For example, if you register a project named ``cool-stuff``, users will be able to download it or declare a dependency on it using any of the following spellings::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:190
+#: ../source/specifications/binary-distribution-format.rst:127
+msgid "version"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:196
+msgid "This is the current version of your project, allowing your users to determine whether or not they have the latest version, and to indicate which specific versions they've tested their own software against."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:200
+msgid "Versions are displayed on :term:`PyPI ` for each release if you publish your project."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:203
+msgid "See :ref:`Choosing a versioning scheme` for more information on ways to use versions to convey compatibility information to your users."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:206
+msgid "If the project code itself needs run-time access to the version, the simplest way is to keep the version in both :file:`setup.py` and your code. If you'd rather not duplicate the value, there are a few ways to manage this. See the \":ref:`Single sourcing the version`\" Advanced Topics section."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:214
+msgid "description"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:222
+msgid "Give a short and long description for your project."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:224
+msgid "These values will be displayed on :term:`PyPI ` if you publish your project. On ``pypi.org``, the user interface displays ``description`` in the grey banner and ``long_description`` in the section named \"Project Description\"."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:229
+msgid "``description`` is also displayed in lists of projects. For example, it's visible in the search results pages such as https://pypi.org/search/?q=jupyter, the front-page lists of trending projects and new releases, and the list of projects you maintain within your account profile (such as https://pypi.org/user/jaraco/)."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:235
+msgid "A `content type `_ can be specified with the ``long_description_content_type`` argument, which can be one of ``text/plain``, ``text/x-rst``, or ``text/markdown``, corresponding to no formatting, `reStructuredText (reST) `_, and the Github-flavored Markdown dialect of `Markdown `_ respectively."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:245
+msgid "url"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:252
+msgid "Give a homepage URL for your project."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:256
+msgid "author"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:263
+msgid "Provide details about the author."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:267
+msgid "license"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:273
+msgid "The ``license`` argument doesn't have to indicate the license under which your package is being released, although you may optionally do so if you want. If you're using a standard, well-known license, then your main indication can and should be via the ``classifiers`` argument. Classifiers exist for all major open-source licenses."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:279
+msgid "The \"license\" argument is more typically used to indicate differences from well-known licenses, or to include your own, unique license. As a general rule, it's a good idea to use a standard, well-known license, both to avoid confusion and because some organizations avoid software whose license is unapproved."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:287
+msgid "classifiers"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:316
+msgid "Provide a list of classifiers that categorize your project. For a full listing, see https://pypi.org/classifiers/."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:319
+msgid "Although the list of classifiers is often used to declare what Python versions a project supports, this information is only used for searching & browsing projects on PyPI, not for installing projects. To actually restrict what Python versions a project can be installed on, use the :ref:`python_requires` argument."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:327
+msgid "keywords"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:333
+msgid "List keywords that describe your project."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:337
+msgid "project_urls"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:349
+msgid "List additional relevant URLs about your project. This is the place to link to bug trackers, source repositories, or where to support package development. The string of the key is the exact text that will be displayed on PyPI."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:355
+msgid "packages"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:361
+msgid "Set ``packages`` to a list of all :term:`packages ` in your project, including their subpackages, sub-subpackages, etc. Although the packages can be listed manually, ``setuptools.find_packages()`` finds them automatically. Use the ``include`` keyword argument to find only the given packages. Use the ``exclude`` keyword argument to omit packages that are not intended to be released and installed."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:370
+msgid "py_modules"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:376
+msgid "If your project contains any single-file Python modules that aren't part of a package, set ``py_modules`` to a list of the names of the modules (minus the ``.py`` extension) in order to make :ref:`setuptools` aware of them."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:388
+msgid "\"install_requires\" should be used to specify what dependencies a project minimally needs to run. When the project is installed by :ref:`pip`, this is the specification that is used to install its dependencies."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:392
+msgid "For more on using \"install_requires\" see :ref:`install_requires vs Requirements files`."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:398
+msgid "python_requires"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:400
+msgid "If your project only runs on certain Python versions, setting the ``python_requires`` argument to the appropriate :pep:`440` version specifier string will prevent :ref:`pip` from installing the project on other Python versions. For example, if your package is for Python 3+ only, write::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:407
+msgid "If your package is for Python 2.6, 2.7, and all versions of Python 3 starting with 3.3, write::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:412
+msgid "And so on."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:416
+msgid "Support for this feature is relatively recent. Your project's source distributions and wheels (see :ref:`Packaging Your Project`) must be built using at least version 24.2.0 of :ref:`setuptools` in order for the ``python_requires`` argument to be recognized and the appropriate metadata generated."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:422
+msgid "In addition, only versions 9.0.0 and higher of :ref:`pip` recognize the ``python_requires`` metadata. Users with earlier versions of pip will be able to download & install projects on any Python version regardless of the projects' ``python_requires`` values."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:431
+msgid "package_data"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:440
+msgid "Often, additional files need to be installed into a :term:`package `. These files are often data that’s closely related to the package’s implementation, or text files containing documentation that might be of interest to programmers using the package. These files are called \"package data\"."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:445
+msgid "The value must be a mapping from package name to a list of relative path names that should be copied into the package. The paths are interpreted as relative to the directory containing the package."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:449
+msgid "For more information, see :std:doc:`Including Data Files ` from the :std:doc:`setuptools docs `."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:457
+msgid "data_files"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:463
+msgid "Although configuring :ref:`Package Data` is sufficient for most needs, in some cases you may need to place data files *outside* of your :term:`packages `. The ``data_files`` directive allows you to do that. It is mostly useful if you need to install files which are used by other programs, which may be unaware of Python packages."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:469
+msgid "Each ``(directory, files)`` pair in the sequence specifies the installation directory and the files to install there. The ``directory`` must be a relative path (although this may change in the future, see `wheel Issue #92 `_). and it is interpreted relative to the installation prefix (Python’s ``sys.prefix`` for a default installation; ``site.USER_BASE`` for a user installation). Each file name in ``files`` is interpreted relative to the :file:`setup.py` script at the top of the project source distribution."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:479
+msgid "For more information see the distutils section on `Installing Additional Files `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:484
+msgid "When installing packages as egg, ``data_files`` is not supported. So, if your project uses :ref:`setuptools`, you must use ``pip`` to install it. Alternatively, if you must use ``python setup.py``, then you need to pass the ``--old-and-unmanageable`` option."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:491
+msgid "scripts"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:493
+msgid "Although ``setup()`` supports a `scripts `_ keyword for pointing to pre-made scripts to install, the recommended approach to achieve cross-platform compatibility is to use :ref:`console_scripts` entry points (see below)."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:500
+msgid "entry_points"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:509
+msgid "Use this keyword to specify any plugins that your project provides for any named entry points that may be defined by your project or others that you depend on."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:512
+msgid "For more information, see the section on `Advertising Behavior `_ from the :ref:`setuptools` docs."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:516
+msgid "The most commonly used entry point is \"console_scripts\" (see below)."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:521
+msgid "console_scripts"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:531
+msgid "Use \"console_script\" `entry points `_ to register your script interfaces. You can then let the toolchain handle the work of turning these interfaces into actual scripts [2]_. The scripts will be generated during the install of your :term:`distribution `."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:538
+msgid "For more information, see `Automatic Script Creation `_ from the `setuptools docs `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:545
+msgid "Choosing a versioning scheme"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:548
+msgid "Standards compliance for interoperability"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:550
+msgid "Different Python projects may use different versioning schemes based on the needs of that particular project, but all of them are required to comply with the flexible :pep:`public version scheme <440#public-version-identifiers>` specified in :pep:`440` in order to be supported in tools and libraries like ``pip`` and ``setuptools``."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:556
+msgid "Here are some examples of compliant version numbers::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:567
+msgid "To further accommodate historical variations in approaches to version numbering, :pep:`440` also defines a comprehensive technique for :pep:`version normalisation <440#normalization>` that maps variant spellings of different version numbers to a standardised canonical form."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:573
+msgid "Scheme choices"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:576
+msgid "Semantic versioning (preferred)"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:578
+msgid "For new projects, the recommended versioning scheme is based on `Semantic Versioning `_, but adopts a different approach to handling pre-releases and build metadata."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:582
+msgid "The essence of semantic versioning is a 3-part MAJOR.MINOR.MAINTENANCE numbering scheme, where the project author increments:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:585
+msgid "MAJOR version when they make incompatible API changes,"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:586
+msgid "MINOR version when they add functionality in a backwards-compatible manner, and"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:587
+msgid "MAINTENANCE version when they make backwards-compatible bug fixes."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:589
+msgid "Adopting this approach as a project author allows users to make use of :pep:`\"compatible release\" <440#compatible-release>` specifiers, where ``name ~= X.Y`` requires at least release X.Y, but also allows any later release with a matching MAJOR version."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:594
+msgid "Python projects adopting semantic versioning should abide by clauses 1-8 of the `Semantic Versioning 2.0.0 specification `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:598
+msgid "Date based versioning"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:600
+msgid "Semantic versioning is not a suitable choice for all projects, such as those with a regular time based release cadence and a deprecation process that provides warnings for a number of releases prior to removal of a feature."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:604
+msgid "A key advantage of date based versioning is that it is straightforward to tell how old the base feature set of a particular release is given just the version number."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:607
+msgid "Version numbers for date based projects typically take the form of YEAR.MONTH (for example, ``12.04``, ``15.10``)."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:611
+msgid "Serial versioning"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:613
+msgid "This is the simplest possible versioning scheme, and consists of a single number which is incremented every release."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:616
+msgid "While serial versioning is very easy to manage as a developer, it is the hardest to track as an end user, as serial version numbers convey little or no information regarding API backwards compatibility."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:621
+msgid "Hybrid schemes"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:623
+msgid "Combinations of the above schemes are possible. For example, a project may combine date based versioning with serial versioning to create a YEAR.SERIAL numbering scheme that readily conveys the approximate age of a release, but doesn't otherwise commit to a particular release cadence within the year."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:629
+msgid "Pre-release versioning"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:631
+msgid "Regardless of the base versioning scheme, pre-releases for a given final release may be published as:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:634
+msgid "zero or more dev releases (denoted with a \".devN\" suffix)"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:635
+msgid "zero or more alpha releases (denoted with a \".aN\" suffix)"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:636
+msgid "zero or more beta releases (denoted with a \".bN\" suffix)"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:637
+msgid "zero or more release candidates (denoted with a \".rcN\" suffix)"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:639
+msgid "``pip`` and other modern Python package installers ignore pre-releases by default when deciding which versions of dependencies to install."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:644
+msgid "Local version identifiers"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:646
+msgid "Public version identifiers are designed to support distribution via :term:`PyPI `. Python's software distribution tools also support the notion of a :pep:`local version identifier <440#local-version-identifiers>`, which can be used to identify local development builds not intended for publication, or modified variants of a release maintained by a redistributor."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:653
+msgid "A local version identifier takes the form ``+``. For example::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:661
+msgid "Working in \"development mode\""
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:663
+msgid "Although not required, it's common to locally install your project in \"editable\" or \"develop\" mode while you're working on it. This allows your project to be both installed and editable in project form."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:667
+msgid "Assuming you're in the root of your project directory, then run:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:674
+msgid "Although somewhat cryptic, ``-e`` is short for ``--editable``, and ``.`` refers to the current working directory, so together, it means to install the current directory (i.e. your project) in editable mode. This will also install any dependencies declared with \"install_requires\" and any scripts declared with \"console_scripts\". Dependencies will be installed in the usual, non-editable mode."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:680
+msgid "It's fairly common to also want to install some of your dependencies in editable mode as well. For example, supposing your project requires \"foo\" and \"bar\", but you want \"bar\" installed from VCS in editable mode, then you could construct a requirements file like so::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:688
+msgid "The first line says to install your project and any dependencies. The second line overrides the \"bar\" dependency, such that it's fulfilled from VCS, not PyPI."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:692
+msgid "If, however, you want \"bar\" installed from a local directory in editable mode, the requirements file should look like this, with the local paths at the top of the file::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:697
+msgid "Otherwise, the dependency will be fulfilled from PyPI, due to the installation order of the requirements file. For more on requirements files, see the :ref:`Requirements File ` section in the pip docs. For more on VCS installs, see the :ref:`VCS Support ` section of the pip docs."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:701
+msgid "Lastly, if you don't want to install any dependencies at all, you can run::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:706
+msgid "For more information, see the `Development Mode `_ section of the `setuptools docs `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:713
+msgid "Packaging your project"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:715
+msgid "To have your project installable from a :term:`Package Index` like :term:`PyPI `, you'll need to create a :term:`Distribution ` (aka \":term:`Package `\") for your project."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:720
+msgid "Before you can build wheels and sdists for your project, you'll need to install the ``build`` package:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:737
+msgid "Source distributions"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:739
+msgid "Minimally, you should create a :term:`Source Distribution `:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:755
+msgid "A \"source distribution\" is unbuilt (i.e. it's not a :term:`Built Distribution`), and requires a build step when installed by pip. Even if the distribution is pure Python (i.e. contains no extensions), it still involves a build step to build out the installation metadata from :file:`setup.py` and/or :file:`setup.cfg`."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:763
+msgid "Wheels"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:765
+msgid "You should also create a wheel for your project. A wheel is a :term:`built package ` that can be installed without needing to go through the \"build\" process. Installing wheels is substantially faster for the end user than installing from a source distribution."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:770
+msgid "If your project is pure Python then you'll be creating a :ref:`\"Pure Python Wheel\" (see section below) `."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:773
+msgid "If your project contains compiled extensions, then you'll be creating what's called a :ref:`*Platform Wheel* (see section below) `."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:776
+msgid "If your project also supports Python 2 *and* contains no C extensions, then you should create what's called a *Universal Wheel* by adding the following to your :file:`setup.cfg` file:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:785
+msgid "Only use this setting if your project does not have any C extensions *and* supports Python 2 and 3."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:792
+msgid "Pure Python Wheels"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:794
+msgid "*Pure Python Wheels* contain no compiled extensions, and therefore only require a single Python wheel."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:797
+#: ../source/guides/distributing-packages-using-setuptools.rst:826
+msgid "To build the wheel:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:811
+msgid "The ``wheel`` package will detect that the code is pure Python, and build a wheel that's named such that it's usable on any Python 3 installation. For details on the naming of wheel files, see :pep:`425`."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:815
+msgid "If you run ``build`` without ``--wheel`` or ``--sdist``, it will build both files for you; this is useful when you don't need multiple wheels."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:821
+msgid "Platform Wheels"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:823
+msgid "*Platform Wheels* are wheels that are specific to a certain platform like Linux, macOS, or Windows, usually due to containing compiled extensions."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:841
+msgid "The ``wheel`` package will detect that the code is not pure Python, and build a wheel that's named such that it's only usable on the platform that it was built on. For details on the naming of wheel files, see :pep:`425`."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:847
+msgid ":term:`PyPI ` currently supports uploads of platform wheels for Windows, macOS, and the multi-distro ``manylinux*`` ABI. Details of the latter are defined in :pep:`513`."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:855
+msgid "Uploading your Project to PyPI"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:857
+msgid "When you ran the command to create your distribution, a new directory ``dist/`` was created under your project's root directory. That's where you'll find your distribution file(s) to upload."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:861
+msgid "These files are only created when you run the command to create your distribution. This means that any time you change the source of your project or the configuration in your :file:`setup.py` file, you will need to rebuild these files again before you can distribute the changes to PyPI."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:866
+msgid "Before releasing on main PyPI repo, you might prefer training with the `PyPI test site `_ which is cleaned on a semi regular basis. See :ref:`using-test-pypi` on how to setup your configuration in order to use it."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:871
+msgid "In other resources you may encounter references to using ``python setup.py register`` and ``python setup.py upload``. These methods of registering and uploading a package are **strongly discouraged** as it may use a plaintext HTTP or unverified HTTPS connection on some Python versions, allowing your username and password to be intercepted during transmission."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:877
+msgid "The reStructuredText parser used on PyPI is **not** Sphinx! Furthermore, to ensure safety of all users, certain kinds of URLs and directives are forbidden or stripped out (e.g., the ``.. raw::`` directive). **Before** trying to upload your distribution, you should check to see if your brief / long descriptions provided in :file:`setup.py` are valid. You can do this by running :std:doc:`twine check ` on your package files::"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:888
+msgid "Create an account"
+msgstr "创建一个账户"
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:890
+msgid "First, you need a :term:`PyPI ` user account. You can create an account `using the form on the PyPI website `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:894
+msgid "Now you'll create a PyPI `API token`_ so you will be able to securely upload your project."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:897
+msgid "Go to https://pypi.org/manage/account/#api-tokens and create a new `API token`_; don't limit its scope to a particular project, since you are creating a new project."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:901
+msgid "**Don't close the page until you have copied and saved the token — you won't see that token again.**"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:904
+msgid "To avoid having to copy and paste the token every time you upload, you can create a :file:`$HOME/.pypirc` file:"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:913
+msgid "**Be aware that this stores your token in plaintext.**"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:915
+#: ../source/guides/migrating-to-pypi-org.rst:70
+#: ../source/guides/migrating-to-pypi-org.rst:109
+#: ../source/guides/using-testpypi.rst:83
+msgid "For more details, see the :ref:`specification ` for :file:`.pypirc`."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:921
+msgid "Upload your distributions"
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:923
+msgid "Once you have an account you can upload your distributions to :term:`PyPI ` using :ref:`twine`."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:926
+msgid "The process for uploading a release is the same regardless of whether or not the project already exists on PyPI - if it doesn't exist yet, it will be automatically created when the first release is uploaded."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:930
+msgid "For the second and subsequent releases, PyPI only requires that the version number of the new release differ from any previous releases."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:937
+msgid "You can see if your package has successfully uploaded by navigating to the URL ``https://pypi.org/project/`` where ``sampleproject`` is the name of your project that you uploaded. It may take a minute or two for your project to appear on the site."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:944
+#: ../source/tutorials/installing-packages.rst:663
+msgid "Depending on your platform, this may require root or Administrator access. :ref:`pip` is currently considering changing this by `making user installs the default behavior `_."
+msgstr ""
+
+#: ../source/guides/distributing-packages-using-setuptools.rst:950
+msgid "Specifically, the \"console_script\" approach generates ``.exe`` files on Windows, which are necessary because the OS special-cases ``.exe`` files. Script-execution features like ``PATHEXT`` and the :pep:`Python Launcher for Windows <397>` allow scripts to be used in many cases, but not all."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:5
+msgid "Dropping support for older Python versions"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:7
+msgid "Dropping support for older Python versions is supported by the standard :ref:`core-metadata` 1.2 specification via a \"Requires-Python\" attribute."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:9
+msgid "Metadata 1.2+ clients, such as Pip 9.0+, will adhere to this specification by matching the current Python runtime and comparing it with the required version in the package metadata. If they do not match, it will attempt to install the last package distribution that supported that Python runtime."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:12
+msgid "This mechanism can be used to drop support for older Python versions, by amending the \"Requires-Python\" attribute in the package metadata."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:14
+msgid "This guide is specifically for users of :ref:`setuptools`, other packaging tools such as ``flit`` may offer similar functionality but users will need to consult relevant documentation."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:17
+msgid "Requirements"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:19
+msgid "This workflow requires that:"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:21
+msgid "The publisher is using the latest version of :ref:`setuptools`,"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:22
+msgid "The latest version of :ref:`twine` is used to upload the package,"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:23
+msgid "The user installing the package has at least Pip 9.0, or a client that supports the Metadata 1.2 specification."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:26
+msgid "Dealing with the universal wheels"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:28
+msgid "Traditionally, projects providing Python code that is semantically compatible with both Python 2 and Python 3, produce :term:`wheels ` that have a ``py2.py3`` tag in their names. When dropping support for Python 2, it is important not to forget to change this tag to just ``py3``. It is often configured within :file:`setup.cfg` under the ``[bdist_wheel]`` section by setting ``universal = 1`` if they use setuptools."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:36
+msgid "If you use this method, either remove this option or section, or explicitly set ``universal`` to ``0``:"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:48
+msgid "Since it is possible to override the :file:`setup.cfg` settings via CLI flags, make sure that your scripts don't have ``--universal`` in your package creation scripts."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:53
+msgid "Defining the Python version required"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:56
+msgid "1. Download the newest version of Setuptools"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:58
+msgid "Ensure that before you generate source distributions or binary distributions, you update Setuptools and install twine."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:60
+msgid "Steps:"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:74
+msgid "`setuptools` version should be above 24.0.0."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:77
+msgid "2. Specify the version ranges for supported Python distributions"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:79
+msgid "You can specify version ranges and exclusion rules, such as at least Python 3. Or, Python 2.7, 3.4 and beyond."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:81
+#: ../source/specifications/core-metadata.rst:139
+#: ../source/specifications/core-metadata.rst:463
+#: ../source/specifications/core-metadata.rst:487
+#: ../source/specifications/core-metadata.rst:527
+#: ../source/specifications/core-metadata.rst:550
+#: ../source/specifications/core-metadata.rst:583
+#: ../source/specifications/core-metadata.rst:693
+#: ../source/specifications/core-metadata.rst:722
+msgid "Examples::"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:86
+msgid "The way to set those values is within the call to ``setup`` within your :file:`setup.py` script. This will insert the ``Requires-Python`` metadata values based on the argument you provide in ``python_requires``."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:101
+msgid "3. Validating the Metadata before publishing"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:103
+msgid "Within a Python source package (the zip or the tar-gz file you download) is a text file called PKG-INFO."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:105
+msgid "This file is generated by Distutils or :ref:`setuptools` when it generates the source package. The file contains a set of keys and values, the list of keys is part of the PyPa standard metadata format."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:108
+msgid "You can see the contents of the generated file like this::"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:112
+msgid "Validate that the following is in place, before publishing the package:"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:114
+msgid "If you have upgraded correctly, the Metadata-Version value should be 1.2 or higher."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:115
+msgid "The Requires-Python field is set and matches your specification in setup.py."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:118
+msgid "4. Using Twine to publish"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:120
+msgid "Twine has a number of advantages, apart from being faster it is now the supported method for publishing packages."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:122
+msgid "Make sure you are using the newest version of Twine, at least 1.9."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:125
+msgid "Dropping a Python release"
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:127
+msgid "Once you have published a package with the Requires-Python metadata, you can then make a further update removing that Python runtime from support."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:129
+msgid "It must be done in this order for the automated fallback to work."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:131
+msgid "For example, you published the Requires-Python: \">=2.7\" as version 1.0.0 of your package."
+msgstr ""
+
+#: ../source/guides/dropping-older-python-versions.rst:133
+msgid "If you were then to update the version string to \">=3.5\", and publish a new version 2.0.0 of your package, any users running Pip 9.0+ from version 2.7 will have version 1.0.0 of the package installed, and any >=3.5 users will receive version 2.0.0."
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:5
+msgid "Hosting your own simple repository"
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:8
+msgid "If you wish to host your own simple repository [1]_, you can either use a software package like `devpi`_ or you can use simply create the proper directory structure and use any web server that can serve static files and generate an autoindex."
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:13
+msgid "In either case, since you'll be hosting a repository that is likely not in your user's default repositories, you should instruct them in your project's description to configure their installer appropriately. For example with pip:"
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:29
+msgid "In addition, it is **highly** recommended that you serve your repository with valid HTTPS. At this time, the security of your user's installations depends on all repositories using a valid HTTPS setup."
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:35
+msgid "\"Manual\" repository"
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:37
+msgid "The directory layout is fairly simple, within a root directory you need to create a directory for each project. This directory should be the normalized name (as defined by :pep:`503`) of the project. Within each of these directories simply place each of the downloadable files. If you have the projects \"Foo\" (with the versions 1.0 and 2.0) and \"bar\" (with the version 0.1) You should end up with a structure that looks like::"
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:51
+msgid "Once you have this layout, simply configure your webserver to serve the root directory with autoindex enabled. For an example using the built in Web server in `Twisted`_, you would simply run ``twistd -n web --path .`` and then instruct users to add the URL to their installer's configuration."
+msgstr ""
+
+#: ../source/guides/hosting-your-own-index.rst:58
+msgid "For complete documentation of the simple repository protocol, see :pep:`503`."
+msgstr ""
+
+#: ../source/guides/index.rst:8
+#: ../source/guides/index.rst:8
+msgid "Installing Packages:"
+msgstr ""
+
+#: ../source/guides/index.rst:20
+#: ../source/guides/index.rst:20
+msgid "Building and Publishing Projects:"
+msgstr ""
+
+#: ../source/guides/index.rst:38
+#: ../source/guides/index.rst:38
+msgid "Miscellaneous:"
+msgstr ""
+
+#: ../source/guides/index.rst:4
+msgid "**Guides** are focused on accomplishing a specific task and assume that you are already familiar with the basics of Python packaging. If you're looking for an introduction to packaging, see :doc:`/tutorials/index`."
+msgstr ""
+
+#: ../source/guides/index-mirrors-and-caches.rst:5
+msgid "Package index mirrors and caches"
+msgstr ""
+
+#: ../source/guides/index-mirrors-and-caches.rst:8
+#: ../source/guides/supporting-multiple-python-versions.rst:8
+msgid "2014-12-24"
+msgstr ""
+
+#: ../source/guides/index-mirrors-and-caches.rst:14
+msgid "Mirroring or caching of PyPI can be used to speed up local package installation, allow offline work, handle corporate firewalls or just plain Internet flakiness."
+msgstr ""
+
+#: ../source/guides/index-mirrors-and-caches.rst:17
+msgid "Three options are available in this area:"
+msgstr ""
+
+#: ../source/guides/index-mirrors-and-caches.rst:19
+msgid "pip provides local caching options,"
+msgstr ""
+
+#: ../source/guides/index-mirrors-and-caches.rst:20
+msgid "devpi provides higher-level caching option, potentially shared amongst many users or machines, and"
+msgstr ""
+
+#: ../source/guides/index-mirrors-and-caches.rst:22
+msgid "bandersnatch provides a local complete mirror of all PyPI :term:`packages