---
name: "twine"
section: "1"
platform: "linux"
package: "twine"
version: "6.1.0-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/twine"
---

# twine(1)

Client to do uploads on pypi.

## NAME

twine - Client to do uploads on pypi.

## DESCRIPTION

This command is commonly used to upload python modules on pypi.org or compatible repositories.

## NOTES ON PYPI.ORG

This command can be used on multiple repositories. However the default is to use pypi.org, and since it is probably the most common use case, this section is dedicated to its otherwise undocumented quirks.

- **Upload via token**

  Username and password uploads are no longer supported on pypi.org.\
   To upload authenticating with a token, the command looks like this:\
           twine upload --username \_\_token\_\_ --password \`cat .token\` dist/

- **Scope limited token**

  Tokens can be obtained from the website of pypi.org.\
   To create a token that is limited to a project that doesn't yet exist, a global token must be created, used to do the first upload of the project, then deleted from the website. At that point it will be possible to generate a token that has the scope of that project.

- **Signing**

  Signing is not allowed on pypi.org.\
   Uploads that are signed are greeted by a warning email. The signature files are dropped. In the future they might cause the upload to fail.

## SYNOPSIS

twine \[-h\] \[--version\] \[--no-color\] \[\<command\>\] \[args\]

###

### Options:

- **-h, --help**

  Show the help message and exit.

- **-v, --version**

  Show the version and exit.

- **--no-color**

  Disable coloured output.

###

### Commands:

- **check**

  usage: twine check \[-h\] \[--strict\] dist \[dist ...\]

  **positional arguments:**\
     dist        The distribution files to check, usually dist/\*

  **options:**\
     \-h, --help  show this help message and exit\
     \--strict    Fail on warnings

- **register**

  usage: twine register \[-h\] \[-r REPOSITORY\] \[--repository-url REPOSITORY\_URL\] \[--attestations\] \[-s\] \[--sign-with SIGN\_WITH\] \[-i IDENTITY\] \[-u USERNAME\] \[-p PASSWORD\] \[--non-interactive\] \[-c COMMENT\] \[--config-file CONFIG\_FILE\] \[--skip-existing\] \[--cert path\] \[--client-cert path\] \[--verbose\] \[--disable-progress-bar\] package

  register operation is not required with PyPI.org

  **positional arguments:**\
     package               File from which we read the package metadata.

  **options:**\
     \-h, --help            show this help message and exit\
     \-r REPOSITORY, --repository REPOSITORY\
                           The repository (package index) to upload the package to. Should be a section in the config file (default: pypi). (Can also be set via TWINE\_REPOSITORY environment variable.)\
     \--repository-url REPOSITORY\_URL\
                           The repository (package index) URL to upload the package to. This overrides --repository. (Can also be set via TWINE\_REPOSITORY\_URL environment variable.)\
     \--attestations        Upload each file's associated attestations.\
     \-s, --sign            Sign files to upload using GPG.\
     \--sign-with SIGN\_WITH\
                           GPG program used to sign uploads (default: gpg).\
     \-i IDENTITY, --identity IDENTITY\
                           GPG identity used to sign files.\
     \-u USERNAME, --username USERNAME\
                           The username to authenticate to the repository (package index) as. (Can also be set via TWINE\_USERNAME environment variable.)\
     \-p PASSWORD, --password PASSWORD\
                           The password to authenticate to the repository (package index) with. (Can also be set via TWINE\_PASSWORD environment variable.)\
     \--non-interactive     Do not interactively prompt for username/password if the required credentials are missing. (Can also be set via TWINE\_NON\_INTERACTIVE environment variable.)\
     \-c COMMENT, --comment COMMENT\
                           The comment to include with the distribution file.\
     \--config-file CONFIG\_FILE\
                           The .pypirc config file to use.\
     \--skip-existing       Continue uploading files if one already exists. (Only valid when uploading to PyPI. Other implementations may not support this.)\
     \--cert path           Path to alternate CA bundle (can also be set via TWINE\_CERT environment variable).\
     \--client-cert path    Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.\
     \--verbose             Show verbose output.\
     \--disable-progress-bar\
                           Disable the progress bar.

- **upload**

  usage: twine upload \[-h\] \[-r REPOSITORY\] \[--repository-url REPOSITORY\_URL\] \[--attestations\] \[-s\] \[--sign-with SIGN\_WITH\] \[-i IDENTITY\] \[-u USERNAME\] \[-p PASSWORD\] \[--non-interactive\] \[-c COMMENT\] \[--config-file CONFIG\_FILE\] \[--skip-existing\] \[--cert path\] \[--client-cert path\] \[--verbose\] \[--disable-progress-bar\] dist \[dist ...\]

  **positional arguments:**\
     dist                  The distribution files to upload to the repository (package index). Usually dist/\* . May additionally contain a .asc file to include an existing signature with the file upload.

  **options:**\
     \-h, --help            show this help message and exit\
     \-r REPOSITORY, --repository REPOSITORY\
                           The repository (package index) to upload the package to. Should be a section in the config file (default: pypi). (Can also be set via TWINE\_REPOSITORY environment variable.)\
     \--repository-url REPOSITORY\_URL\
                           The repository (package index) URL to upload the package to. This overrides --repository. (Can also be set via TWINE\_REPOSITORY\_URL environment variable.)\
     \--attestations        Upload each file's associated attestations.\
     \-s, --sign            Sign files to upload using GPG.\
     \--sign-with SIGN\_WITH\
                           GPG program used to sign uploads (default: gpg).\
     \-i IDENTITY, --identity IDENTITY\
                           GPG identity used to sign files.\
     \-u USERNAME, --username USERNAME\
                           The username to authenticate to the repository (package index) as. (Can also be set via TWINE\_USERNAME environment variable.)\
     \-p PASSWORD, --password PASSWORD\
                           The password to authenticate to the repository (package index) with. (Can also be set via TWINE\_PASSWORD environment variable.)\
     \--non-interactive     Do not interactively prompt for username/password if the required credentials are missing. (Can also be set via TWINE\_NON\_INTERACTIVE environment variable.)\
     \-c COMMENT, --comment COMMENT\
                           The comment to include with the distribution file.\
     \--config-file CONFIG\_FILE\
                           The .pypirc config file to use.\
     \--skip-existing       Continue uploading files if one already exists. (Only valid when uploading to PyPI. Other implementations may not support this.)\
     \--cert path           Path to alternate CA bundle (can also be set via TWINE\_CERT environment variable).\
     \--client-cert path    Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.\
     \--verbose             Show verbose output.\
     \--disable-progress-bar\
                           Disable the progress bar.

## ENVIRONMENT

The following environment variables can be used instead of command line options.

- **TWINE\_USERNAME**

  - **TWINE\_PASSWORD**

  - **TWINE\_REPOSITORY\_URL**

  - **TWINE\_REPOSITORY**

  - **TWINE\_CERT**

  - **TWINE\_NON\_INTERACTIVE**

  ## SEE ALSO

**[twine(3)](/twine/3.md)**

## AUTHOR

This manual page was written for Debian by Salvo 'LtWorf' Tomaselli \<ltworf@debian.org\>, but may freely be used by others.
