aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2017-01-16 15:04:47 -0500
committerJason R. Coombs <jaraco@jaraco.com>2017-01-16 15:04:47 -0500
commitc80f03bed382c523778c196f93616a04d3d8aa0c (patch)
tree91979531ac09a830ec35be92125b285503ba4d80
parente6087bfa308ee6b45c2c1906af1a7f4a177cb57b (diff)
parent730834b5c286b5ba2091394339d0759035804eba (diff)
downloadexternal_python_setuptools-c80f03bed382c523778c196f93616a04d3d8aa0c.tar.gz
external_python_setuptools-c80f03bed382c523778c196f93616a04d3d8aa0c.tar.bz2
external_python_setuptools-c80f03bed382c523778c196f93616a04d3d8aa0c.zip
Merge with master
-rw-r--r--.travis.yml11
-rw-r--r--CHANGES.rst18
-rwxr-xr-xREADME.rst240
-rw-r--r--docs/developer-guide.txt10
-rw-r--r--docs/history.txt38
-rwxr-xr-xsetup.cfg2
-rwxr-xr-xsetup.py2
-rw-r--r--setuptools/__init__.py2
-rwxr-xr-xsetuptools/namespaces.py1
-rwxr-xr-xsetuptools/package_index.py4
-rw-r--r--setuptools/py33compat.py1
-rw-r--r--setuptools/ssl_support.py55
12 files changed, 114 insertions, 270 deletions
diff --git a/.travis.yml b/.travis.yml
index 210926df..c30878cd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,12 +5,15 @@ python:
- 3.3
- 3.4
- 3.5
- - "3.6-dev"
+ - 3.6
- nightly
- pypy
-env:
- - ""
- - LC_ALL=C LC_CTYPE=C
+matrix:
+ include:
+ - python: 3.6
+ env: LC_ALL=C LC_CTYPE=C
+ - python: 2.7
+ env: LC_ALL=C LC_CTYPE=C
script:
# need tox and rwt to get started
- pip install tox rwt
diff --git a/CHANGES.rst b/CHANGES.rst
index 8c214db3..339a0e6d 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -1,3 +1,21 @@
+v33.1.1
+-------
+
+* #921: Correct issue where certifi fallback not being
+ reached on Windows.
+
+v33.1.0
+-------
+
+Installation via pip, as indicated in the `Python Packaging
+User's Guide <https://packaging.python.org/installing/>`_,
+is the officially-supported mechanism for installing
+Setuptools, and this recommendation is now explicit in the
+much more concise README.
+
+Other edits and tweaks were made to the documentation. The
+codebase is unchanged.
+
v33.0.0
-------
diff --git a/README.rst b/README.rst
index accaac3c..2f55bce1 100755
--- a/README.rst
+++ b/README.rst
@@ -1,241 +1,23 @@
-===============================
-Installing and Using Setuptools
-===============================
-
-.. contents:: **Table of Contents**
-
-
.. image:: https://readthedocs.org/projects/setuptools/badge/?version=latest
:target: https://setuptools.readthedocs.io
--------------------------
-Installation Instructions
--------------------------
-
-The recommended way to bootstrap setuptools on any system is to download
-`ez_setup.py`_ and run it using the target Python environment. Different
-operating systems have different recommended techniques to accomplish this
-basic routine, so below are some examples to get you started.
-
-Setuptools requires Python 2.6 or later. To install setuptools
-on Python 2.4 or Python 2.5, use the `bootstrap script for Setuptools 1.x
-<https://raw.githubusercontent.com/pypa/setuptools/bootstrap-py24/ez_setup.py>`_.
-
-The link provided to ez_setup.py is a bookmark to bootstrap script for the
-latest known stable release.
-
-.. _ez_setup.py: https://bootstrap.pypa.io/ez_setup.py
-
-Windows (Powershell 3 or later)
-===============================
-
-For best results, uninstall previous versions FIRST (see `Uninstalling`_).
-
-Using Windows 8 (which includes PowerShell 3) or earlier versions of Windows
-with PowerShell 3 installed, it's possible to install with one simple
-Powershell command. Start up Powershell and paste this command::
-
- > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python -
-
-.. image:: https://badges.gitter.im/pypa/setuptools.svg
- :alt: Join the chat at https://gitter.im/pypa/setuptools
- :target: https://gitter.im/pypa/setuptools?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
-
-You must start the Powershell with Administrative privileges or you may choose
-to install a user-local installation::
-
- > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | python - --user
-
-If you have Python 3.3 or later, you can use the ``py`` command to install to
-different Python versions. For example, to install to Python 3.3 if you have
-Python 2.7 installed::
-
- > (Invoke-WebRequest https://bootstrap.pypa.io/ez_setup.py).Content | py -3 -
-
-The recommended way to install setuptools on Windows is to download
-`ez_setup.py`_ and run it. The script will download the appropriate
-distribution file and install it for you.
-
-Once installation is complete, you will find an ``easy_install`` program in
-your Python ``Scripts`` subdirectory. For simple invocation and best results,
-add this directory to your ``PATH`` environment variable, if it is not already
-present. If you did a user-local install, the ``Scripts`` subdirectory is
-``$env:APPDATA\Python\Scripts``.
-
-
-Windows (simplified)
-====================
-
-For Windows without PowerShell 3 or for installation without a command-line,
-download `ez_setup.py`_ using your preferred web browser or other technique
-and "run" that file.
-
-
-Unix (wget)
-===========
-
-Most Linux distributions come with wget.
-
-Download `ez_setup.py`_ and run it using the target Python version. The script
-will download the appropriate version and install it for you::
-
- > wget https://bootstrap.pypa.io/ez_setup.py -O - | python
-
-Note that you will may need to invoke the command with superuser privileges to
-install to the system Python::
-
- > wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
-
-Alternatively, Setuptools may be installed to a user-local path::
-
- > wget https://bootstrap.pypa.io/ez_setup.py -O - | python - --user
-
-Note that on some older systems (noted on Debian 6 and CentOS 5 installations),
-`wget` may refuse to download `ez_setup.py`, complaining that the certificate common name `*.c.ssl.fastly.net`
-does not match the host name `bootstrap.pypa.io`. In addition, the `ez_setup.py` script may then encounter similar problems using
-`wget` internally to download `setuptools-x.y.zip`, complaining that the certificate common name of `www.python.org` does not match the
-host name `pypi.python.org`. Those are known issues, related to a bug in the older versions of `wget`
-(see `Issue 59 <https://bitbucket.org/pypa/pypi/issue/59#comment-5881915>`_). If you happen to encounter them,
-install Setuptools as follows::
-
- > wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
- > python ez_setup.py --insecure
-
-
-Unix including Mac OS X (curl)
-==============================
+See the `Installation Instructions
+<https://packaging.python.org/installing/>`_ in the Python Packaging
+User's Guide for instructions on installing, upgrading, and uninstalling
+Setuptools.
-If your system has curl installed, follow the ``wget`` instructions but
-replace ``wget`` with ``curl`` and ``-O`` with ``-o``. For example::
+The project is `maintained at GitHub <https://github.com/pypa/setuptools>`_.
- > curl https://bootstrap.pypa.io/ez_setup.py -o - | python
+Questions and comments should be directed to the `distutils-sig
+mailing list <http://mail.python.org/pipermail/distutils-sig/>`_.
+Bug reports and especially tested patches may be
+submitted directly to the `bug tracker
+<https://github.com/pypa/setuptools/issues>`_.
-Advanced Installation
-=====================
-
-For more advanced installation options, such as installing to custom
-locations or prefixes, download and extract the source
-tarball from `Setuptools on PyPI <https://pypi.python.org/pypi/setuptools>`_
-and run setup.py with any supported distutils and Setuptools options.
-For example::
-
- setuptools-x.x$ python setup.py install --prefix=/opt/setuptools
-
-Use ``--help`` to get a full options list, but we recommend consulting
-the `EasyInstall manual`_ for detailed instructions, especially `the section
-on custom installation locations`_.
-
-.. _EasyInstall manual: https://setuptools.readthedocs.io/en/latest/easy_install.html
-.. _the section on custom installation locations: https://setuptools.readthedocs.io/en/latest/easy_install.html#custom-installation-locations
-
-
-Downloads
-=========
-
-All setuptools downloads can be found at `the project's home page in the Python
-Package Index`_. Scroll to the very bottom of the page to find the links.
-
-.. _the project's home page in the Python Package Index: https://pypi.python.org/pypi/setuptools
-
-In addition to the PyPI downloads, the development version of ``setuptools``
-is available from the `GitHub repo`_, and in-development versions of the
-`0.6 branch`_ are available as well.
-
-.. _GitHub repo: https://github.com/pypa/setuptools/archive/master.tar.gz#egg=setuptools-dev
-.. _0.6 branch: http://svn.python.org/projects/sandbox/branches/setuptools-0.6/#egg=setuptools-dev06
-
-Uninstalling
-============
-
-On Windows, if Setuptools was installed using an ``.exe`` or ``.msi``
-installer, simply use the uninstall feature of "Add/Remove Programs" in the
-Control Panel.
-
-Otherwise, to uninstall Setuptools or Distribute, regardless of the Python
-version, delete all ``setuptools*`` and ``distribute*`` files and
-directories from your system's ``site-packages`` directory
-(and any other ``sys.path`` directories) FIRST.
-
-If you are upgrading or otherwise plan to re-install Setuptools or Distribute,
-nothing further needs to be done. If you want to completely remove Setuptools,
-you may also want to remove the 'easy_install' and 'easy_install-x.x' scripts
-and associated executables installed to the Python scripts directory.
-
---------------------------------
-Using Setuptools and EasyInstall
---------------------------------
-
-Here are some of the available manuals, tutorials, and other resources for
-learning about Setuptools, Python Eggs, and EasyInstall:
-
-* `The EasyInstall user's guide and reference manual`_
-* `The setuptools Developer's Guide`_
-* `The pkg_resources API reference`_
-* `The Internal Structure of Python Eggs`_
-
-Questions, comments, and bug reports should be directed to the `distutils-sig
-mailing list`_. If you have written (or know of) any tutorials, documentation,
-plug-ins, or other resources for setuptools users, please let us know about
-them there, so this reference list can be updated. If you have working,
-*tested* patches to correct problems or add features, you may submit them to
-the `setuptools bug tracker`_.
-
-.. _setuptools bug tracker: https://github.com/pypa/setuptools/issues
-.. _The Internal Structure of Python Eggs: https://setuptools.readthedocs.io/en/latest/formats.html
-.. _The setuptools Developer's Guide: https://setuptools.readthedocs.io/en/latest/developer-guide.html
-.. _The pkg_resources API reference: https://setuptools.readthedocs.io/en/latest/pkg_resources.html
-.. _The EasyInstall user's guide and reference manual: https://setuptools.readthedocs.io/en/latest/easy_install.html
-.. _distutils-sig mailing list: http://mail.python.org/pipermail/distutils-sig/
-
-
--------
-Credits
--------
-
-* The original design for the ``.egg`` format and the ``pkg_resources`` API was
- co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first
- version of ``pkg_resources``, and supplied the OS X operating system version
- compatibility algorithm.
-
-* Ian Bicking implemented many early "creature comfort" features of
- easy_install, including support for downloading via Sourceforge and
- Subversion repositories. Ian's comments on the Web-SIG about WSGI
- application deployment also inspired the concept of "entry points" in eggs,
- and he has given talks at PyCon and elsewhere to inform and educate the
- community about eggs and setuptools.
-
-* Jim Fulton contributed time and effort to build automated tests of various
- aspects of ``easy_install``, and supplied the doctests for the command-line
- ``.exe`` wrappers on Windows.
-
-* Phillip J. Eby is the seminal author of setuptools, and
- first proposed the idea of an importable binary distribution format for
- Python application plug-ins.
-
-* Significant parts of the implementation of setuptools were funded by the Open
- Source Applications Foundation, to provide a plug-in infrastructure for the
- Chandler PIM application. In addition, many OSAF staffers (such as Mike
- "Code Bear" Taylor) contributed their time and stress as guinea pigs for the
- use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!)
-
-* Tarek Ziadé is the principal author of the Distribute fork, which
- re-invigorated the community on the project, encouraged renewed innovation,
- and addressed many defects.
-
-* Since the merge with Distribute, Jason R. Coombs is the
- maintainer of setuptools. The project is maintained in coordination with
- the Python Packaging Authority (PyPA) and the larger Python community.
-
-.. _files:
-
-
----------------
Code of Conduct
---------------
Everyone interacting in the setuptools project's codebases, issue trackers,
chat rooms, and mailing lists is expected to follow the
-`PyPA Code of Conduct`_.
-
-.. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/
+`PyPA Code of Conduct <https://www.pypa.io/en/latest/code-of-conduct/>`_.
diff --git a/docs/developer-guide.txt b/docs/developer-guide.txt
index c8f51b02..8a136380 100644
--- a/docs/developer-guide.txt
+++ b/docs/developer-guide.txt
@@ -13,11 +13,11 @@ Recommended Reading
-------------------
Please read `How to write the perfect pull request
-<http://blog.jaraco.com/2014/04/how-to-write-perfect-pull-request.html>`_
-for some tips on contributing to open source projects. Although the article
-is not authoritative, it was authored by the maintainer of Setuptools, so
-reflects his opinions and will improve the likelihood of acceptance and
-quality of contribution.
+<https://blog.jaraco.com/how-to-write-perfect-pull-request/>`_ for some tips
+on contributing to open source projects. Although the article is not
+authoritative, it was authored by the maintainer of Setuptools, so reflects
+his opinions and will improve the likelihood of acceptance and quality of
+contribution.
------------------
Project Management
diff --git a/docs/history.txt b/docs/history.txt
index 8e217503..8fd1dc65 100644
--- a/docs/history.txt
+++ b/docs/history.txt
@@ -6,3 +6,41 @@ History
*******
.. include:: ../CHANGES (links).rst
+
+Credits
+*******
+
+* The original design for the ``.egg`` format and the ``pkg_resources`` API was
+ co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first
+ version of ``pkg_resources``, and supplied the OS X operating system version
+ compatibility algorithm.
+
+* Ian Bicking implemented many early "creature comfort" features of
+ easy_install, including support for downloading via Sourceforge and
+ Subversion repositories. Ian's comments on the Web-SIG about WSGI
+ application deployment also inspired the concept of "entry points" in eggs,
+ and he has given talks at PyCon and elsewhere to inform and educate the
+ community about eggs and setuptools.
+
+* Jim Fulton contributed time and effort to build automated tests of various
+ aspects of ``easy_install``, and supplied the doctests for the command-line
+ ``.exe`` wrappers on Windows.
+
+* Phillip J. Eby is the seminal author of setuptools, and
+ first proposed the idea of an importable binary distribution format for
+ Python application plug-ins.
+
+* Significant parts of the implementation of setuptools were funded by the Open
+ Source Applications Foundation, to provide a plug-in infrastructure for the
+ Chandler PIM application. In addition, many OSAF staffers (such as Mike
+ "Code Bear" Taylor) contributed their time and stress as guinea pigs for the
+ use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!)
+
+* Tarek Ziadé is the principal author of the Distribute fork, which
+ re-invigorated the community on the project, encouraged renewed innovation,
+ and addressed many defects.
+
+* Since the merge with Distribute, Jason R. Coombs is the
+ maintainer of setuptools. The project is maintained in coordination with
+ the Python Packaging Authority (PyPA) and the larger Python community.
+
diff --git a/setup.cfg b/setup.cfg
index 74d7e085..1d45057b 100755
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 33.0.0
+current_version = 33.1.1
commit = True
tag = True
diff --git a/setup.py b/setup.py
index bd585042..15063a9e 100755
--- a/setup.py
+++ b/setup.py
@@ -88,7 +88,7 @@ def pypi_link(pkg_filename):
setup_params = dict(
name="setuptools",
- version="33.0.0",
+ version="33.1.1",
description="Easily download, build, install, upgrade, and uninstall "
"Python packages",
author="Python Packaging Authority",
diff --git a/setuptools/__init__.py b/setuptools/__init__.py
index c60e1eab..d01918ed 100644
--- a/setuptools/__init__.py
+++ b/setuptools/__init__.py
@@ -7,7 +7,7 @@ import distutils.filelist
from distutils.util import convert_path
from fnmatch import fnmatchcase
-from six.moves import filter, filterfalse, map
+from six.moves import filter, map
import setuptools.version
from setuptools.extension import Extension
diff --git a/setuptools/namespaces.py b/setuptools/namespaces.py
index ba907439..556b5dd2 100755
--- a/setuptools/namespaces.py
+++ b/setuptools/namespaces.py
@@ -1,5 +1,4 @@
import os
-import sys
from distutils import log
import itertools
diff --git a/setuptools/package_index.py b/setuptools/package_index.py
index 65c3c433..42361058 100755
--- a/setuptools/package_index.py
+++ b/setuptools/package_index.py
@@ -20,7 +20,7 @@ from six.moves import urllib, http_client, configparser, map
import setuptools
from pkg_resources import (
CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST,
- require, Environment, find_distributions, safe_name, safe_version,
+ Environment, find_distributions, safe_name, safe_version,
to_filename, Requirement, DEVELOP_DIST,
)
from setuptools import ssl_support
@@ -48,7 +48,7 @@ __all__ = [
_SOCKET_TIMEOUT = 15
_tmpl = "setuptools/{setuptools.__version__} Python-urllib/{py_major}"
-user_agent = _tmpl.format(py_major=sys.version[:3], **globals())
+user_agent = _tmpl.format(py_major=sys.version[:3], setuptools=setuptools)
def parse_requirement_arg(spec):
diff --git a/setuptools/py33compat.py b/setuptools/py33compat.py
index ad91d73e..0caa2003 100644
--- a/setuptools/py33compat.py
+++ b/setuptools/py33compat.py
@@ -1,5 +1,4 @@
import dis
-import code
import array
import collections
diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py
index efeef71d..fa5e4421 100644
--- a/setuptools/ssl_support.py
+++ b/setuptools/ssl_support.py
@@ -2,10 +2,10 @@ import os
import socket
import atexit
import re
+import functools
-from six.moves import urllib, http_client, map
+from six.moves import urllib, http_client, map, filter
-import pkg_resources
from pkg_resources import ResolutionError, ExtractionError
try:
@@ -204,47 +204,52 @@ def opener_for(ca_bundle=None):
).open
-_wincerts = None
+# from jaraco.functools
+def once(func):
+ @functools.wraps(func)
+ def wrapper(*args, **kwargs):
+ if not hasattr(func, 'always_returns'):
+ func.always_returns = func(*args, **kwargs)
+ return func.always_returns
+ return wrapper
+@once
def get_win_certfile():
- global _wincerts
- if _wincerts is not None:
- return _wincerts.name
-
try:
- from wincertstore import CertFile
+ import wincertstore
except ImportError:
return None
- class MyCertFile(CertFile):
- def __init__(self, stores=(), certs=()):
- CertFile.__init__(self)
- for store in stores:
- self.addstore(store)
- self.addcerts(certs)
+ class CertFile(wincertstore.CertFile):
+ def __init__(self):
+ super(CertFile, self).__init__()
atexit.register(self.close)
def close(self):
try:
- super(MyCertFile, self).close()
+ super(CertFile, self).close()
except OSError:
pass
- _wincerts = MyCertFile(stores=['CA', 'ROOT'])
+ _wincerts = CertFile()
+ _wincerts.addstore('CA')
+ _wincerts.addstore('ROOT')
return _wincerts.name
def find_ca_bundle():
"""Return an existing CA bundle path, or None"""
- if os.name == 'nt':
- return get_win_certfile()
- else:
- for cert_path in cert_paths:
- if os.path.isfile(cert_path):
- return cert_path
+ extant_cert_paths = filter(os.path.isfile, cert_paths)
+ return (
+ get_win_certfile()
+ or next(extant_cert_paths, None)
+ or _certifi_where()
+ )
+
+
+def _certifi_where():
try:
- import certifi
- return certifi.where()
+ return __import__('certifi').where()
except (ImportError, ResolutionError, ExtractionError):
- return None
+ pass