Changelog

3.2.0 2020-06-24

  • [Feature] #231: Add type annotations, checked with mypy, with PEP 561 support for users of Twine’s API
  • [Feature] #602: Require repository URL scheme to be http or https
  • [Feature] #652: Print packages and signatures to be uploaded when using --verbose option
  • [Feature] #649: Use red text when printing errors on the command line
  • [Feature] #666: Improve display of HTTP errors during upload
  • [Bug] #601: Clarify error messages for archive format
  • [Bug] #611: Fix inaccurate retry message during upload
  • [Bug] #612: Don’t raise an exception when Python version can’t be parsed from filename
  • [Bug] #655: Update URL to .pypirc specification

3.1.1 2019-11-27

  • [Bug] #548: Restore --non-interactive as a flag not expecting an argument.

3.1.0 2019-11-23

  • [Feature] #547: Add support for specifying --non-interactive as an environment variable.

3.0.0 2019-11-18

  • [Feature] #518: Add Python 3.8 to classifiers.
  • [Feature] #524: Twine now unconditionally requires the keyring library and no longer supports uninstalling keyring as a means to disable that functionality. Instead, use keyring --disable keyring functionality if necessary.
  • [Feature] #489: Add --non-interactive flag to abort upload rather than interactively prompt if credentials are missing.
  • [Feature] #336: When a client certificate is indicated, all password processing is disabled.
  • [Bug] #332: More robust handling of server response in --skip-existing

2.0.0 2019-09-24

  • [Feature] #437: Twine now requires Python 3.6 or later. Use pip 9 or pin to “twine<2” to install twine on older Python versions.
  • [Bug] #491: Require requests 2.20 or later to avoid reported security vulnerabilities in earlier releases.

1.15.0 2019-09-17

  • [Feature] #488: Improved output on check command: Prints a message when there are no distributions given to check. Improved handling of errors in a distribution’s markup, avoiding messages flowing through to the next distribution’s errors.

1.14.0 2019-09-06

  • [Feature] #310: Now provide a more meaningful error on redirect during upload.
  • [Feature] #459: Show Warehouse URL after uploading a package
  • [Feature] #456: Better error handling and gpg2 fallback if gpg not available.
  • [Bug] #341: Fail more gracefully when encountering bad metadata

1.13.0 2019-02-13

  • [Feature] #416: Add Python 3.7 to classifiers.
  • [Feature] #418: Support keyring.get_username_and_password.
  • [Feature] #419: Support keyring.get_credential.
  • [Feature] #426: Allow defining an empty username and password in .pypirc.
  • [Feature] #427: Add disable_progress_bar option to disable tqdm.
  • [Bug] #408: Fix keyring support.
  • [Bug] #412: Don’t crash if there’s no package description.
  • [Bug] #421: Remove unnecessary usage of readme_render.markdown.
  • [Bug] #428: Fix –skip-existing for Nexus Repos.
  • [Bug] #432: Use https URLs everywhere.
  • [Bug] #435: Specify python_requires in setup.py
  • [Bug] #436: Use modern Python language features.
  • [Bug] #444: Use io.StringIO instead of StringIO.
  • [Bug] #441: Only install pyblake2 if needed.
  • [Bug] #447: Avoid requests-toolbelt to 0.9.0 to prevent attempting to use openssl when it isn’t available.
  • [Bug] #452: Restore prompts while retaining support for suppressing prompts.
  • [Support] #439: Refactor tox env and travis config.

1.12.1 2018-09-24

  • [Bug] #404: Fix regression with upload exit code

1.12.0 2018-09-24

  • [Feature] #363: Empower --skip-existing for Artifactory repositories
  • [Feature] #392: Drop support for Python 3.3
  • [Feature] #395: Add twine check command to check long description
  • [Bug] #367: Avoid MD5 when Python is compiled in FIPS mode

1.11.0 2018-03-19

  • [Feature] #319: Support Metadata 2.1 (PEP 566), including Markdown for description fields.
  • [Feature] #320: Remove PyPI as default register package index.
  • [Bug] #322: Raise exception if attempting upload to deprecated legacy PyPI URLs.
  • [Bug] #269: Avoid uploading to PyPI when given alternate repository URL, and require http:// or https:// in repository_url.
  • [Support] #318: Update PyPI URLs.
  • [Support] #314: Add new maintainer, release checklists.
  • [Support] #277: Add instructions on how to use keyring.

1.10.0 2018-03-07

  • [Feature] #256: Improve progressbar
  • [Feature] #257: Declare support for Python 3.6
  • [Feature] #303: Revise docs predicting future of twine
  • [Feature] #296: Add architecture overview to docs
  • [Feature] #295: Add doc building instructions
  • [Feature] #46: Link to changelog from README
  • [Feature] #304: Reorganize & improve user & developer documentation.
  • [Bug] #265: Fix --repository[-url] help text
  • [Bug] #268: Print progress to stdout, not stderr
  • [Bug] #297: Fix Read the Docs, tox, Travis configuration
  • [Bug] #286: Fix Travis CI and test configuration
  • [Bug] #200: Remove obsolete registration guidance
  • [Bug] #299: Fix changelog formatting
  • [Bug] #298: Fix syntax highlighting in README
  • [Bug] #315: Degrade gracefully when keyring is unavailable

1.9.1 2017-05-27

  • [Bug]: Blacklist known bad versions of Requests. See also [Bug] #253:

1.9.0 2017-05-22

  • [Support]: Check if a package exists if the URL is one of:

    • https://pypi.python.org/pypi/
    • https://upload.pypi.org/
    • https://upload.pypi.io/

    This helps people with https://upload.pypi.io still in their .pypirc file.

  • [Support]: Fix precedence of --repository-url over --repository. See also [Bug] #206:

  • [Support]: Fix --skip-existing when used to upload a package for the first time. See also [Bug] #220:

  • [Support]: Twine sends less information about the user’s system in the User-Agent string. See also [Bug] #229:

  • [Support]: Twine will use hashlib.blake2b on Python 3.6+ instead of using pyblake2 for Blake2 hashes 256 bit hashes.

  • [Support]: Twine will now resolve passwords using the keyring if available. Module can be required with the keyring extra.

1.8.0 2016-08-08

  • [Feature] #171: Generate Blake2b 256 digests for packages if pyblake2 is installed. Users can use python -m pip install twine[with-blake2] to have pyblake2 installed with Twine.

  • [Feature] #166: Allow the Repository URL to be provided on the command-line (--repository-url) or via an environment variable (TWINE_REPOSITORY_URL).

  • [Feature] #144: Retrieve configuration from the environment as a default.

    • Repository URL will default to TWINE_REPOSITORY
    • Username will default to TWINE_USERNAME
    • Password will default to TWINE_PASSWORD
  • [Feature] #201: Switch from upload.pypi.io to upload.pypi.org.

  • [Support]: Do not generate traffic to Legacy PyPI unless we’re uploading to it or uploading to Warehouse (e.g., pypi.io). This avoids the attempt to upload a package to the index if we can find it on Legacy PyPI already.

  • [Support]: Warn users if they receive a 500 error when uploading to *pypi.python.org

  • [Support]: Stop testing on Python 2.6. 2.6 support will be “best effort” until 2.0.0

  • [Support]: Generate SHA256 digest for all packages by default.

1.7.4 2016-07-09

  • [Bug]: Correct a packaging error.

1.7.3 2016-07-08

  • [Bug] #195: Fix uploads to instances of pypiserver using --skip-existing. We were not properly checking the return status code on the response after attempting an upload.

1.7.2 2016-07-05

  • [Bug] #189:, [Bug] #191: Fix issue where we were checking the existence of packages even if the user didn’t specify --skip-existing.

1.7.1 2016-07-05

  • [Bug] #187: Clint was not specified in the wheel metadata as a dependency.

1.7.0 2016-07-04

  • [Feature] #177: Switch Twine to upload to pypi.io instead of pypi.python.org.
  • [Feature] #167: Implement retries when the CDN in front of PyPI gives us a 5xx error.
  • [Feature] #162: Allow --skip-existing to work for 409 status codes.
  • [Feature] #152: Add progress bar to uploads.
  • [Feature] #142: Support --cert and --client-cert command-line flags and config file options for feature parity with pip. This allows users to verify connections to servers other than PyPI (e.g., local package repositories) with different certificates.
  • [Bug] #186: Allow passwords to have %s in them.

1.6.5 2015-12-16

  • [Bug] #155: Bump requests-toolbelt version to ensure we avoid ConnectionErrors

1.6.4 2015-10-27

  • [Bug] #146: Exception while accessing the repository key (sic) when raising a redirect exception.
  • [Bug] #145: Paths with hyphens in them break the Wheel regular expression.

1.6.3 2015-10-05

  • [Bug] #137:, [Bug] #140: Uploading signatures was broken due to the pull request that added large file support via requests-toolbelt. This caused a 500 error on PyPI and prevented package and signature upload in twine 1.6.0

1.6.2 2015-09-28

  • [Bug] #132: Upload signatures with packages appropriately

    As part of the refactor for the 1.6.0 release, we were using the wrong name to find the signature file.

    This also uncovered a bug where if you’re using twine in a situation where * is not expanded by your shell, we might also miss uploading signatures to PyPI. Both were fixed as part of this.

1.6.1 2015-09-18

  • [Bug] #130: Fix signing support for uploads

1.6.0 2015-09-14

  • [Feature] #8: Support registering new packages with twine register
  • [Feature] #115: Add the --skip-existing flag to twine upload to allow users to skip releases that already exist on PyPI.
  • [Feature] #97: Allow the user to specify the location of their .pypirc
  • [Feature] #104: Large file support via the requests-toolbelt
  • [Feature] #106: Upload wheels first to PyPI
  • [Bug] #111: Provide more helpful messages if .pypirc is out of date.
  • [Bug] #116: Work around problems with Windows when using getpass.getpass
  • [Bug] #114: Warnings triggered by pkginfo searching for PKG-INFO files should no longer be user visible.
  • [Bug] #92: Raise an exception on redirects

1.5.0 2015-03-10

  • [Feature] #29: Support commands not named “gpg” for signing
  • [Bug] #61: Support deprecated pypirc file format
  • [Bug] #85: Display information about the version of setuptools installed
  • [Support]: Add lower-limit to requests dependency

1.4.0 2014-12-12

  • [Feature] #6: Switch to a git style dispatching for the commands to enable simpler commands and programmatic invocation.
  • [Feature] #13: Parse ~/.pypirc ourselves and use subprocess instead of the distutils.spawn module.
  • [Bug] #65: Expand globs and check for existence of dists to upload
  • [Bug] #26: Add support for uploading Windows installers
  • [Bug] #47: Fix issue uploading packages with _s in the name
  • [Bug] #32: Use pkg_resources to load registered commands
  • [Bug] #34: List registered commands in help text
  • [Bug] #28: Prevent ResourceWarning from being shown

1.3.0 2014-03-31

  • [Feature]: Additional functionality.

1.2.2 2013-10-03

  • [Feature]: Basic functionality.