<commit_before>{#
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
 # http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-#}
{% extends "base.html" %}

{% macro code_of_conduct() %}
  <div class="callout-block">
    <p><strong>Note:</strong> All users submitting feedback, reporting issues or contributing to Warehouse are expected to follow the <a href="https://www.pypa.io/en/latest/code-of-conduct/">PyPA Code of Conduct</a>.</p>
  </div>
{% endmacro %}

{# define macros for FAQ to use them as headers and in TOC #}
{% macro packages() %}What's a package, project, or release?{% endmacro %}
{% macro installing() %}How do I install a file (package) from PyPI?{% endmacro %}
{% macro publishing() %}How do I package and publish my code for PyPI?{% endmacro %}
{% macro trove_classifier() %}What's a trove classifier?{% endmacro %}
{% macro verified_email() %}Why do I need a verified email address?{% endmacro %}
{% macro compromised_password() %}Why is PyPI telling me my password is compromised?{% endmacro %}
{% macro mirroring() %}How can I run a mirror of PyPI?{% endmacro %}
{% macro APIs() %}Does PyPI have APIs I can use?{% endmacro %}
{% macro project_release_notifications() %}How do I get notified when a new version of a project is released?{% endmacro %}
{% macro statistics() %}Where can I see statistics about PyPI, downloads, and project/package usage?{% endmacro %}
{% macro login_problem() %}I forgot my PyPI password. Can you help me?{% endmacro %}
{% macro tls_deprecation() %}Why am I getting "No matching distribution found" or "Could not fetch URL" errors during <code>pip install</code>?{% endmacro %}
{% macro accessibility() %}I am having trouble using the PyPI website. Can you help me?{% endmacro %}
{% macro uploading() %}Why can't I manually upload files to PyPI, through the browser interface?{% endmacro %}
{% macro private_indices() %}How can I publish my private packages to PyPI?{% endmacro %}
{% macro admin_intervention() %}Why did my package or user registration get blocked?{% endmacro %}
{% macro file_size_limit() %}How do I get a file size limit exemption or increase for my project?{% endmacro %}
{% macro file_name_reuse() %}Why am I getting a "Filename or contents already exists" or "Filename has been previously used" error?{% endmacro %}
{% macro project_name() %}Why isn't my desired project name available?{% endmacro %}
{% macro project_name_claim() %}How do I claim an abandoned or previously registered project name?{% endmacro %}
{% macro request_ownership() %}How do I become a owner/maintainer of a project on PyPI?{% endmacro %}
{% macro description_content_type() %}How can I upload a project description in a different format?{% endmacro %}
{% macro new_classifier() %}How do I request a new trove classifier?{% endmacro %}
{% macro feedback() %}Where can I report a bug or provide feedback about PyPI?{% endmacro %}
{% macro maintainers() %}Who maintains PyPI?{% endmacro %}
{% macro sponsors() %}What powers PyPI?{% endmacro %}
{% macro availability() %}Can I depend on PyPI being available?{% endmacro %}
{% macro contributing() %}How can I contribute to PyPI?{% endmacro %}
{% macro upcoming_changes() %}How do I keep up with upcoming changes to PyPI?{% endmacro %}
{% block title %}Help{% endblock %}


{% block content %}
  <section class="horizontal-section">
    <div class="narrow-container">
      <h1 class="page-title">Common questions</h1>

      <section class="faq-group faq-group--list">
        <h2 class="faq-group__first"><a href="#basics">Basics</a></h2>
        <ul>
          <li><a href="#packages">{{ packages() }}</a></li>
          <li><a href="#installing">{{ installing() }}</a></li>
          <li><a href="#publishing">{{ publishing() }}</a></li>
          <li><a href="#trove-classifier">{{ trove_classifier() }}</a></li>
          <li><a href="#verified-email">{{ verified_email() }}</a></li>
          <li><a href="#compromised-password">{{ compromised_password() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#integrating">Integrating</a></h2>
        <ul>
          <li><a href="#APIs">{{ APIs() }}</a></li>
          <li><a href="#mirroring">{{ mirroring() }}</a></li>
          <li><a href="#project-release-notifications">{{ project_release_notifications() }}</a></li>
          <li><a href="#statistics">{{ statistics() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#administration">Administration of projects on PyPI</a></h2>
        <ul>
          <li><a href="#private-indices">{{ private_indices() }}</a></li>
          <li><a href="#project-name">{{ project_name() }}</a></li>
          <li><a href="#project-name-claim">{{ project_name_claim() }}</a></li>
          <li><a href="#request-ownership">{{ request_ownership() }}</a></li>
          <li><a href="#description-content-type">{{ description_content_type() }}</a></li>
          <li><a href="#file-size-limit">{{ file_size_limit() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#troubleshooting">Troubleshooting</a></h2>
        <ul>
          <li><a href="#uploading">{{ uploading() }}</a></li>
          <li><a href="#login-problem">{{ login_problem() }}</a></li>
          <li><a href="#tls-deprecation">{{ tls_deprecation() }}</a></li>
          <li><a href="#accessibility">{{ accessibility() }}</a></li>
          <li><a href="#admin-intervention">{{ admin_intervention() }}</a></li>
          <li><a href="#file-name-reuse">{{ file_name_reuse() }}</a></li>
          <li><a href="#new-classifier">{{ new_classifier() }}</a></li>
          <li><a href="#feedback">{{ feedback() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#about">About</a></h2>
        <ul>
          <li><a href="#maintainers">{{ maintainers() }}</a></li>
          <li><a href="#sponsors">{{ sponsors() }}</a></li>
          <li><a href="#availability">{{ availability() }}</a></li>
          <li><a href="#contributing">{{ contributing() }}</a></li>
          <li><a href="#upcoming-changes">{{ upcoming_changes() }}</a></li>
        </ul>
      </section>

      <section class="faq-group" id="basics">
        <h2 class="faq-title" id="Basics">Basics</h2>

        <h3 id="packages">{{ packages() }}</h3>
        <p>We use a number of terms to describe software available on PyPI, like "project", "release", "file", and "package". Sometimes those terms are confusing because they're used to describe different things in other contexts. Here's how we use them on PyPI:</p>
        <p>A "project" on PyPI is the name of a collection of releases and files, and information about them. Projects on PyPI are made and shared by other members of the Python community so that you can use them.</p>
        <p>A "release" on PyPI is a specific version of a project. For example, the <a href="https://pypi.org/project/requests/">requests</a> project has many releases, like "requests 2.10" and "requests 1.2.1". A release consists of one or more "files".</p>
        <p>A "file", also known as a "package", on PyPI is something that you can download and install. Because of different hardware, operating systems, and file formats, a release may have several files (packages), like an archive containing source code or a binary <a href="https://pypi.org/project/wheel/#files">wheel</a>.</p>

        <h3 id="installing">{{ installing() }}</h3>
        <p>To learn how to install a file from PyPI, visit the <a href="https://packaging.python.org/installing/">installation tutorial</a> on the <a href="https://packaging.python.org/">Python Packaging User Guide</a>.</p>

        <h3 id="publishing">{{ publishing() }}</h3>
        <p>For full instructions on configuring, packaging and distributing your Python project, refer to the <a href="https://packaging.python.org/distributing/">packaging tutorial</a> on the <a href="https://packaging.python.org">Python Packaging User Guide</a>.</p>

        <h3 id="trove-classifier">{{ trove_classifier() }}</h3>
        <p>Classifiers are used to categorize projects on PyPI. See <a href="{{ request.route_path('classifiers') }}"> {{ request.route_url('classifiers') }}</a> for more information, as well as a list of valid classifiers.</p>

        <h3 id="verified-email">{{ verified_email() }}</h3>
        <p>Currently, PyPI requires a verified email address to perform the following operations:</p>
        <ul>
          <li>Register a new project.</li>
          <li>Upload a new version or file.</li>
        </ul>
        <p>The list of activities that require a verified email address is likely to grow over time.</p>
        <p>This policy will allow us to enforce a key policy of <a href="https://www.python.org/dev/peps/pep-0541/">PEP 541</a> regarding maintainer reachability. It also reduces the viability of spam attacks to create many accounts in an automated fashion.</p>
        <p>You can manage your account's email addresses in your <a href="{{ request.route_path('manage.account') }}">Profile</a>. This also allows for sending a new confirmation email for users who signed up in the past, before we began enforcing this policy.</p>

        <h3 id="compromised-password">{{ compromised_password() }}</h3>
          <p>PyPI itself has not suffered a breach. This is a protective measure to reduce the risk of <a href="https://www.owasp.org/index.php/Credential_stuffing" target="_blank" rel="noopener">credential stuffing</a> attacks against PyPI and its users.</p>
          <p>Each time a user supplies a password — while registering, authenticating, or updating their password — PyPI securely checks whether that password has appeared in public data breaches.</p>
          <p>During each of these processes, PyPI generates a SHA-1 hash of the supplied password and uses the first five (5) characters of the hash to check the <a href="https://haveibeenpwned.com/API/v2#SearchingPwnedPasswordsByRange" target="_blank" rel="noopener">Have I Been Pwned API</a> and determine if the password has been previously compromised. The plaintext password is never stored by PyPI or submitted to the Have I Been Pwned API.</p>
          <p>PyPI will not allow such passwords to be used when setting a password at registration or updating your password.</p>
          <p>If you receive an error message saying that "This password appears in a breach or has been compromised and cannot be used", you should change it all other places that you use it as soon as possible.</p>
          <p>If you have received this error while attempting to log in or upload to PyPI, then your password has been reset and you cannot log in to PyPI until you <a href="{{ request.route_url('accounts.request-password-reset') }}">reset your password</a>.</p>
      </section>

      <section class="faq-group" id="integrating">
        <h2>Integrating</h2>

        <h3 id="APIs">{{ APIs() }}</h3>
        <p>Yes, including RSS feeds of new packages and new releases. <a href="https://warehouse.readthedocs.io/api-reference/">See the API reference.</a></p>

        <h3 id="mirroring">{{ mirroring() }}</h3>
        <p>If you need to run your own mirror of PyPI, the <a href="https://pypi.org/project/bandersnatch/">bandersnatch project</a> is the recommended solution. Note that the storage requirements for a PyPI mirror would exceed 1 terabyte—and growing!</p>

        <h3 id="project-release-notifications">{{ project_release_notifications() }}</h3>
        <p>PyPI itself does not offer a way to get notified when a project uploads new releases. However, there are several third-party services that offer comprehensive monitoring and notifications for project releases and vulnerabilities listed as <a href="https://github.com/works-with/category/dependency-management?query=python" target="_blank" rel="noopener">GitHub apps</a>.</p>

        <h3 id="statistics">{{ statistics() }}</h3>
        <p>You can <a href="https://packaging.python.org/guides/analyzing-pypi-package-downloads/">analyze PyPI download usage statistics via Google BigQuery</a>.</p>
        <p><a href="https://libraries.io/pypi" target="_blank" rel="noopener">Libraries.io provides statistics for PyPI projects</a> (<a href="https://libraries.io/pypi/twine/" target="_blank" rel="noopener">example</a>, <a href="https://libraries.io/api" target="_blank" rel="noopener">API</a>) including GitHub stars and forks, dependency tracking (<a href="https://github.com/librariesio/bibliothecary/issues/415" target="_blank" rel="noopener">in progress</a>), and <a href="https://docs.libraries.io/overview#sourcerank" target="_blank" rel="noopener">other relevant factors</a>.</p>
        <p>For recent statistics on uptime and performance, see <a href="https://status.python.org/" target="_blank" rel="noopener">our status page</a>.</p>
      </section>

      <section class="faq-group" id="administration">
        <h2>Administration of projects on PyPI</h2>

        <h3 id="private-indices">{{ private_indices() }}</h3>
        <p>PyPI does not support publishing private packages. If you need to publish your private package to a package index, the recommended solution is to run your own deployment of the <a href="https://pypi.org/project/devpi/">devpi project</a>.</p>

        <h3 id="project-name">{{ project_name() }}</h3>
        <p>Your publishing tool may return an error that your new project can't be created with your desired name, despite no evidence of a project or release of the same name on PyPI. Currently, there are three primary reasons this may occur:</p>
        <ul>
          <li>The project name conflicts with a <a href="https://docs.python.org/3/library/index.html">Python Standard Library</a> module from any major version from 2.5 to present.</li>
          <li>The project name has been explicitly prohibited by the PyPI administrators. For example, <code>pip install requirements.txt</code> is a common typo for <code>pip install -r requirements.txt</code>, and should not surprise the user with a malicious package.</li>
          <li>The project name has been registered by another user, but no releases have been created.</li>
        </ul>

        <h3 id="project-name-claim">{{ project_name_claim() }}</h3>
        <p>There is currently no established process for performing this administrative task that is explicit and fair for all parties. However, one is currently in development per <a href="https://www.python.org/dev/peps/pep-0541/">PEP 541</a>.</p>
        <p>PEP 541 has been accepted, and PyPI is <a href="https://github.com/pypa/warehouse/issues/1506">creating a workflow</a> which will be documented here.</p>

        <h3 id="request-ownership">{{ request_ownership() }}</h3>
        <p>Only the current owners of a project have the ability to add new owners or maintainers. If you need to request ownership, you should contact the current owner(s) of the project directly. Many project owners provide their contact details in the 'Author' field of the 'Meta' details on the project page.</p>
        <p>If the owner is unresponsive, see <a href="project-name-claim">{{ project_name_claim() }}</a></p>

        <h3 id="description-content-type">{{ description_content_type() }}</h3>
        <p>By default, an upload's description will render with <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>. If the description is in an alternate format like Markdown, a package may set the <code>long_description_content_type</code> in <code>setup.py</code> to the alternate format.</p>
        <p>Refer to the <a href="https://packaging.python.org/tutorials/distributing-packages/#description">Python Packaging User Guide</a> for details on the available formats.</p>
        <p>PyPI will reject uploads if the description fails to render. To check a description locally for validity, you may use <a href="https://github.com/pypa/readme_renderer">readme_renderer</a>, which is the same description renderer used by PyPI.</p>

        <h3 id="file-size-limit">{{ file_size_limit() }}</h3>
        <p>If you can't upload your project's release to PyPI because you're hitting the upload file size limit, we can sometimes increase your limit. Make sure you've uploaded at least one release for the project that's <i>under</i> the limit (a <a href="https://www.python.org/dev/peps/pep-0440/#developmental-releases">developmental release version number</a> is fine). Then, <a href="https://github.com/pypa/warehouse/issues/new" target="_blank" rel="noopener">file an issue</a> and tell us:</p><commit_msg>Fix broken anchor link on help page. (#5354)<commit_after>{#
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
 # http://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-#}
{% extends "base.html" %}

{% macro code_of_conduct() %}
  <div class="callout-block">
    <p><strong>Note:</strong> All users submitting feedback, reporting issues or contributing to Warehouse are expected to follow the <a href="https://www.pypa.io/en/latest/code-of-conduct/">PyPA Code of Conduct</a>.</p>
  </div>
{% endmacro %}

{# define macros for FAQ to use them as headers and in TOC #}
{% macro packages() %}What's a package, project, or release?{% endmacro %}
{% macro installing() %}How do I install a file (package) from PyPI?{% endmacro %}
{% macro publishing() %}How do I package and publish my code for PyPI?{% endmacro %}
{% macro trove_classifier() %}What's a trove classifier?{% endmacro %}
{% macro verified_email() %}Why do I need a verified email address?{% endmacro %}
{% macro compromised_password() %}Why is PyPI telling me my password is compromised?{% endmacro %}
{% macro mirroring() %}How can I run a mirror of PyPI?{% endmacro %}
{% macro APIs() %}Does PyPI have APIs I can use?{% endmacro %}
{% macro project_release_notifications() %}How do I get notified when a new version of a project is released?{% endmacro %}
{% macro statistics() %}Where can I see statistics about PyPI, downloads, and project/package usage?{% endmacro %}
{% macro login_problem() %}I forgot my PyPI password. Can you help me?{% endmacro %}
{% macro tls_deprecation() %}Why am I getting "No matching distribution found" or "Could not fetch URL" errors during <code>pip install</code>?{% endmacro %}
{% macro accessibility() %}I am having trouble using the PyPI website. Can you help me?{% endmacro %}
{% macro uploading() %}Why can't I manually upload files to PyPI, through the browser interface?{% endmacro %}
{% macro private_indices() %}How can I publish my private packages to PyPI?{% endmacro %}
{% macro admin_intervention() %}Why did my package or user registration get blocked?{% endmacro %}
{% macro file_size_limit() %}How do I get a file size limit exemption or increase for my project?{% endmacro %}
{% macro file_name_reuse() %}Why am I getting a "Filename or contents already exists" or "Filename has been previously used" error?{% endmacro %}
{% macro project_name() %}Why isn't my desired project name available?{% endmacro %}
{% macro project_name_claim() %}How do I claim an abandoned or previously registered project name?{% endmacro %}
{% macro request_ownership() %}How do I become a owner/maintainer of a project on PyPI?{% endmacro %}
{% macro description_content_type() %}How can I upload a project description in a different format?{% endmacro %}
{% macro new_classifier() %}How do I request a new trove classifier?{% endmacro %}
{% macro feedback() %}Where can I report a bug or provide feedback about PyPI?{% endmacro %}
{% macro maintainers() %}Who maintains PyPI?{% endmacro %}
{% macro sponsors() %}What powers PyPI?{% endmacro %}
{% macro availability() %}Can I depend on PyPI being available?{% endmacro %}
{% macro contributing() %}How can I contribute to PyPI?{% endmacro %}
{% macro upcoming_changes() %}How do I keep up with upcoming changes to PyPI?{% endmacro %}
{% block title %}Help{% endblock %}


{% block content %}
  <section class="horizontal-section">
    <div class="narrow-container">
      <h1 class="page-title">Common questions</h1>

      <section class="faq-group faq-group--list">
        <h2 class="faq-group__first"><a href="#basics">Basics</a></h2>
        <ul>
          <li><a href="#packages">{{ packages() }}</a></li>
          <li><a href="#installing">{{ installing() }}</a></li>
          <li><a href="#publishing">{{ publishing() }}</a></li>
          <li><a href="#trove-classifier">{{ trove_classifier() }}</a></li>
          <li><a href="#verified-email">{{ verified_email() }}</a></li>
          <li><a href="#compromised-password">{{ compromised_password() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#integrating">Integrating</a></h2>
        <ul>
          <li><a href="#APIs">{{ APIs() }}</a></li>
          <li><a href="#mirroring">{{ mirroring() }}</a></li>
          <li><a href="#project-release-notifications">{{ project_release_notifications() }}</a></li>
          <li><a href="#statistics">{{ statistics() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#administration">Administration of projects on PyPI</a></h2>
        <ul>
          <li><a href="#private-indices">{{ private_indices() }}</a></li>
          <li><a href="#project-name">{{ project_name() }}</a></li>
          <li><a href="#project-name-claim">{{ project_name_claim() }}</a></li>
          <li><a href="#request-ownership">{{ request_ownership() }}</a></li>
          <li><a href="#description-content-type">{{ description_content_type() }}</a></li>
          <li><a href="#file-size-limit">{{ file_size_limit() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#troubleshooting">Troubleshooting</a></h2>
        <ul>
          <li><a href="#uploading">{{ uploading() }}</a></li>
          <li><a href="#login-problem">{{ login_problem() }}</a></li>
          <li><a href="#tls-deprecation">{{ tls_deprecation() }}</a></li>
          <li><a href="#accessibility">{{ accessibility() }}</a></li>
          <li><a href="#admin-intervention">{{ admin_intervention() }}</a></li>
          <li><a href="#file-name-reuse">{{ file_name_reuse() }}</a></li>
          <li><a href="#new-classifier">{{ new_classifier() }}</a></li>
          <li><a href="#feedback">{{ feedback() }}</a></li>
        </ul>
      </section>

      <section class="faq-group faq-group--list">
        <h2><a href="#about">About</a></h2>
        <ul>
          <li><a href="#maintainers">{{ maintainers() }}</a></li>
          <li><a href="#sponsors">{{ sponsors() }}</a></li>
          <li><a href="#availability">{{ availability() }}</a></li>
          <li><a href="#contributing">{{ contributing() }}</a></li>
          <li><a href="#upcoming-changes">{{ upcoming_changes() }}</a></li>
        </ul>
      </section>

      <section class="faq-group" id="basics">
        <h2 class="faq-title" id="Basics">Basics</h2>

        <h3 id="packages">{{ packages() }}</h3>
        <p>We use a number of terms to describe software available on PyPI, like "project", "release", "file", and "package". Sometimes those terms are confusing because they're used to describe different things in other contexts. Here's how we use them on PyPI:</p>
        <p>A "project" on PyPI is the name of a collection of releases and files, and information about them. Projects on PyPI are made and shared by other members of the Python community so that you can use them.</p>
        <p>A "release" on PyPI is a specific version of a project. For example, the <a href="https://pypi.org/project/requests/">requests</a> project has many releases, like "requests 2.10" and "requests 1.2.1". A release consists of one or more "files".</p>
        <p>A "file", also known as a "package", on PyPI is something that you can download and install. Because of different hardware, operating systems, and file formats, a release may have several files (packages), like an archive containing source code or a binary <a href="https://pypi.org/project/wheel/#files">wheel</a>.</p>

        <h3 id="installing">{{ installing() }}</h3>
        <p>To learn how to install a file from PyPI, visit the <a href="https://packaging.python.org/installing/">installation tutorial</a> on the <a href="https://packaging.python.org/">Python Packaging User Guide</a>.</p>

        <h3 id="publishing">{{ publishing() }}</h3>
        <p>For full instructions on configuring, packaging and distributing your Python project, refer to the <a href="https://packaging.python.org/distributing/">packaging tutorial</a> on the <a href="https://packaging.python.org">Python Packaging User Guide</a>.</p>

        <h3 id="trove-classifier">{{ trove_classifier() }}</h3>
        <p>Classifiers are used to categorize projects on PyPI. See <a href="{{ request.route_path('classifiers') }}"> {{ request.route_url('classifiers') }}</a> for more information, as well as a list of valid classifiers.</p>

        <h3 id="verified-email">{{ verified_email() }}</h3>
        <p>Currently, PyPI requires a verified email address to perform the following operations:</p>
        <ul>
          <li>Register a new project.</li>
          <li>Upload a new version or file.</li>
        </ul>
        <p>The list of activities that require a verified email address is likely to grow over time.</p>
        <p>This policy will allow us to enforce a key policy of <a href="https://www.python.org/dev/peps/pep-0541/">PEP 541</a> regarding maintainer reachability. It also reduces the viability of spam attacks to create many accounts in an automated fashion.</p>
        <p>You can manage your account's email addresses in your <a href="{{ request.route_path('manage.account') }}">Profile</a>. This also allows for sending a new confirmation email for users who signed up in the past, before we began enforcing this policy.</p>

        <h3 id="compromised-password">{{ compromised_password() }}</h3>
          <p>PyPI itself has not suffered a breach. This is a protective measure to reduce the risk of <a href="https://www.owasp.org/index.php/Credential_stuffing" target="_blank" rel="noopener">credential stuffing</a> attacks against PyPI and its users.</p>
          <p>Each time a user supplies a password — while registering, authenticating, or updating their password — PyPI securely checks whether that password has appeared in public data breaches.</p>
          <p>During each of these processes, PyPI generates a SHA-1 hash of the supplied password and uses the first five (5) characters of the hash to check the <a href="https://haveibeenpwned.com/API/v2#SearchingPwnedPasswordsByRange" target="_blank" rel="noopener">Have I Been Pwned API</a> and determine if the password has been previously compromised. The plaintext password is never stored by PyPI or submitted to the Have I Been Pwned API.</p>
          <p>PyPI will not allow such passwords to be used when setting a password at registration or updating your password.</p>
          <p>If you receive an error message saying that "This password appears in a breach or has been compromised and cannot be used", you should change it all other places that you use it as soon as possible.</p>
          <p>If you have received this error while attempting to log in or upload to PyPI, then your password has been reset and you cannot log in to PyPI until you <a href="{{ request.route_url('accounts.request-password-reset') }}">reset your password</a>.</p>
      </section>

      <section class="faq-group" id="integrating">
        <h2>Integrating</h2>

        <h3 id="APIs">{{ APIs() }}</h3>
        <p>Yes, including RSS feeds of new packages and new releases. <a href="https://warehouse.readthedocs.io/api-reference/">See the API reference.</a></p>

        <h3 id="mirroring">{{ mirroring() }}</h3>
        <p>If you need to run your own mirror of PyPI, the <a href="https://pypi.org/project/bandersnatch/">bandersnatch project</a> is the recommended solution. Note that the storage requirements for a PyPI mirror would exceed 1 terabyte—and growing!</p>

        <h3 id="project-release-notifications">{{ project_release_notifications() }}</h3>
        <p>PyPI itself does not offer a way to get notified when a project uploads new releases. However, there are several third-party services that offer comprehensive monitoring and notifications for project releases and vulnerabilities listed as <a href="https://github.com/works-with/category/dependency-management?query=python" target="_blank" rel="noopener">GitHub apps</a>.</p>

        <h3 id="statistics">{{ statistics() }}</h3>
        <p>You can <a href="https://packaging.python.org/guides/analyzing-pypi-package-downloads/">analyze PyPI download usage statistics via Google BigQuery</a>.</p>
        <p><a href="https://libraries.io/pypi" target="_blank" rel="noopener">Libraries.io provides statistics for PyPI projects</a> (<a href="https://libraries.io/pypi/twine/" target="_blank" rel="noopener">example</a>, <a href="https://libraries.io/api" target="_blank" rel="noopener">API</a>) including GitHub stars and forks, dependency tracking (<a href="https://github.com/librariesio/bibliothecary/issues/415" target="_blank" rel="noopener">in progress</a>), and <a href="https://docs.libraries.io/overview#sourcerank" target="_blank" rel="noopener">other relevant factors</a>.</p>
        <p>For recent statistics on uptime and performance, see <a href="https://status.python.org/" target="_blank" rel="noopener">our status page</a>.</p>
      </section>

      <section class="faq-group" id="administration">
        <h2>Administration of projects on PyPI</h2>

        <h3 id="private-indices">{{ private_indices() }}</h3>
        <p>PyPI does not support publishing private packages. If you need to publish your private package to a package index, the recommended solution is to run your own deployment of the <a href="https://pypi.org/project/devpi/">devpi project</a>.</p>

        <h3 id="project-name">{{ project_name() }}</h3>
        <p>Your publishing tool may return an error that your new project can't be created with your desired name, despite no evidence of a project or release of the same name on PyPI. Currently, there are three primary reasons this may occur:</p>
        <ul>
          <li>The project name conflicts with a <a href="https://docs.python.org/3/library/index.html">Python Standard Library</a> module from any major version from 2.5 to present.</li>
          <li>The project name has been explicitly prohibited by the PyPI administrators. For example, <code>pip install requirements.txt</code> is a common typo for <code>pip install -r requirements.txt</code>, and should not surprise the user with a malicious package.</li>
          <li>The project name has been registered by another user, but no releases have been created.</li>
        </ul>

        <h3 id="project-name-claim">{{ project_name_claim() }}</h3>
        <p>There is currently no established process for performing this administrative task that is explicit and fair for all parties. However, one is currently in development per <a href="https://www.python.org/dev/peps/pep-0541/">PEP 541</a>.</p>
        <p>PEP 541 has been accepted, and PyPI is <a href="https://github.com/pypa/warehouse/issues/1506">creating a workflow</a> which will be documented here.</p>

        <h3 id="request-ownership">{{ request_ownership() }}</h3>
        <p>Only the current owners of a project have the ability to add new owners or maintainers. If you need to request ownership, you should contact the current owner(s) of the project directly. Many project owners provide their contact details in the 'Author' field of the 'Meta' details on the project page.</p>
        <p>If the owner is unresponsive, see <a href="#project-name-claim">{{ project_name_claim() }}</a></p>

        <h3 id="description-content-type">{{ description_content_type() }}</h3>
        <p>By default, an upload's description will render with <a href="http://docutils.sourceforge.net/rst.html">reStructuredText</a>. If the description is in an alternate format like Markdown, a package may set the <code>long_description_content_type</code> in <code>setup.py</code> to the alternate format.</p>
        <p>Refer to the <a href="https://packaging.python.org/tutorials/distributing-packages/#description">Python Packaging User Guide</a> for details on the available formats.</p>
        <p>PyPI will reject uploads if the description fails to render. To check a description locally for validity, you may use <a href="https://github.com/pypa/readme_renderer">readme_renderer</a>, which is the same description renderer used by PyPI.</p>

        <h3 id="file-size-limit">{{ file_size_limit() }}</h3>
        <p>If you can't upload your project's release to PyPI because you're hitting the upload file size limit, we can sometimes increase your limit. Make sure you've uploaded at least one release for the project that's <i>under</i> the limit (a <a href="https://www.python.org/dev/peps/pep-0440/#developmental-releases">developmental release version number</a> is fine). Then, <a href="https://github.com/pypa/warehouse/issues/new" target="_blank" rel="noopener">file an issue</a> and tell us:</p>
{'fraction_non_alphanumeric': 0.1469369894982497, 'fraction_numerical': 0.005659276546091015, 'mean_word_length': 3.889602053915276, 'pattern_counts': {'":': 0, '<': 737, '<?xml version=': 0, '>': 737, 'https://': 56, 'lorem ipsum': 0, 'www.': 12, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2346990', 'n_tokens_mistral': 10328, 'n_tokens_neox': 9627, 'n_words': 3640}