summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Moore <p.f.moore@gmail.com>2018-04-14 12:17:14 +0100
committerGitHub <noreply@github.com>2018-04-14 12:17:14 +0100
commit28f3ce6fe2144c213d253e4d0a27ad4334611419 (patch)
tree15b5c382ad21f8560c09cc4e431b4621d19b641e
parent0007825733aa862e76a66e5d1cfee121c29192ff (diff)
parent4cbdd171c3d6f9c7bacf789cc2c72348240a06bb (diff)
downloadpip-28f3ce6fe2144c213d253e4d0a27ad4334611419.tar.gz
Merge pull request #5218 from pypa/release/10.0.010.0.0
Release 10.0.0
-rw-r--r--.gitattributes2
-rw-r--r--.mailmap1
-rw-r--r--AUTHORS.txt67
-rw-r--r--NEWS.rst246
-rw-r--r--docs/conf.py30
-rw-r--r--news/09f5c22f-ec40-420d-9647-da985cef8050.trivial0
-rw-r--r--news/1130.bugfix2
-rw-r--r--news/1139.bugfix1
-rw-r--r--news/1749.removal1
-rw-r--r--news/22781fda-31a5-4a7e-a8f3-ee28cb974cc9.trivial0
-rw-r--r--news/2369.feature4
-rw-r--r--news/2386.removal5
-rw-r--r--news/2449.feature2
-rw-r--r--news/2643.removal1
-rw-r--r--news/2699.removal2
-rw-r--r--news/2720.bugfix2
-rw-r--r--news/2732.bugfix1
-rw-r--r--news/2756.feature4
-rw-r--r--news/2fe1ea8a-7f67-4307-8521-cc7f34cebecc.trivial0
-rw-r--r--news/3015.bugfix1
-rw-r--r--news/3016.feature1
-rw-r--r--news/3070.removal2
-rw-r--r--news/30df328a-a647-4cbc-9216-e4ad299b08a2.trivial0
-rw-r--r--news/3236.bugfix1
-rw-r--r--news/3356.bugfix1
-rw-r--r--news/3515.feature1
-rw-r--r--news/3654.removal2
-rw-r--r--news/3686.removal2
-rw-r--r--news/3691.feature4
-rw-r--r--news/36f6f515-fa9e-4d45-84fd-740a5c09752e.trivial0
-rw-r--r--news/3728.feature2
-rw-r--r--news/3741.bugfix1
-rw-r--r--news/3763.bugfix1
-rw-r--r--news/3796.removal1
-rw-r--r--news/3830.bugfix1
-rw-r--r--news/3876.bugfix1
-rw-r--r--news/3901.bugfix1
-rw-r--r--news/3994.bugfix2
-rw-r--r--news/3997.bugfix2
-rw-r--r--news/4008.feature1
-rw-r--r--news/4015.feature2
-rw-r--r--news/4016.feature2
-rw-r--r--news/4052.removal1
-rw-r--r--news/4076.bugfix1
-rw-r--r--news/4092.bugfix1
-rw-r--r--news/4098.bugfix1
-rw-r--r--news/4127.feature1
-rw-r--r--news/4169.bugfix1
-rw-r--r--news/4175.feature1
-rw-r--r--news/4184.bugfix1
-rw-r--r--news/4203.removal2
-rw-r--r--news/4208.bugfix3
-rw-r--r--news/4209.feature1
-rw-r--r--news/4219.bugfix1
-rw-r--r--news/4227.feature1
-rw-r--r--news/4233.bugfix1
-rw-r--r--news/4240.feature1
-rw-r--r--news/4249.bugfix2
-rw-r--r--news/4262.doc1
-rw-r--r--news/4264.bugfix2
-rw-r--r--news/4289.feature2
-rw-r--r--news/4293.bugfix5
-rw-r--r--news/4299.feature1
-rw-r--r--news/4316.bugfix1
-rw-r--r--news/4320.bugfix2
-rw-r--r--news/4322.bugfix2
-rw-r--r--news/4332.trivial1
-rw-r--r--news/4336.feature3
-rw-r--r--news/4343.removal1
-rw-r--r--news/4358.doc0
-rw-r--r--news/4362.removal1
-rw-r--r--news/4437.bugfix1
-rw-r--r--news/4448.bugfix2
-rw-r--r--news/4449.removal1
-rw-r--r--news/4461.bugfix4
-rw-r--r--news/4473.feature4
-rw-r--r--news/4477.trivial0
-rw-r--r--news/4481.trivial0
-rw-r--r--news/4483.feature1
-rw-r--r--news/4484.trivial1
-rw-r--r--news/4485.trivial1
-rw-r--r--news/4486.bugfix1
-rw-r--r--news/4488.trivial1
-rw-r--r--news/4490.feature1
-rw-r--r--news/4491.feature1
-rw-r--r--news/4492.trivial1
-rw-r--r--news/4493.feature1
-rw-r--r--news/4495.bugfix1
-rw-r--r--news/4496.bugfix1
-rw-r--r--news/4500.feature1
-rw-r--r--news/4501.feature3
-rw-r--r--news/4503.trivial1
-rw-r--r--news/4507.feature2
-rw-r--r--news/4509.trivial1
-rw-r--r--news/4520.trivial1
-rw-r--r--news/4526.trivial1
-rw-r--r--news/4541.trivial1
-rw-r--r--news/4545.trivial1
-rw-r--r--news/4546.trivial1
-rw-r--r--news/4553.feature1
-rw-r--r--news/4556.trivial1
-rw-r--r--news/4563.feature1
-rw-r--r--news/4564.feature1
-rw-r--r--news/4565.trivial3
-rw-r--r--news/4642.feature1
-rw-r--r--news/4655.bugfix1
-rw-r--r--news/4667.bugfix2
-rw-r--r--news/4675.bugfix3
-rw-r--r--news/4696.removal2
-rw-r--r--news/4700.removal2
-rw-r--r--news/4743.doc2
-rw-r--r--news/4749.feature2
-rw-r--r--news/4758.feature1
-rw-r--r--news/4799.trivial0
-rw-r--r--news/4811.bugfix2
-rw-r--r--news/4876.bugfix1
-rw-r--r--news/4908.bugfix1
-rw-r--r--news/4954.feature1
-rw-r--r--news/4966.bugfix1
-rw-r--r--news/4974.trivial1
-rw-r--r--news/4976.bugfix1
-rw-r--r--news/4982.bugfix1
-rw-r--r--news/4999.feature1
-rw-r--r--news/5000.feature1
-rw-r--r--news/5085.bugfix1
-rw-r--r--news/5FA59779-9C0C-4689-B2DD-5991758C23DC.trivial0
-rw-r--r--news/6f543464-7772-44c9-97c6-44511ba639c8.trivial0
-rw-r--r--news/949.feature3
-rw-r--r--news/979.feature1
-rw-r--r--news/DEADBEEF.trivial1
-rw-r--r--news/F685738A-03B5-4092-B70B-EE36CECFB2D8.trivial0
-rw-r--r--news/FEE41119-80BF-49CB-B395-E71791996811.trivial0
-rw-r--r--news/FEE41119-80BF-49CB-B395-E71791996868.trivial0
-rw-r--r--news/FEE41119-80BF-49CB-B395-E71791996869.trivial0
-rw-r--r--news/a954b207-e297-469f-9ab3-0ad26d7b9c9b.trivial0
-rw-r--r--news/appdirs.vendor1
-rw-r--r--news/bc8c3a60-bf80-4c07-9cce-96cb6735d8cb.trivial0
-rw-r--r--news/cachecontrol.vendor1
-rw-r--r--news/certifi.vendor1
-rw-r--r--news/chardet.vendor1
-rw-r--r--news/colorama.vendor1
-rw-r--r--news/ddb4555b-1a7d-41ef-960c-694007acb442.trivial0
-rw-r--r--news/distlib.vendor1
-rw-r--r--news/distro.vendor1
-rw-r--r--news/idna.vendor1
-rw-r--r--news/ipaddress.vendor1
-rw-r--r--news/msgpack-python.vendor1
-rw-r--r--news/ordereddict.vendor1
-rw-r--r--news/progress.vendor1
-rw-r--r--news/pyparsing.vendor1
-rw-r--r--news/pytoml.vendor1
-rw-r--r--news/requests.vendor1
-rw-r--r--news/setuptools.vendor1
-rw-r--r--news/six.vendor1
-rw-r--r--news/urllib3.vendor1
-rw-r--r--news/webencodings.vendor1
-rw-r--r--pyproject.toml1
-rw-r--r--src/pip/__init__.py2
-rw-r--r--src/pip/_internal/build_env.py12
-rw-r--r--src/pip/_internal/commands/install.py10
-rw-r--r--src/pip/_internal/commands/wheel.py22
-rw-r--r--src/pip/_internal/compat.py4
-rw-r--r--src/pip/_internal/operations/check.py8
-rw-r--r--src/pip/_internal/operations/prepare.py28
-rw-r--r--src/pip/_internal/req/req_install.py42
-rw-r--r--src/pip/_internal/vcs/git.py16
-rw-r--r--src/pip/_internal/wheel.py15
-rw-r--r--tasks/generate.py3
-rw-r--r--tests/functional/test_check.py29
-rw-r--r--tests/functional/test_install.py97
-rw-r--r--tests/functional/test_install_check.py59
-rw-r--r--tests/functional/test_install_vcs.py21
-rw-r--r--tests/functional/test_wheel.py11
-rw-r--r--tests/lib/test_lib.py2
-rw-r--r--tests/unit/test_check.py25
-rw-r--r--tests/unit/test_wheel.py10
176 files changed, 609 insertions, 348 deletions
diff --git a/.gitattributes b/.gitattributes
index 9c9d2993c..2793a6c10 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,4 @@
# Patches must have Unix-style line endings, even on Windows
tasks/vendoring/patches/* eol=lf
+# The CA Bundle should always use Unix-style line endings, even on Windows
+src/pip/_vendor/certifi/*.pem eol=lf
diff --git a/.mailmap b/.mailmap
index 022cd1504..058c1e606 100644
--- a/.mailmap
+++ b/.mailmap
@@ -14,6 +14,7 @@ Daniel Holth <dholth@fastmail.fm>
David Black <db@d1b.org>
<donald@stufft.io> <donald.stufft@gmail.com>
Dongweiming <dongweiming@admaster.com.cn> <ciici1234@hotmail.com>
+Dustin Ingram <di@di.codes> <di@users.noreply.github.com>
Endoh Takanao <djmchl@gmail.com>
Erik M. Bray <embray@stsci.edu>
Gabriel de Perthuis <g2p.code@gmail.com>
diff --git a/AUTHORS.txt b/AUTHORS.txt
index e4fa41df9..fd8ed6d64 100644
--- a/AUTHORS.txt
+++ b/AUTHORS.txt
@@ -1,5 +1,6 @@
Adam Chainz <adam@adamj.eu>
Adam Wentz <awentz@theonion.com>
+Alan Yee <alyee@ucsd.edu>
Aleks Bunin <github@compuix.com>
Alex Gaynor <alex.gaynor@gmail.com>
Alex Grönholm <alex.gronholm@nextday.fi>
@@ -12,27 +13,40 @@ Andrei Geacar <andrei.geacar@gmail.com>
Andrey Bulgakov <mail@andreiko.ru>
Andy Freeland <andy.freeland@redjack.com>
Andy Kluger <AndydeCleyre@users.noreply.github.com>
+Anish Tambe <anish.tambe@yahoo.in>
Anrs Hu <anrs@douban.com>
+Anthony Sottile <asottile@umich.edu>
Antoine Musso <hashar@free.fr>
Anton Ovchinnikov <revolver112@gmail.com>
Anton Patrushev <apatrushev@gmail.com>
Antonio Alvarado Hernandez <tnotstar@gmail.com>
+Antony Lee <anntzer.lee@gmail.com>
Antti Kaihola <akaihol+github@ambitone.com>
+Anubhav Patel <anubhavp28@gmail.com>
+Anuj Godase <godaseanuj@gmail.com>
AQNOUCH Mohammed <aqnouch.mohammed@gmail.com>
+AraHaan <seandhunt_7@yahoo.com>
Arindam Choudhury <arindam@live.com>
Armin Ronacher <armin.ronacher@active-4.com>
Ashley Manton <ajd.manton@googlemail.com>
+Atsushi Odagiri <aodagx@gmail.com>
+Avner Cohen <israbirding@gmail.com>
Baptiste Mispelon <bmispelon@gmail.com>
+Bartek Ogryczak <b.ogryczak@gmail.com>
Ben Darnell <ben@bendarnell.com>
+Ben Hoyt <benhoyt@gmail.com>
Ben Rosser <rosser.bjr@gmail.com>
Bence Nagy <bence@underyx.me>
Benjamin VanEvery <ben@simondata.com>
+Benoit Pierre <benoit.pierre@gmail.com>
Berker Peksag <berker.peksag@gmail.com>
Bernardo B. Marques <bernardo.fire@gmail.com>
Bogdan Opanchuk <bogdan@opanchuk.net>
Brad Erickson <eosrei@gmail.com>
Bradley Ayers <bradley.ayers@gmail.com>
+Brandon L. Reiss <brandon@damyata.co>
Brian Rosner <brosner@gmail.com>
+BrownTruck <BrownTruck@users.noreply.github.com>
Bruno Oliveira <nicoddemus@gmail.com>
Bruno Renié <brutasse@gmail.com>
Buck Golemon <buck@yelp.com>
@@ -50,6 +64,7 @@ Chris Brinker <chris.brinker@gmail.com>
Chris Jerdonek <chris.jerdonek@gmail.com>
Chris McDonough <chrism@plope.com>
Chris Wolfe <chriswwolfe@gmail.com>
+Christian Heimes <christian@python.org>
Christian Oudard <christian.oudard@gmail.com>
Christopher Snyder <cnsnyder@users.noreply.github.com>
Clark Boylan <clark.boylan@gmail.com>
@@ -58,10 +73,14 @@ Cody <Purring@users.noreply.github.com>
Cody Soyland <codysoyland@gmail.com>
Colin Watson <cjwatson@debian.org>
Connor Osborn <cdosborn@email.arizona.edu>
+Cooper Lees <me@cooperlees.com>
+Cooper Ry Lees <me@cooperlees.com>
Cory Benfield <lukasaoz@gmail.com>
Cory Wright <corywright@gmail.com>
Craig Kerstiens <craig.kerstiens@gmail.com>
Cristian Sorinel <cristian.sorinel@gmail.com>
+Curtis Doty <Curtis@GreenKey.net>
+Damian Quiroga <qdamian@gmail.com>
Dan Savilonis <djs@n-cube.org>
Dan Sully <daniel-github@electricrain.com>
daniel <mcdonaldd@unimelb.edu.au>
@@ -78,6 +97,7 @@ David Caro <david@dcaro.es>
David Evans <d@drhevans.com>
David Linke <dr.david.linke@gmail.com>
David Pursehouse <david.pursehouse@gmail.com>
+David Tucker <david@tucker.name>
David Wales <daviewales@gmail.com>
Davidovich <david.genest@gmail.com>
derwolfe <chriswwolfe@gmail.com>
@@ -86,37 +106,51 @@ Domen Kožar <domen@dev.si>
Donald Stufft <donald@stufft.io>
Dongweiming <dongweiming@admaster.com.cn>
Douglas Thor <dougthor42@users.noreply.github.com>
+Dustin Ingram <di@di.codes>
Dwayne Bailey <dwayne@translate.org.za>
+Ed Morley <501702+edmorley@users.noreply.github.com>
Ed Morley <emorley@mozilla.com>
Emil Styrke <emil.styrke@gmail.com>
Endoh Takanao <djmchl@gmail.com>
enoch <lanxenet@gmail.com>
Eric Gillingham <Gillingham@bikezen.net>
Eric Hanchrow <eric.hanchrow@gmail.com>
+Eric Hopper <hopper@omnifarious.org>
Erik M. Bray <embray@stsci.edu>
Erik Rose <erik@mozilla.com>
+Erwin Janssen <erwinjanssen@outlook.com>
Eugene Vereshchagin <evvers@gmail.com>
+fiber-space <fiber-space@users.noreply.github.com>
+Filip Kokosiński <filip.kokosinski@gmail.com>
Florian Briand <ownerfrance+github@hotmail.com>
Francesco <f.guerrieri@gmail.com>
Francesco Montesano <franz.bergesund@gmail.com>
+Gabriel Curio <g.curio@gmail.com>
Gabriel de Perthuis <g2p.code@gmail.com>
Garry Polley <garrympolley@gmail.com>
+gdanielson <graeme.danielson@gmail.com>
Geoffrey Lehée <geoffrey@lehee.name>
Geoffrey Sneddon <me@gsnedders.com>
George Song <george@55minutes.com>
Georgi Valkov <georgi.t.valkov@gmail.com>
+Giftlin Rajaiah <giftlin.rgn@gmail.com>
gizmoguy1 <gizmoguy1@gmail.com>
+GOTO Hayato <3532528+gh640@users.noreply.github.com>
Guilherme Espada <porcariadagata@gmail.com>
Guy Rozendorn <guy@rzn.co.il>
+Hari Charan <hcharan997@gmail.com>
Herbert Pfennig <herbert@albinen.com>
Hsiaoming Yang <lepture@me.com>
+Hugo <hugovk@users.noreply.github.com>
Hugo Lopes Tavares <hltbra@gmail.com>
Hynek Schlawack <hs@ox.cx>
Ian Bicking <ianb@colorstudy.com>
Ian Cordasco <graffatcolmingov@gmail.com>
Ian Lee <IanLee1521@gmail.com>
+Ian Stapleton Cordasco <graffatcolmingov@gmail.com>
Ian Wienand <ian@wienand.org>
Ian Wienand <iwienand@redhat.com>
+Igor Kuzmitshov <kuzmiigo@gmail.com>
Igor Sobreira <igor@igorsobreira.com>
Ilya Baryshev <baryshev@gmail.com>
INADA Naoki <songofacandy@gmail.com>
@@ -141,6 +175,7 @@ Jim Garrison <jim@garrison.cc>
Jivan Amara <Development@JivanAmara.net>
John-Scott Atlakson <john.scott.atlakson@gmail.com>
Jon Banafato <jon@jonafato.com>
+Jon Dufresne <jon.dufresne@gmail.com>
Jon Parise <jon@indelible.org>
Jon Wayne Parrott <jjramone13@gmail.com>
Jonas Nockert <jonasnockert@gmail.com>
@@ -163,6 +198,7 @@ Kevin Burke <kev@inburke.com>
Kevin Carter <kevin.carter@rackspace.com>
Kevin Frommelt <kevin.frommelt@webfilings.com>
Kit Randel <kit@nocturne.net.nz>
+kpinc <kop@meme.com>
Kumar McMillan <kumar.mcmillan@gmail.com>
Kyle Persohn <kyle.persohn@gmail.com>
Laurent Bristiel <laurent@bristiel.com>
@@ -170,17 +206,22 @@ Leon Sasson <leonsassonha@gmail.com>
Lev Givon <lev@columbia.edu>
Lincoln de Sousa <lincoln@comum.org>
Lipis <lipiridis@gmail.com>
+Lucas Cimon <lucas.cimon@gmail.com>
Ludovic Gasc <gmludo@gmail.com>
Luke Macken <lmacken@redhat.com>
-Luo Jiebin <luo.jiebin@foxmail.com>
+Luo Jiebin <luo.jiebin@qq.com>
+luojiebin <luojiebin@users.noreply.github.com>
+luz.paz <luzpaz@users.noreply.github.com>
Marc Abramowitz <marc@marc-abramowitz.com>
Marc Tamlyn <marc.tamlyn@gmail.com>
Marcus Smith <qwcode@gmail.com>
+Mariatta <Mariatta@users.noreply.github.com>
Mark Kohler <mark.kohler@proteinsimple.com>
Markus Hametner <fin+github@xbhd.org>
Masklinn <bitbucket.org@masklinn.net>
Matej Stuchlik <mstuchli@redhat.com>
Mathew Jennings <mjennings@foursquare.com>
+Mathieu Bridon <bochecha@daitauha.fr>
Matt Good <matt@matt-good.net>
Matt Maker <trip@monstro.us>
Matt Robenolt <matt@ydekproductions.com>
@@ -189,7 +230,9 @@ Matthew Einhorn <moiein2000@gmail.com>
Matthew Gilliard <matthew.gilliard@gmail.com>
Matthew Iversen <teh.ivo@gmail.com>
Matthew Trumbell <matthew@thirdstonepartners.com>
+Matthew Willson <matthew@swiftkey.com>
Matthias Bussonnier <bussonniermatthias@gmail.com>
+mattip <matti.picus@gmail.com>
Maxim Kurnikov <maxim.kurnikov@gmail.com>
Maxime Rouyrre <rouyrre+git@gmail.com>
memoselyk <memoselyk@gmail.com>
@@ -209,6 +252,7 @@ Nate Coraor <nate@bx.psu.edu>
Nathaniel J. Smith <njs@pobox.com>
Nick Coghlan <ncoghlan@gmail.com>
Nick Stenning <nick@whiteink.com>
+Nikhil Benesch <nikhil.benesch@gmail.com>
Nowell Strite <nowell@strite.org>
nvdv <modestdev@gmail.com>
Ofekmeister <ofekmeister@gmail.com>
@@ -216,12 +260,15 @@ Oliver Tonnhofer <olt@bogosoft.com>
Olivier Girardot <ssaboum@gmail.com>
Olivier Grisel <olivier.grisel@ensta.org>
Ollie Rutherfurd <orutherfurd@gmail.com>
+OMOTO Kenji <k-omoto@m3.com>
Oren Held <orenhe@il.ibm.com>
Oscar Benjamin <oscar.j.benjamin@gmail.com>
+Oz N Tiram <oz.tiram@gmail.com>
Patrick Dubroy <pdubroy@gmail.com>
Patrick Jenkins <patrick@socialgrowthtechnologies.com>
Patrick Lawson <pl@foursquare.com>
patricktokeeffe <patricktokeeffe@users.noreply.github.com>
+Paul Kehrer <paul.l.kehrer@gmail.com>
Paul Moore <p.f.moore@gmail.com>
Paul Nasrat <pnasrat@gmail.com>
Paul Oswald <pauloswald@gmail.com>
@@ -232,15 +279,18 @@ Pekka Klärck <peke@iki.fi>
Peter Waller <peter.waller@gmail.com>
Phaneendra Chiruvella <hi@pcx.io>
Phil Freo <phil@philfreo.com>
+Phil Pennock <phil@pennock-tech.com>
Phil Whelan <phil123@gmail.com>
Philippe Ombredanne <pombredanne@gmail.com>
-Pierre-Yves Rofes <github@rofes.fr>
Pi Delport <pjdelport@gmail.com>
-Pradyun <pradyunsg@users.noreply.github.com>
-Pradyun S. Gedam <pradyunsg@gmail.com>
+Pierre-Yves Rofes <github@rofes.fr>
+pip <pypa-dev@googlegroups.com>
+Pradyun Gedam <pradyunsg@gmail.com>
+Pratik Mallya <mallya@us.ibm.com>
Preston Holmes <preston@ptone.com>
Przemek Wrzos <hetmankp@none>
Qiangning Hong <hongqn@gmail.com>
+R. David Murray <rdmurray@bitdance.com>
Rafael Caricio <rafael.jacinto@gmail.com>
Ralf Schmitt <ralf@systemexit.de>
Razzi Abuissa <razzi53@gmail.com>
@@ -270,6 +320,7 @@ schlamar <marc.schlaich@gmail.com>
Scott Kitterman <sklist@kitterman.com>
seanj <seanj@xyke.com>
Sebastian Schaetz <sschaetz@butterflynetinc.com>
+Segev Finer <segev208@gmail.com>
Sergey Vasilyev <nolar@nolar.info>
Seth Woodworth <seth@sethish.com>
Simeon Visser <svisser@users.noreply.github.com>
@@ -278,7 +329,7 @@ Simon Pichugin <simon.pichugin@gmail.com>
Sorin Sbarnea <sorin.sbarnea@gmail.com>
Stavros Korokithakis <stavros@korokithakis.net>
Stefan Scherfke <stefan@sofa-rockers.org>
-Stephan Erb <stephan@dev.static-void.de>
+Stephan Erb <github@stephanerb.eu>
stepshal <nessento@openmailbox.org>
Steve (Gadget) Barnes <gadgetsteve@hotmail.com>
Steve Barnes <gadgetsteve@hotmail.com>
@@ -293,7 +344,7 @@ Thomas Fenzl <thomas.fenzl@gmail.com>
Thomas Grainger <tagrain@gmail.com>
Thomas Guettler <tguettler@tbz-pariv.de>
Thomas Johansson <devnull@localhost>
-Thomas Kluyver <takowl@gmail.com>
+Thomas Kluyver <thomas@kluyver.me.uk>
Thomas Smith <smithtg@ncbi.nlm.nih.gov>
Tim D. Smith <github@tim-smith.us>
Tim Harder <radhermit@gmail.com>
@@ -307,10 +358,10 @@ Toshio Kuratomi <toshio@fedoraproject.org>
Travis Swicegood <development@domain51.com>
Valentin Haenel <valentin.haenel@gmx.de>
Victor Stinner <victor.stinner@gmail.com>
-Victor Stinner <vstinner@redhat.com>
Viktor Szépe <viktor@szepe.net>
Ville Skyttä <ville.skytta@iki.fi>
Vinay Sajip <vinay_sajip@yahoo.co.uk>
+Vincent Philippon <sindaewoh@gmail.com>
Vitaly Babiy <vbabiy86@gmail.com>
Vladimir Rutsky <rutsky@users.noreply.github.com>
W. Trevor King <wking@drexel.edu>
@@ -320,6 +371,7 @@ William ML Leslie <william.leslie.ttg@gmail.com>
Wolfgang Maier <wolfgang.maier@biologie.uni-freiburg.de>
Xavier Fernandez <xav.fernandez@gmail.com>
Xavier Fernandez <xavier.fernandez@polyconseil.fr>
+xoviat <xoviat@users.noreply.github.com>
YAMAMOTO Takashi <yamamoto@midokura.com>
Yen Chi Hsuan <yan12125@gmail.com>
Yoval P <yoval@gmx.com>
@@ -328,3 +380,4 @@ Zearin <zearin@gonk.net>
Zearin <Zearin@users.noreply.github.com>
Zhiping Deng <kofreestyler@gmail.com>
Zvezdan Petkovic <zpetkovic@acm.org>
+Семён Марьясин <simeon@maryasin.name>
diff --git a/NEWS.rst b/NEWS.rst
index f6b24c473..51be1804c 100644
--- a/NEWS.rst
+++ b/NEWS.rst
@@ -8,6 +8,252 @@
.. towncrier release notes start
+10.0.0 (2018-04-14)
+===================
+
+Bug Fixes
+---------
+
+- Prevent false-positive installation warnings due to incomplete name
+ normalizaton. (#5134)
+- Fix issue where installing from Git with a short SHA would fail. (#5140)
+- Accept pre-release versions when checking for conflicts with pip check or pip
+ install. (#5141)
+- ``ioctl(fd, termios.TIOCGWINSZ, ...)`` needs 8 bytes of data (#5150)
+- Do not warn about script location when installing to the directory containing
+ sys.executable. This is the case when 'pip install'ing without activating a
+ virtualenv. (#5157)
+- Fix PEP 518 support. (#5188)
+- Don't warn about script locations if ``--target`` is specified. (#5203)
+
+
+10.0.0b2 (2018-04-02)
+=====================
+
+Bug Fixes
+---------
+
+- Fixed line endings in CA Bundle - 10.0.0b1 was inadvertently released with Windows
+ line endings. (#5131)
+
+
+10.0.0b1 (2018-03-31)
+=====================
+
+Deprecations and Removals
+-------------------------
+
+- Removed the deprecated ``--egg`` parameter to ``pip install``. (#1749)
+- Removed support for uninstalling projects which have been installed using
+ distutils. distutils installed projects do not include metadata indicating
+ what files belong to that install and thus it is impossible to *actually*
+ uninstall them rather than just remove the metadata saying they've been
+ installed while leaving all of the actual files behind. (#2386)
+- Removed the deprecated ``--download`` option to ``pip install``. (#2643)
+- Removed the deprecated --(no-)use-wheel flags to ``pip install`` and ``pip
+ wheel``. (#2699)
+- Removed the deprecated ``--allow-external``, ``--allow-all-external``, and
+ ``--allow-unverified`` options. (#3070)
+- Switch the default for ``pip list`` to the columns format, and deprecate the
+ legacy format. (#3654, #3686)
+- Deprecate support for Python 3.3. (#3796)
+- Removed the deprecated ``--default-vcs`` option. (#4052)
+- Removed the ``setup.py test`` support from our sdist as it wasn't being
+ maintained as a supported means to run our tests. (#4203)
+- Dropped support for Python 2.6. (#4343)
+- Removed the --editable flag from pip download, as it did not make sense
+ (#4362)
+- Deprecate SVN detection based on dependency links in ``pip freeze``. (#4449)
+- Move all of pip's APIs into the pip._internal package, properly reflecting
+ the fact that pip does not currently have any public APIs. (#4696, #4700)
+
+Features
+--------
+
+- Add `--progress-bar <progress_bar>` to ``pip download``, ``pip install`` and
+ ``pip wheel`` commands, to allow selecting a specific progress indicator or,
+ to completely suppress, (for example in a CI environment) use
+ ``--progress-bar off```. (#2369, #2756)
+- Add `--no-color` to `pip`. All colored output is disabled if this flag is
+ detected. (#2449)
+- pip uninstall now ignores the absence of a requirement and prints a warning.
+ (#3016, #4642)
+- Improved the memory and disk efficiency of the HTTP cache. (#3515)
+- Support for packages specifying build dependencies in pyproject.toml (see
+ `PEP 518 <https://www.python.org/dev/peps/pep-0518/>`__). Packages which
+ specify one or more build dependencies this way will be built into wheels in
+ an isolated environment with those dependencies installed. (#3691)
+- pip now supports environment variable expansion in requirement files using
+ only ``${VARIABLE}`` syntax on all platforms. (#3728)
+- Allowed combinations of -q and -v to act sanely. Then we don't need warnings
+ mentioned in the issue. (#4008)
+- Add `--exclude-editable` to ``pip freeze`` and ``pip list`` to exclude
+ editable packages from installed package list. (#4015, #4016)
+- Improve the error message for the common ``pip install ./requirements.txt``
+ case. (#4127)
+- Add support for the new ``@ url`` syntax from PEP 508. (#4175)
+- Add setuptools version to the statistics sent to BigQuery. (#4209)
+- Report the line which caused the hash error when using requirement files.
+ (#4227)
+- Add a pip config command for managing configuration files. (#4240)
+- Allow ``pip download`` to be used with a specific platform when ``--no-deps``
+ is set. (#4289)
+- Support build-numbers in wheel versions and support sorting with
+ build-numbers. (#4299)
+- Change pip outdated to use PackageFinder in order to do the version lookup so
+ that local mirrors in Environments that do not have Internet connections can
+ be used as the Source of Truth for latest version. (#4336)
+- pip now retries on more HTTP status codes, for intermittent failures.
+ Previously, it only retried on the standard 503. Now, it also retries on 500
+ (transient failures on AWS S3), 520 and 527 (transient failures on
+ Cloudflare). (#4473)
+- pip now displays where it is looking for packages, if non-default locations
+ are used. (#4483)
+- Display a message to run the right command for modifying pip on Windows
+ (#4490)
+- Add Man Pages for pip (#4491)
+- Make uninstall command less verbose by default (#4493)
+- Switch the default upgrade strategy to be 'only-if-needed' (#4500)
+- Installing from a local directory or a VCS URL now builds a wheel to install,
+ rather than running ``setup.py install``. Wheels from these sources are not
+ cached. (#4501)
+- Don't log a warning when installing a dependency from Git if the name looks
+ like a commit hash. (#4507)
+- pip now displays a warning when it installs scripts from a wheel outside the
+ PATH. These warnings can be suppressed using a new --no-warn-script-location
+ option. (#4553)
+- Local Packages can now be referenced using forward slashes on Windows.
+ (#4563)
+- pip show learnt a new Required-by field that lists currently installed
+ packages that depend on the shown package (#4564)
+- The command-line autocompletion engine ``pip show`` now autocompletes
+ installed distribution names. (#4749)
+- Change documentation theme to be in line with Python Documentation (#4758)
+- Add auto completion of short options. (#4954)
+- Run 'setup.py develop' inside pep518 build environment. (#4999)
+- pip install now prints an error message when it installs an incompatible
+ version of a dependency. (#5000)
+- Added a way to distinguish between pip installed packages and those from the
+ system package manager in 'pip list'. Specifically, 'pip list -v' also shows
+ the installer of package if it has that meta data. (#949)
+- Show install locations when list command ran with "-v" option. (#979)
+
+Bug Fixes
+---------
+
+- Allow pip to work if the ``GIT_DIR`` and ``GIT_WORK_TREE`` environment
+ variables are set. (#1130)
+- Make ``pip install --force-reinstall`` not require passing ``--upgrade``.
+ (#1139)
+- Return a failing exit status when `pip install`, `pip download`, or `pip
+ wheel` is called with no requirements. (#2720)
+- Interactive setup.py files will no longer hang indefinitely. (#2732, #4982)
+- Correctly reset the terminal if an exception occurs while a progress bar is
+ being shown. (#3015)
+- "Support URL-encoded characters in URL credentials." (#3236)
+- Don't assume sys.__stderr__.encoding exists (#3356)
+- Fix ``pip uninstall`` when ``easy-install.pth`` lacks a trailing newline.
+ (#3741)
+- Keep install options in requirements.txt from leaking. (#3763)
+- pip no longer passes global options from one package to later packages in the
+ same requirement file. (#3830)
+- Support installing from Git refs (#3876)
+- Use pkg_resources to parse the entry points file to allow names with colons.
+ (#3901)
+- ``-q`` specified once correctly sets logging level to WARNING, instead of
+ CRITICAL. Use `-qqq` to have the previous behavior back. (#3994)
+- Shell completion scripts now use correct executable names (e.g., ``pip3``
+ instead of ``pip``) (#3997)
+- Changed vendored encodings from ``utf8`` to ``utf-8``. (#4076)
+- Fixes destination directory of data_files when ``pip install --target`` is
+ used. (#4092)
+- Limit the disabling of requests' pyopenssl to Windows only. Fixes
+ "SNIMissingWarning / InsecurePlatformWarning not fixable with pip 9.0 /
+ 9.0.1" (for non-Windows) (#4098)
+- Support the installation of wheels with non-PEP 440 version in their
+ filenames. (#4169)
+- Fall back to sys.getdefaultencoding() if locale.getpreferredencoding()
+ returns None in `pip.utils.encoding.auto_decode`. (#4184)
+- Fix a bug where `SETUPTOOLS_SHIM` got called incorrectly for relative path
+ requirements by converting relative paths to absolute paths prior to calling
+ the shim. (#4208)
+- Return the latest version number in search results. (#4219)
+- Improve error message on permission errors (#4233)
+- Fail gracefully when ``/etc/image_version`` (or another distro version file)
+ appears to exists but is not readable. (#4249)
+- Avoid importing setuptools in the parent pip process, to avoid a race
+ condition when upgrading one of setuptools dependencies. (#4264)
+- Fix for an incorrect ``freeze`` warning message due to a package being
+ included in multiple requirements files that were passed to ``freeze``.
+ Instead of warning incorrectly that the package is not installed, pip now
+ warns that the package was declared multiple times and lists the name of each
+ requirements file that contains the package in question. (#4293)
+- Generalize help text for ``compile``/``no-compile`` flags. (#4316)
+- Handle the case when ``/etc`` is not readable by the current user by using a
+ hardcoded list of possible names of release files. (#4320)
+- Fixed a ``NameError`` when attempting to catch ``FileNotFoundError`` on
+ Python 2.7. (#4322)
+- Ensure USER_SITE is correctly initialised. (#4437)
+- Reinstalling an editable package from Git no longer assumes that the
+ ``master`` branch exists. (#4448)
+- This fixes an issue where when someone who tries to use git with pip but pip
+ can't because git is not in the path environment variable. This clarifies the
+ error given to suggest to the user what might be wrong. (#4461)
+- Improve handling of text output from build tools (avoid Unicode errors)
+ (#4486)
+- Fix a "No such file or directory" error when using --prefix. (#4495)
+- Allow commands to opt out of --require-venv. This allows pip help to work
+ even when the environment variable PIP_REQUIRE_VIRTUALENV is set. (#4496)
+- Fix warning message on mismatched versions during installation. (#4655)
+- pip now records installed files in a deterministic manner improving
+ reproducibility. (#4667)
+- Fix an issue where ``pip install -e`` on a Git url would fail to update if a
+ branch or tag name is specified that happens to match the prefix of the
+ current ``HEAD`` commit hash. (#4675)
+- Fix an issue where a variable assigned in a try clause was accessed in the
+ except clause, resulting in an undefined variable error in the except clause.
+ (#4811)
+- Use log level `info` instead of `warning` when ignoring packages due to
+ environment markers. (#4876)
+- Replaced typo mistake in subversion support. (#4908)
+- Terminal size is now correctly inferred when using Python 3 on Windows.
+ (#4966)
+- Abort if reading configuration causes encoding errors. (#4976)
+- Add a ``--no-user`` option and use it when installing build dependencies.
+ (#5085)
+
+Vendored Libraries
+------------------
+
+- Upgraded appdirs to 1.4.3.
+- Upgraded CacheControl to 0.12.3.
+- Vendored certifi at 2017.7.27.1.
+- Vendored chardet at 3.0.4.
+- Upgraded colorama to 0.3.9.
+- Upgraded distlib to 0.2.6.
+- Upgraded distro to 1.2.0.
+- Vendored idna at idna==2.6.
+- Upgraded ipaddress to 1.0.18.
+- Vendored msgpack-python at 0.4.8.
+- Removed the vendored ordereddict.
+- Upgraded progress to 1.3.
+- Upgraded pyparsing to 2.2.0.
+- Upgraded pytoml to 0.1.14.
+- Upgraded requests to 2.18.4.
+- Upgraded pkg_resources (via setuptools) to 36.6.0.
+- Upgraded six to 1.11.0.
+- Vendored urllib3 at 1.22.
+- Upgraded webencodings to 0.5.1.
+
+Improved Documentation
+----------------------
+
+- Added documentation on usage of --build command line option (#4262)
+- (#4358)
+- Document how to call pip from your code, including the fact that we do not
+ provide a Python API. (#4743)
+
+
9.0.3 (2018-03-21)
==================
diff --git a/docs/conf.py b/docs/conf.py
index 08f31e61b..e615e6be8 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -12,6 +12,7 @@
# serve to show the default.
import os
+import re
import sys
import glob
@@ -59,14 +60,27 @@ copyright = '2008-2017, PyPA'
# built documents.
#
# The short X.Y version.
-try:
- from pip import __version__
- # The short X.Y version.
- version = '.'.join(__version__.split('.')[:2])
- # The full version, including alpha/beta/rc tags.
- release = __version__
-except ImportError:
- version = release = 'dev'
+
+version = release = 'dev'
+
+# Readthedocs seems to install pip as an egg (via setup.py install) which
+# is somehow resulting in "import pip" picking up an older copy of pip.
+# Rather than trying to force RTD to install pip properly, we'll simply
+# read the version direct from the __init__.py file. (Yes, this is
+# fragile, but it works...)
+root = os.path.dirname(os.path.dirname(__file__))
+pip_init = os.path.join(root, 'src', 'pip', '__init__.py')
+
+with open(pip_init) as f:
+ for line in f:
+ m = re.match(r'__version__ = "(.*)"', line)
+ if m:
+ __version__ = m.group(1)
+ # The short X.Y version.
+ version = '.'.join(__version__.split('.')[:2])
+ # The full version, including alpha/beta/rc tags.
+ release = __version__
+ break
# We have this here because readthedocs plays tricks sometimes and there seems
# to be a hiesenbug, related to the version of pip discovered. This is here to
diff --git a/news/09f5c22f-ec40-420d-9647-da985cef8050.trivial b/news/09f5c22f-ec40-420d-9647-da985cef8050.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/09f5c22f-ec40-420d-9647-da985cef8050.trivial
+++ /dev/null
diff --git a/news/1130.bugfix b/news/1130.bugfix
deleted file mode 100644
index cd749fbcb..000000000
--- a/news/1130.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Allow pip to work if the ``GIT_DIR`` and ``GIT_WORK_TREE`` environment
-variables are set.
diff --git a/news/1139.bugfix b/news/1139.bugfix
deleted file mode 100644
index 7c67ce141..000000000
--- a/news/1139.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Make ``pip install --force-reinstall`` not require passing ``--upgrade``.
diff --git a/news/1749.removal b/news/1749.removal
deleted file mode 100644
index e18787a86..000000000
--- a/news/1749.removal
+++ /dev/null
@@ -1 +0,0 @@
-Removed the deprecated ``--egg`` parameter to ``pip install``.
diff --git a/news/22781fda-31a5-4a7e-a8f3-ee28cb974cc9.trivial b/news/22781fda-31a5-4a7e-a8f3-ee28cb974cc9.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/22781fda-31a5-4a7e-a8f3-ee28cb974cc9.trivial
+++ /dev/null
diff --git a/news/2369.feature b/news/2369.feature
deleted file mode 100644
index a74023ed5..000000000
--- a/news/2369.feature
+++ /dev/null
@@ -1,4 +0,0 @@
-Add `--progress-bar <progress_bar>` to ``pip download``, ``pip install`` and
-``pip wheel`` commands, to allow selecting a specific progress indicator or, to
-completely suppress, (for example in a CI environment) use
-``--progress-bar off```.
diff --git a/news/2386.removal b/news/2386.removal
deleted file mode 100644
index 9e7ca0c91..000000000
--- a/news/2386.removal
+++ /dev/null
@@ -1,5 +0,0 @@
-Removed support for uninstalling projects which have been installed using
-distutils. distutils installed projects do not include metadata indicating
-what files belong to that install and thus it is impossible to *actually*
-uninstall them rather than just remove the metadata saying they've been
-installed while leaving all of the actual files behind.
diff --git a/news/2449.feature b/news/2449.feature
deleted file mode 100644
index 62410a67a..000000000
--- a/news/2449.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-Add `--no-color` to `pip`. All colored output is disabled
-if this flag is detected.
diff --git a/news/2643.removal b/news/2643.removal
deleted file mode 100644
index ee079f128..000000000
--- a/news/2643.removal
+++ /dev/null
@@ -1 +0,0 @@
-Removed the deprecated ``--download`` option to ``pip install``.
diff --git a/news/2699.removal b/news/2699.removal
deleted file mode 100644
index 0d6a5ffb0..000000000
--- a/news/2699.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Removed the deprecated --(no-)use-wheel flags to ``pip install`` and
-``pip wheel``.
diff --git a/news/2720.bugfix b/news/2720.bugfix
deleted file mode 100644
index 256141423..000000000
--- a/news/2720.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Return a failing exit status when `pip install`, `pip download`, or `pip wheel`
-is called with no requirements.
diff --git a/news/2732.bugfix b/news/2732.bugfix
deleted file mode 100644
index 14cc85335..000000000
--- a/news/2732.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Interactive setup.py files will no longer hang indefinitely.
diff --git a/news/2756.feature b/news/2756.feature
deleted file mode 100644
index a74023ed5..000000000
--- a/news/2756.feature
+++ /dev/null
@@ -1,4 +0,0 @@
-Add `--progress-bar <progress_bar>` to ``pip download``, ``pip install`` and
-``pip wheel`` commands, to allow selecting a specific progress indicator or, to
-completely suppress, (for example in a CI environment) use
-``--progress-bar off```.
diff --git a/news/2fe1ea8a-7f67-4307-8521-cc7f34cebecc.trivial b/news/2fe1ea8a-7f67-4307-8521-cc7f34cebecc.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/2fe1ea8a-7f67-4307-8521-cc7f34cebecc.trivial
+++ /dev/null
diff --git a/news/3015.bugfix b/news/3015.bugfix
deleted file mode 100644
index dcbd3e1f7..000000000
--- a/news/3015.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Correctly reset the terminal if an exception occurs while a progress bar is being shown.
diff --git a/news/3016.feature b/news/3016.feature
deleted file mode 100644
index 85a15d089..000000000
--- a/news/3016.feature
+++ /dev/null
@@ -1 +0,0 @@
-pip uninstall now ignores the absence of a requirement and prints a warning.
diff --git a/news/3070.removal b/news/3070.removal
deleted file mode 100644
index 03f8eddd7..000000000
--- a/news/3070.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Removed the deprecated ``--allow-external``, ``--allow-all-external``, and
-``--allow-unverified`` options.
diff --git a/news/30df328a-a647-4cbc-9216-e4ad299b08a2.trivial b/news/30df328a-a647-4cbc-9216-e4ad299b08a2.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/30df328a-a647-4cbc-9216-e4ad299b08a2.trivial
+++ /dev/null
diff --git a/news/3236.bugfix b/news/3236.bugfix
deleted file mode 100644
index 51d358458..000000000
--- a/news/3236.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-"Support URL-encoded characters in URL credentials."
diff --git a/news/3356.bugfix b/news/3356.bugfix
deleted file mode 100644
index 71aa80617..000000000
--- a/news/3356.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Don't assume sys.__stderr__.encoding exists
diff --git a/news/3515.feature b/news/3515.feature
deleted file mode 100644
index 5d22daada..000000000
--- a/news/3515.feature
+++ /dev/null
@@ -1 +0,0 @@
-Improved the memory and disk efficiency of the HTTP cache.
diff --git a/news/3654.removal b/news/3654.removal
deleted file mode 100644
index c2679b06e..000000000
--- a/news/3654.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Switch the default for ``pip list`` to the columns format, and deprecate the
-legacy format.
diff --git a/news/3686.removal b/news/3686.removal
deleted file mode 100644
index c2679b06e..000000000
--- a/news/3686.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Switch the default for ``pip list`` to the columns format, and deprecate the
-legacy format.
diff --git a/news/3691.feature b/news/3691.feature
deleted file mode 100644
index 24eebbcc0..000000000
--- a/news/3691.feature
+++ /dev/null
@@ -1,4 +0,0 @@
-Support for packages specifying build dependencies in pyproject.toml (see `PEP
-518 <https://www.python.org/dev/peps/pep-0518/>`__). Packages which specify
-one or more build dependencies this way will be built into wheels in an
-isolated environment with those dependencies installed.
diff --git a/news/36f6f515-fa9e-4d45-84fd-740a5c09752e.trivial b/news/36f6f515-fa9e-4d45-84fd-740a5c09752e.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/36f6f515-fa9e-4d45-84fd-740a5c09752e.trivial
+++ /dev/null
diff --git a/news/3728.feature b/news/3728.feature
deleted file mode 100644
index 3080f88f7..000000000
--- a/news/3728.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-pip now supports environment variable expansion in requirement files using
-only ``${VARIABLE}`` syntax on all platforms.
diff --git a/news/3741.bugfix b/news/3741.bugfix
deleted file mode 100644
index 6691bd81b..000000000
--- a/news/3741.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix ``pip uninstall`` when ``easy-install.pth`` lacks a trailing newline.
diff --git a/news/3763.bugfix b/news/3763.bugfix
deleted file mode 100644
index 18741c232..000000000
--- a/news/3763.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Keep install options in requirements.txt from leaking.
diff --git a/news/3796.removal b/news/3796.removal
deleted file mode 100644
index 6dcd44c99..000000000
--- a/news/3796.removal
+++ /dev/null
@@ -1 +0,0 @@
-Deprecate support for Python 3.3.
diff --git a/news/3830.bugfix b/news/3830.bugfix
deleted file mode 100644
index 9068e0815..000000000
--- a/news/3830.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-pip no longer passes global options from one package to later packages in the same requirement file.
diff --git a/news/3876.bugfix b/news/3876.bugfix
deleted file mode 100644
index eb7296f2c..000000000
--- a/news/3876.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Support installing from Git refs
diff --git a/news/3901.bugfix b/news/3901.bugfix
deleted file mode 100644
index 4b24c6718..000000000
--- a/news/3901.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Use pkg_resources to parse the entry points file to allow names with colons.
diff --git a/news/3994.bugfix b/news/3994.bugfix
deleted file mode 100644
index 0c2626c1b..000000000
--- a/news/3994.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-``-q`` specified once correctly sets logging level to WARNING, instead of CRITICAL.
-Use `-qqq` to have the previous behavior back.
diff --git a/news/3997.bugfix b/news/3997.bugfix
deleted file mode 100644
index 78e9895f8..000000000
--- a/news/3997.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Shell completion scripts now use correct executable names (e.g., ``pip3``
-instead of ``pip``)
diff --git a/news/4008.feature b/news/4008.feature
deleted file mode 100644
index cf311c00a..000000000
--- a/news/4008.feature
+++ /dev/null
@@ -1 +0,0 @@
-Allowed combinations of -q and -v to act sanely. Then we don't need warnings mentioned in the issue.
diff --git a/news/4015.feature b/news/4015.feature
deleted file mode 100644
index 39748e657..000000000
--- a/news/4015.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-Add `--exclude-editable` to ``pip freeze`` and ``pip list`` to exclude editable
-packages from installed package list.
diff --git a/news/4016.feature b/news/4016.feature
deleted file mode 100644
index 39748e657..000000000
--- a/news/4016.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-Add `--exclude-editable` to ``pip freeze`` and ``pip list`` to exclude editable
-packages from installed package list.
diff --git a/news/4052.removal b/news/4052.removal
deleted file mode 100644
index acc15cb04..000000000
--- a/news/4052.removal
+++ /dev/null
@@ -1 +0,0 @@
-Removed the deprecated ``--default-vcs`` option.
diff --git a/news/4076.bugfix b/news/4076.bugfix
deleted file mode 100644
index 0bb2d03bc..000000000
--- a/news/4076.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Changed vendored encodings from ``utf8`` to ``utf-8``.
diff --git a/news/4092.bugfix b/news/4092.bugfix
deleted file mode 100644
index 1819d465f..000000000
--- a/news/4092.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fixes destination directory of data_files when ``pip install --target`` is used.
diff --git a/news/4098.bugfix b/news/4098.bugfix
deleted file mode 100644
index 7f121a080..000000000
--- a/news/4098.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Limit the disabling of requests' pyopenssl to Windows only. Fixes "SNIMissingWarning / InsecurePlatformWarning not fixable with pip 9.0 / 9.0.1" (for non-Windows)
diff --git a/news/4127.feature b/news/4127.feature
deleted file mode 100644
index 0fe40bfc8..000000000
--- a/news/4127.feature
+++ /dev/null
@@ -1 +0,0 @@
-Improve the error message for the common ``pip install ./requirements.txt`` case.
diff --git a/news/4169.bugfix b/news/4169.bugfix
deleted file mode 100644
index 0746809c5..000000000
--- a/news/4169.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Support the installation of wheels with non-PEP 440 version in their filenames. \ No newline at end of file
diff --git a/news/4175.feature b/news/4175.feature
deleted file mode 100644
index 60175e163..000000000
--- a/news/4175.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add support for the new ``@ url`` syntax from PEP 508.
diff --git a/news/4184.bugfix b/news/4184.bugfix
deleted file mode 100644
index 8dc6d6980..000000000
--- a/news/4184.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fall back to sys.getdefaultencoding() if locale.getpreferredencoding() returns None in `pip.utils.encoding.auto_decode`.
diff --git a/news/4203.removal b/news/4203.removal
deleted file mode 100644
index 7817bbeb1..000000000
--- a/news/4203.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Removed the ``setup.py test`` support from our sdist as it wasn't being
-maintained as a supported means to run our tests.
diff --git a/news/4208.bugfix b/news/4208.bugfix
deleted file mode 100644
index 9325da32c..000000000
--- a/news/4208.bugfix
+++ /dev/null
@@ -1,3 +0,0 @@
-Fix a bug where `SETUPTOOLS_SHIM` got called incorrectly for relative path
-requirements by converting relative paths to absolute paths prior to calling
-the shim.
diff --git a/news/4209.feature b/news/4209.feature
deleted file mode 100644
index c471006cf..000000000
--- a/news/4209.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add setuptools version to the statistics sent to BigQuery.
diff --git a/news/4219.bugfix b/news/4219.bugfix
deleted file mode 100644
index bfa0b65f6..000000000
--- a/news/4219.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Return the latest version number in search results.
diff --git a/news/4227.feature b/news/4227.feature
deleted file mode 100644
index 21330c897..000000000
--- a/news/4227.feature
+++ /dev/null
@@ -1 +0,0 @@
-Report the line which caused the hash error when using requirement files.
diff --git a/news/4233.bugfix b/news/4233.bugfix
deleted file mode 100644
index be93e3846..000000000
--- a/news/4233.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Improve error message on permission errors
diff --git a/news/4240.feature b/news/4240.feature
deleted file mode 100644
index d92342407..000000000
--- a/news/4240.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add a pip config command for managing configuration files.
diff --git a/news/4249.bugfix b/news/4249.bugfix
deleted file mode 100644
index 07f421470..000000000
--- a/news/4249.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Fail gracefully when ``/etc/image_version`` (or another distro version file)
-appears to exists but is not readable.
diff --git a/news/4262.doc b/news/4262.doc
deleted file mode 100644
index 89ea113c5..000000000
--- a/news/4262.doc
+++ /dev/null
@@ -1 +0,0 @@
-Added documentation on usage of --build command line option
diff --git a/news/4264.bugfix b/news/4264.bugfix
deleted file mode 100644
index 0f4066040..000000000
--- a/news/4264.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Avoid importing setuptools in the parent pip process, to avoid a race condition
-when upgrading one of setuptools dependencies.
diff --git a/news/4289.feature b/news/4289.feature
deleted file mode 100644
index 320914be4..000000000
--- a/news/4289.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-Allow ``pip download`` to be used with a specific platform when ``--no-deps`` is
-set.
diff --git a/news/4293.bugfix b/news/4293.bugfix
deleted file mode 100644
index 643ee1ea0..000000000
--- a/news/4293.bugfix
+++ /dev/null
@@ -1,5 +0,0 @@
-Fix for an incorrect ``freeze`` warning message due to a package being
-included in multiple requirements files that were passed to ``freeze``.
-Instead of warning incorrectly that the package is not installed, pip
-now warns that the package was declared multiple times and lists the
-name of each requirements file that contains the package in question.
diff --git a/news/4299.feature b/news/4299.feature
deleted file mode 100644
index 0f9f3c618..000000000
--- a/news/4299.feature
+++ /dev/null
@@ -1 +0,0 @@
-Support build-numbers in wheel versions and support sorting with build-numbers.
diff --git a/news/4316.bugfix b/news/4316.bugfix
deleted file mode 100644
index 5fec2ac48..000000000
--- a/news/4316.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Generalize help text for ``compile``/``no-compile` flags.
diff --git a/news/4320.bugfix b/news/4320.bugfix
deleted file mode 100644
index 6ce610a10..000000000
--- a/news/4320.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Handle the case when ``/etc`` is not readable by the current user by using a
-hardcoded list of possible names of release files.
diff --git a/news/4322.bugfix b/news/4322.bugfix
deleted file mode 100644
index 718bad45a..000000000
--- a/news/4322.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Fixed a ``NameError`` when attempting to catch ``FileNotFoundError`` on
-Python 2.7.
diff --git a/news/4332.trivial b/news/4332.trivial
deleted file mode 100644
index cc458f1a9..000000000
--- a/news/4332.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Introduce a Temporary Directory abstraction in the codebase.
diff --git a/news/4336.feature b/news/4336.feature
deleted file mode 100644
index f27be7d09..000000000
--- a/news/4336.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Change pip outdated to use PackageFinder in order to do the version lookup
-so that local mirrors in Environments that do not have Internet connections
-can be used as the Source of Truth for latest version.
diff --git a/news/4343.removal b/news/4343.removal
deleted file mode 100644
index f206bddfe..000000000
--- a/news/4343.removal
+++ /dev/null
@@ -1 +0,0 @@
-Dropped support for Python 2.6.
diff --git a/news/4358.doc b/news/4358.doc
deleted file mode 100644
index e69de29bb..000000000
--- a/news/4358.doc
+++ /dev/null
diff --git a/news/4362.removal b/news/4362.removal
deleted file mode 100644
index a9d31bcbe..000000000
--- a/news/4362.removal
+++ /dev/null
@@ -1 +0,0 @@
-Removed the --editable flag from pip download, as it did not make sense
diff --git a/news/4437.bugfix b/news/4437.bugfix
deleted file mode 100644
index 97a15d0bf..000000000
--- a/news/4437.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Ensure USER_SITE is correctly initialised. \ No newline at end of file
diff --git a/news/4448.bugfix b/news/4448.bugfix
deleted file mode 100644
index 28088dd63..000000000
--- a/news/4448.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Reinstalling an editable package from Git no longer assumes that the ``master``
-branch exists.
diff --git a/news/4449.removal b/news/4449.removal
deleted file mode 100644
index 7923641dc..000000000
--- a/news/4449.removal
+++ /dev/null
@@ -1 +0,0 @@
-Deprecate SVN detection based on dependency links in ``pip freeze``.
diff --git a/news/4461.bugfix b/news/4461.bugfix
deleted file mode 100644
index 427f436ca..000000000
--- a/news/4461.bugfix
+++ /dev/null
@@ -1,4 +0,0 @@
-This fixes an issue where when someone who tries to use git
-with pip but pip can't because git is not in the path
-environment variable. This clarifies the error given to
-suggest to the user what might be wrong.
diff --git a/news/4473.feature b/news/4473.feature
deleted file mode 100644
index 5e93d3224..000000000
--- a/news/4473.feature
+++ /dev/null
@@ -1,4 +0,0 @@
-pip now retries on more HTTP status codes, for intermittent failures.
-
-Previously, it only retried on the standard 503. Now, it also retries on 500
-(transient failures on AWS S3), 520 and 527 (transient failures on Cloudflare).
diff --git a/news/4477.trivial b/news/4477.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/4477.trivial
+++ /dev/null
diff --git a/news/4481.trivial b/news/4481.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/4481.trivial
+++ /dev/null
diff --git a/news/4483.feature b/news/4483.feature
deleted file mode 100644
index 51ff98f7a..000000000
--- a/news/4483.feature
+++ /dev/null
@@ -1 +0,0 @@
-pip now displays where it is looking for packages, if non-default locations are used.
diff --git a/news/4484.trivial b/news/4484.trivial
deleted file mode 100644
index b5aef2b1f..000000000
--- a/news/4484.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Modify README to move badges above links to resources.
diff --git a/news/4485.trivial b/news/4485.trivial
deleted file mode 100644
index 2e031a533..000000000
--- a/news/4485.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Sort all imports in the codebase
diff --git a/news/4486.bugfix b/news/4486.bugfix
deleted file mode 100644
index 9f92ddd55..000000000
--- a/news/4486.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Improve handling of text output from build tools (avoid Unicode errors)
diff --git a/news/4488.trivial b/news/4488.trivial
deleted file mode 100644
index b2194d941..000000000
--- a/news/4488.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Misc Documentation Fixes
diff --git a/news/4490.feature b/news/4490.feature
deleted file mode 100644
index 1982ef977..000000000
--- a/news/4490.feature
+++ /dev/null
@@ -1 +0,0 @@
-Display a message to run the right command for modifying pip on Windows
diff --git a/news/4491.feature b/news/4491.feature
deleted file mode 100644
index 0351666ee..000000000
--- a/news/4491.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add Man Pages for pip
diff --git a/news/4492.trivial b/news/4492.trivial
deleted file mode 100644
index eb95435dd..000000000
--- a/news/4492.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Re-Run network tests if they fail, up to 3 times
diff --git a/news/4493.feature b/news/4493.feature
deleted file mode 100644
index 78654bf83..000000000
--- a/news/4493.feature
+++ /dev/null
@@ -1 +0,0 @@
-Make uninstall command less verbose by default
diff --git a/news/4495.bugfix b/news/4495.bugfix
deleted file mode 100644
index cfecacf89..000000000
--- a/news/4495.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a "No such file or directory" error when using --prefix.
diff --git a/news/4496.bugfix b/news/4496.bugfix
deleted file mode 100644
index 89fa319c5..000000000
--- a/news/4496.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Allow commands to opt out of --require-venv. This allows pip help to work even when the environment variable PIP_REQUIRE_VIRTUALENV is set.
diff --git a/news/4500.feature b/news/4500.feature
deleted file mode 100644
index 5157c0fa8..000000000
--- a/news/4500.feature
+++ /dev/null
@@ -1 +0,0 @@
-Switch the default upgrade strategy to be 'only-if-needed'
diff --git a/news/4501.feature b/news/4501.feature
deleted file mode 100644
index 475a13172..000000000
--- a/news/4501.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Installing from a local directory or a VCS URL now builds a wheel to install,
-rather than running ``setup.py install``. Wheels from these sources are not
-cached.
diff --git a/news/4503.trivial b/news/4503.trivial
deleted file mode 100644
index 0fce96c16..000000000
--- a/news/4503.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Update pyproject.toml for PEP-518
diff --git a/news/4507.feature b/news/4507.feature
deleted file mode 100644
index 4303cb530..000000000
--- a/news/4507.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-Don't log a warning when installing a dependency from Git if the name looks
-like a commit hash.
diff --git a/news/4509.trivial b/news/4509.trivial
deleted file mode 100644
index 35c3b6529..000000000
--- a/news/4509.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Just indentation things.
diff --git a/news/4520.trivial b/news/4520.trivial
deleted file mode 100644
index c93f1e3ff..000000000
--- a/news/4520.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Sort imports, again.
diff --git a/news/4526.trivial b/news/4526.trivial
deleted file mode 100644
index 9bb94fb94..000000000
--- a/news/4526.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Move prepare_files logic to pip.resolve
diff --git a/news/4541.trivial b/news/4541.trivial
deleted file mode 100644
index 6b4a48091..000000000
--- a/news/4541.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Re-Run tests only on CI
diff --git a/news/4545.trivial b/news/4545.trivial
deleted file mode 100644
index 43e175946..000000000
--- a/news/4545.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Add a new pip.cache module.
diff --git a/news/4546.trivial b/news/4546.trivial
deleted file mode 100644
index 2d8c1c7ec..000000000
--- a/news/4546.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Move attributes from RequirementSet to Resolver
diff --git a/news/4553.feature b/news/4553.feature
deleted file mode 100644
index ca5732bcc..000000000
--- a/news/4553.feature
+++ /dev/null
@@ -1 +0,0 @@
-pip now displays a warning when it installs scripts from a wheel outside the PATH. These warnings can be suppressed using a new --no-warn-script-location option.
diff --git a/news/4556.trivial b/news/4556.trivial
deleted file mode 100644
index 3275226cb..000000000
--- a/news/4556.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Misc changes related to configuration
diff --git a/news/4563.feature b/news/4563.feature
deleted file mode 100644
index e0096909a..000000000
--- a/news/4563.feature
+++ /dev/null
@@ -1 +0,0 @@
-Local Packages can now be referenced using forward slashes on Windows.
diff --git a/news/4564.feature b/news/4564.feature
deleted file mode 100644
index 55201ced6..000000000
--- a/news/4564.feature
+++ /dev/null
@@ -1 +0,0 @@
-pip show learnt a new Required-by field that lists currently installed packages that depend on the shown package
diff --git a/news/4565.trivial b/news/4565.trivial
deleted file mode 100644
index 83d25bd7b..000000000
--- a/news/4565.trivial
+++ /dev/null
@@ -1,3 +0,0 @@
-Improve sentence in docs describing how to put multiple values into a
-single environment variable in those cases where a command line option
-may be repeated.
diff --git a/news/4642.feature b/news/4642.feature
deleted file mode 100644
index 85a15d089..000000000
--- a/news/4642.feature
+++ /dev/null
@@ -1 +0,0 @@
-pip uninstall now ignores the absence of a requirement and prints a warning.
diff --git a/news/4655.bugfix b/news/4655.bugfix
deleted file mode 100644
index a2b68cf14..000000000
--- a/news/4655.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix warning message on mismatched versions during installation.
diff --git a/news/4667.bugfix b/news/4667.bugfix
deleted file mode 100644
index cba4ba427..000000000
--- a/news/4667.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-pip now records installed files in a deterministic manner improving
-reproducibility.
diff --git a/news/4675.bugfix b/news/4675.bugfix
deleted file mode 100644
index 614cfd035..000000000
--- a/news/4675.bugfix
+++ /dev/null
@@ -1,3 +0,0 @@
-Fix an issue where ``pip install -e`` on a Git url would fail to update if
-a branch or tag name is specified that happens to match the prefix of the
-current ``HEAD`` commit hash.
diff --git a/news/4696.removal b/news/4696.removal
deleted file mode 100644
index 1c68f443a..000000000
--- a/news/4696.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Move all of pip's APIs into the pip._internal package, properly reflecting the
-fact that pip does not currently have any public APIs.
diff --git a/news/4700.removal b/news/4700.removal
deleted file mode 100644
index 1c68f443a..000000000
--- a/news/4700.removal
+++ /dev/null
@@ -1,2 +0,0 @@
-Move all of pip's APIs into the pip._internal package, properly reflecting the
-fact that pip does not currently have any public APIs.
diff --git a/news/4743.doc b/news/4743.doc
deleted file mode 100644
index 60e00865a..000000000
--- a/news/4743.doc
+++ /dev/null
@@ -1,2 +0,0 @@
-Document how to call pip from your code, including the fact
-that we do not provide a Python API.
diff --git a/news/4749.feature b/news/4749.feature
deleted file mode 100644
index a17ae53ee..000000000
--- a/news/4749.feature
+++ /dev/null
@@ -1,2 +0,0 @@
-The command-line autocompletion engine ``pip show`` now autocompletes installed
-distribution names.
diff --git a/news/4758.feature b/news/4758.feature
deleted file mode 100644
index ac0fab375..000000000
--- a/news/4758.feature
+++ /dev/null
@@ -1 +0,0 @@
-Change documentation theme to be in line with Python Documentation
diff --git a/news/4799.trivial b/news/4799.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/4799.trivial
+++ /dev/null
diff --git a/news/4811.bugfix b/news/4811.bugfix
deleted file mode 100644
index c8d11838b..000000000
--- a/news/4811.bugfix
+++ /dev/null
@@ -1,2 +0,0 @@
-Fix an issue where a variable assigned in a try clause was accessed in the except clause, resulting in an undefined
-variable error in the except clause.
diff --git a/news/4876.bugfix b/news/4876.bugfix
deleted file mode 100644
index 101551535..000000000
--- a/news/4876.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Use log level `info` instead of `warning` when ignoring packages due to environment markers.
diff --git a/news/4908.bugfix b/news/4908.bugfix
deleted file mode 100644
index 3e1b7154c..000000000
--- a/news/4908.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Replaced typo mistake in subversion support.
diff --git a/news/4954.feature b/news/4954.feature
deleted file mode 100644
index 4d8104473..000000000
--- a/news/4954.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add auto completion of short options.
diff --git a/news/4966.bugfix b/news/4966.bugfix
deleted file mode 100644
index 93df64c67..000000000
--- a/news/4966.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Terminal size is now correctly inferred when using Python 3 on Windows.
diff --git a/news/4974.trivial b/news/4974.trivial
deleted file mode 100644
index d2ab9aca7..000000000
--- a/news/4974.trivial
+++ /dev/null
@@ -1 +0,0 @@
-Fix the mismatched parameter name in ``get_installed_distributions()``.
diff --git a/news/4976.bugfix b/news/4976.bugfix
deleted file mode 100644
index fdb778224..000000000
--- a/news/4976.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Abort if reading configuration causes encoding errors.
diff --git a/news/4982.bugfix b/news/4982.bugfix
deleted file mode 100644
index 14cc85335..000000000
--- a/news/4982.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Interactive setup.py files will no longer hang indefinitely.
diff --git a/news/4999.feature b/news/4999.feature
deleted file mode 100644
index 900189e68..000000000
--- a/news/4999.feature
+++ /dev/null
@@ -1 +0,0 @@
-Run 'setup.py develop' inside pep518 build environment. \ No newline at end of file
diff --git a/news/5000.feature b/news/5000.feature
deleted file mode 100644
index 5c6b43b9e..000000000
--- a/news/5000.feature
+++ /dev/null
@@ -1 +0,0 @@
-pip install now prints an error message when it installs an incompatible version of a dependency.
diff --git a/news/5085.bugfix b/news/5085.bugfix
deleted file mode 100644
index 831cb63b4..000000000
--- a/news/5085.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Add a ``--no-user`` option and use it when installing build dependencies. \ No newline at end of file
diff --git a/news/5FA59779-9C0C-4689-B2DD-5991758C23DC.trivial b/news/5FA59779-9C0C-4689-B2DD-5991758C23DC.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/5FA59779-9C0C-4689-B2DD-5991758C23DC.trivial
+++ /dev/null
diff --git a/news/6f543464-7772-44c9-97c6-44511ba639c8.trivial b/news/6f543464-7772-44c9-97c6-44511ba639c8.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/6f543464-7772-44c9-97c6-44511ba639c8.trivial
+++ /dev/null
diff --git a/news/949.feature b/news/949.feature
deleted file mode 100644
index e33819b88..000000000
--- a/news/949.feature
+++ /dev/null
@@ -1,3 +0,0 @@
-Added a way to distinguish between pip installed packages and those from
-the system package manager in 'pip list'. Specifically, 'pip list -v' also
-shows the installer of package if it has that meta data.
diff --git a/news/979.feature b/news/979.feature
deleted file mode 100644
index 825340daf..000000000
--- a/news/979.feature
+++ /dev/null
@@ -1 +0,0 @@
-Show install locations when list command ran with "-v" option.
diff --git a/news/DEADBEEF.trivial b/news/DEADBEEF.trivial
deleted file mode 100644
index 8b1378917..000000000
--- a/news/DEADBEEF.trivial
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/news/F685738A-03B5-4092-B70B-EE36CECFB2D8.trivial b/news/F685738A-03B5-4092-B70B-EE36CECFB2D8.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/F685738A-03B5-4092-B70B-EE36CECFB2D8.trivial
+++ /dev/null
diff --git a/news/FEE41119-80BF-49CB-B395-E71791996811.trivial b/news/FEE41119-80BF-49CB-B395-E71791996811.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/FEE41119-80BF-49CB-B395-E71791996811.trivial
+++ /dev/null
diff --git a/news/FEE41119-80BF-49CB-B395-E71791996868.trivial b/news/FEE41119-80BF-49CB-B395-E71791996868.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/FEE41119-80BF-49CB-B395-E71791996868.trivial
+++ /dev/null
diff --git a/news/FEE41119-80BF-49CB-B395-E71791996869.trivial b/news/FEE41119-80BF-49CB-B395-E71791996869.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/FEE41119-80BF-49CB-B395-E71791996869.trivial
+++ /dev/null
diff --git a/news/a954b207-e297-469f-9ab3-0ad26d7b9c9b.trivial b/news/a954b207-e297-469f-9ab3-0ad26d7b9c9b.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/a954b207-e297-469f-9ab3-0ad26d7b9c9b.trivial
+++ /dev/null
diff --git a/news/appdirs.vendor b/news/appdirs.vendor
deleted file mode 100644
index 1f00f24d0..000000000
--- a/news/appdirs.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded appdirs to 1.4.3.
diff --git a/news/bc8c3a60-bf80-4c07-9cce-96cb6735d8cb.trivial b/news/bc8c3a60-bf80-4c07-9cce-96cb6735d8cb.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/bc8c3a60-bf80-4c07-9cce-96cb6735d8cb.trivial
+++ /dev/null
diff --git a/news/cachecontrol.vendor b/news/cachecontrol.vendor
deleted file mode 100644
index da94e5a29..000000000
--- a/news/cachecontrol.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded CacheControl to 0.12.3.
diff --git a/news/certifi.vendor b/news/certifi.vendor
deleted file mode 100644
index 5eab2915c..000000000
--- a/news/certifi.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Vendored certifi at 2017.7.27.1.
diff --git a/news/chardet.vendor b/news/chardet.vendor
deleted file mode 100644
index a80ad3610..000000000
--- a/news/chardet.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Vendored chardet at 3.0.4.
diff --git a/news/colorama.vendor b/news/colorama.vendor
deleted file mode 100644
index 2ab30093c..000000000
--- a/news/colorama.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded colorama to 0.3.9.
diff --git a/news/ddb4555b-1a7d-41ef-960c-694007acb442.trivial b/news/ddb4555b-1a7d-41ef-960c-694007acb442.trivial
deleted file mode 100644
index e69de29bb..000000000
--- a/news/ddb4555b-1a7d-41ef-960c-694007acb442.trivial
+++ /dev/null
diff --git a/news/distlib.vendor b/news/distlib.vendor
deleted file mode 100644
index 964856417..000000000
--- a/news/distlib.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded distlib to 0.2.6.
diff --git a/news/distro.vendor b/news/distro.vendor
deleted file mode 100644
index 114ffabea..000000000
--- a/news/distro.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded distro to 1.2.0.
diff --git a/news/idna.vendor b/news/idna.vendor
deleted file mode 100644
index b5b04887c..000000000
--- a/news/idna.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Vendored idna at idna==2.6.
diff --git a/news/ipaddress.vendor b/news/ipaddress.vendor
deleted file mode 100644
index 4fd378105..000000000
--- a/news/ipaddress.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded ipaddress to 1.0.18.
diff --git a/news/msgpack-python.vendor b/news/msgpack-python.vendor
deleted file mode 100644
index 0c8f885a9..000000000
--- a/news/msgpack-python.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Vendored msgpack-python at 0.4.8.
diff --git a/news/ordereddict.vendor b/news/ordereddict.vendor
deleted file mode 100644
index afdff1a87..000000000
--- a/news/ordereddict.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Removed the vendored ordereddict.
diff --git a/news/progress.vendor b/news/progress.vendor
deleted file mode 100644
index 0a6f6a200..000000000
--- a/news/progress.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded progress to 1.3.
diff --git a/news/pyparsing.vendor b/news/pyparsing.vendor
deleted file mode 100644
index c1c74f81b..000000000
--- a/news/pyparsing.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded pyparsing to 2.2.0.
diff --git a/news/pytoml.vendor b/news/pytoml.vendor
deleted file mode 100644
index 55034f350..000000000
--- a/news/pytoml.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded pytoml to 0.1.14.
diff --git a/news/requests.vendor b/news/requests.vendor
deleted file mode 100644
index 3209f18fe..000000000
--- a/news/requests.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded requests to 2.18.4.
diff --git a/news/setuptools.vendor b/news/setuptools.vendor
deleted file mode 100644
index 482b819a5..000000000
--- a/news/setuptools.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded pkg_resources (via setuptools) to 36.6.0.
diff --git a/news/six.vendor b/news/six.vendor
deleted file mode 100644
index a81b8d628..000000000
--- a/news/six.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded six to 1.11.0.
diff --git a/news/urllib3.vendor b/news/urllib3.vendor
deleted file mode 100644
index c09cd28b5..000000000
--- a/news/urllib3.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Vendored urllib3 at 1.22.
diff --git a/news/webencodings.vendor b/news/webencodings.vendor
deleted file mode 100644
index 8a6a42386..000000000
--- a/news/webencodings.vendor
+++ /dev/null
@@ -1 +0,0 @@
-Upgraded webencodings to 0.5.1.
diff --git a/pyproject.toml b/pyproject.toml
index 8d94f6bea..bd03c6404 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,6 +3,7 @@ requires = ["setuptools", "wheel"]
[tool.towncrier]
package = "pip"
+package_dir = "src"
filename = "NEWS.rst"
directory = "news/"
title_format = """
diff --git a/src/pip/__init__.py b/src/pip/__init__.py
index 9a9fd0a05..9158871f9 100644
--- a/src/pip/__init__.py
+++ b/src/pip/__init__.py
@@ -1 +1 @@
-__version__ = "10.0.0.dev0"
+__version__ = "10.0.0"
diff --git a/src/pip/_internal/build_env.py b/src/pip/_internal/build_env.py
index 04e1861eb..791d73465 100644
--- a/src/pip/_internal/build_env.py
+++ b/src/pip/_internal/build_env.py
@@ -2,6 +2,7 @@
"""
import os
+from distutils.sysconfig import get_python_lib
from sysconfig import get_paths
from pip._internal.utils.temp_dir import TempDirectory
@@ -38,11 +39,14 @@ class BuildEnvironment(object):
else:
os.environ['PATH'] = scripts + os.pathsep + os.defpath
- if install_dirs['purelib'] == install_dirs['platlib']:
- lib_dirs = install_dirs['purelib']
+ # Note: prefer distutils' sysconfig to get the
+ # library paths so PyPy is correctly supported.
+ purelib = get_python_lib(plat_specific=0, prefix=self.path)
+ platlib = get_python_lib(plat_specific=1, prefix=self.path)
+ if purelib == platlib:
+ lib_dirs = purelib
else:
- lib_dirs = install_dirs['purelib'] + os.pathsep + \
- install_dirs['platlib']
+ lib_dirs = purelib + os.pathsep + platlib
if self.save_pythonpath:
os.environ['PYTHONPATH'] = lib_dirs + os.pathsep + \
self.save_pythonpath
diff --git a/src/pip/_internal/commands/install.py b/src/pip/_internal/commands/install.py
index 62b59715c..f28c6ea5a 100644
--- a/src/pip/_internal/commands/install.py
+++ b/src/pip/_internal/commands/install.py
@@ -124,7 +124,7 @@ class InstallCommand(RequirementCommand):
default='only-if-needed',
choices=['only-if-needed', 'eager'],
help='Determines how dependency upgrading should be handled '
- '(default: %(default)s). '
+ '[default: %default]. '
'"eager" - dependencies are upgraded regardless of '
'whether the currently installed version satisfies the '
'requirements of the upgraded package(s). '
@@ -317,6 +317,12 @@ class InstallCommand(RequirementCommand):
if should_warn_about_conflicts:
self._warn_about_conflicts(to_install)
+ # Don't warn about script install locations if
+ # --target has been specified
+ warn_script_location = options.warn_script_location
+ if options.target_dir:
+ warn_script_location = False
+
installed = install_given_reqs(
to_install,
install_options,
@@ -325,7 +331,7 @@ class InstallCommand(RequirementCommand):
home=target_temp_dir.path,
prefix=options.prefix_path,
pycompile=options.compile,
- warn_script_location=options.warn_script_location,
+ warn_script_location=warn_script_location,
use_user_site=options.use_user_site,
)
diff --git a/src/pip/_internal/commands/wheel.py b/src/pip/_internal/commands/wheel.py
index 8a85d8730..ac55f91e6 100644
--- a/src/pip/_internal/commands/wheel.py
+++ b/src/pip/_internal/commands/wheel.py
@@ -11,7 +11,6 @@ from pip._internal.exceptions import CommandError, PreviousBuildDirError
from pip._internal.operations.prepare import RequirementPreparer
from pip._internal.req import RequirementSet
from pip._internal.resolve import Resolver
-from pip._internal.utils.misc import import_or_raise
from pip._internal.utils.temp_dir import TempDirectory
from pip._internal.wheel import WheelBuilder
@@ -102,28 +101,7 @@ class WheelCommand(RequirementCommand):
self.parser.insert_option_group(0, index_opts)
self.parser.insert_option_group(0, cmd_opts)
- def check_required_packages(self):
- import_or_raise(
- 'wheel.bdist_wheel',
- CommandError,
- "'pip wheel' requires the 'wheel' package. To fix this, run: "
- "pip install wheel"
- )
-
- need_setuptools_message = (
- "'pip wheel' requires setuptools >= 0.8 for dist-info support. "
- "To fix this, run: pip install --upgrade setuptools>=0.8"
- )
- pkg_resources = import_or_raise(
- 'pkg_resources',
- CommandError,
- need_setuptools_message
- )
- if not hasattr(pkg_resources, 'DistInfoDistribution'):
- raise CommandError(need_setuptools_message)
-
def run(self, options, args):
- self.check_required_packages()
cmdoptions.check_install_build_global(options)
index_urls = [options.index_url] + options.extra_index_urls
diff --git a/src/pip/_internal/compat.py b/src/pip/_internal/compat.py
index c71f5e66f..4aefd58cd 100644
--- a/src/pip/_internal/compat.py
+++ b/src/pip/_internal/compat.py
@@ -213,9 +213,9 @@ else:
import fcntl
import termios
import struct
- cr = struct.unpack(
+ cr = struct.unpack_from(
'hh',
- fcntl.ioctl(fd, termios.TIOCGWINSZ, '1234')
+ fcntl.ioctl(fd, termios.TIOCGWINSZ, '12345678')
)
except:
return None
diff --git a/src/pip/_internal/operations/check.py b/src/pip/_internal/operations/check.py
index 91a329850..b1ad5b607 100644
--- a/src/pip/_internal/operations/check.py
+++ b/src/pip/_internal/operations/check.py
@@ -30,6 +30,9 @@ def create_package_set_from_installed(**kwargs):
# type: (**Any) -> PackageSet
"""Converts a list of distributions into a PackageSet.
"""
+ # Default to using all packages installed on the system
+ if kwargs == {}:
+ kwargs = {"local_only": False, "skip": ()}
retval = {}
for dist in get_installed_distributions(**kwargs):
name = canonicalize_name(dist.project_name)
@@ -63,7 +66,7 @@ def check_package_set(package_set):
# Check if there's a conflict
version = package_set[name].version # type: str
- if version not in req.specifier:
+ if not req.specifier.contains(version, prereleases=True):
conflicting_deps.add((name, version, req))
def str_key(x):
@@ -99,4 +102,5 @@ def _simulate_installation_of(to_install, state):
# Modify it as installing requirement_set would (assuming no errors)
for inst_req in to_install:
dist = make_abstract_dist(inst_req).dist(finder=None)
- state[dist.key] = PackageDetails(dist.version, dist.requires())
+ name = canonicalize_name(dist.key)
+ state[name] = PackageDetails(dist.version, dist.requires())
diff --git a/src/pip/_internal/operations/prepare.py b/src/pip/_internal/operations/prepare.py
index 2c4ff94cb..7d1297ea0 100644
--- a/src/pip/_internal/operations/prepare.py
+++ b/src/pip/_internal/operations/prepare.py
@@ -126,25 +126,31 @@ class IsSDist(DistAbstraction):
build_requirements, isolate = self.req.get_pep_518_info()
should_isolate = build_isolation and isolate
- if 'setuptools' not in build_requirements:
+ minimum_requirements = ('setuptools', 'wheel')
+ missing_requirements = set(minimum_requirements) - set(
+ pkg_resources.Requirement(r).key
+ for r in build_requirements
+ )
+ if missing_requirements:
+ def format_reqs(rs):
+ return ' and '.join(map(repr, sorted(rs)))
logger.warning(
- "%s does not include 'setuptools' as a buildtime requirement "
- "in its pyproject.toml.", self.req.name,
+ "Missing build time requirements in pyproject.toml for %s: "
+ "%s.", self.req, format_reqs(missing_requirements)
)
logger.warning(
"This version of pip does not implement PEP 517 so it cannot "
- "build a wheel without setuptools."
+ "build a wheel without %s.", format_reqs(minimum_requirements)
)
- if not should_isolate:
- self.req.build_env = NoOpBuildEnvironment(no_clean=False)
-
- with self.req.build_env as prefix:
- if should_isolate:
+ if should_isolate:
+ with self.req.build_env as prefix:
_install_build_reqs(finder, prefix, build_requirements)
+ else:
+ self.req.build_env = NoOpBuildEnvironment(no_clean=False)
- self.req.run_egg_info()
- self.req.assert_source_matches_version()
+ self.req.run_egg_info()
+ self.req.assert_source_matches_version()
class Installed(DistAbstraction):
diff --git a/src/pip/_internal/req/req_install.py b/src/pip/_internal/req/req_install.py
index 04bb3fd65..ddd167c66 100644
--- a/src/pip/_internal/req/req_install.py
+++ b/src/pip/_internal/req/req_install.py
@@ -413,24 +413,6 @@ class InstallRequirement(object):
@property
def setup_py(self):
assert self.source_dir, "No source dir for %s" % self
- cmd = [sys.executable, '-c', 'import setuptools']
- output = call_subprocess(
- cmd,
- show_stdout=False,
- command_desc='python -c "import setuptools"',
- on_returncode='ignore',
- )
-
- if output:
- if get_installed_version('setuptools') is None:
- add_msg = "Please install setuptools."
- else:
- add_msg = output
- # Setuptools is not available
- raise InstallationError(
- "Could not import setuptools which is required to "
- "install from a source distribution.\n%s" % add_msg
- )
setup_py = os.path.join(self.setup_py_dir, 'setup.py')
@@ -496,11 +478,12 @@ class InstallRequirement(object):
egg_info_dir = os.path.join(self.setup_py_dir, 'pip-egg-info')
ensure_dir(egg_info_dir)
egg_base_option = ['--egg-base', 'pip-egg-info']
- call_subprocess(
- egg_info_cmd + egg_base_option,
- cwd=self.setup_py_dir,
- show_stdout=False,
- command_desc='python setup.py egg_info')
+ with self.build_env:
+ call_subprocess(
+ egg_info_cmd + egg_base_option,
+ cwd=self.setup_py_dir,
+ show_stdout=False,
+ command_desc='python setup.py egg_info')
if not self.req:
if isinstance(parse_version(self.pkg_info()["Version"]), Version):
@@ -788,12 +771,13 @@ class InstallRequirement(object):
msg = 'Running setup.py install for %s' % (self.name,)
with open_spinner(msg) as spinner:
with indent_log():
- call_subprocess(
- install_args + install_options,
- cwd=self.setup_py_dir,
- show_stdout=False,
- spinner=spinner,
- )
+ with self.build_env:
+ call_subprocess(
+ install_args + install_options,
+ cwd=self.setup_py_dir,
+ show_stdout=False,
+ spinner=spinner,
+ )
if not os.path.exists(record_filename):
logger.debug('Record file %s not found', record_filename)
diff --git a/src/pip/_internal/vcs/git.py b/src/pip/_internal/vcs/git.py
index 3528d8fd9..33c68068f 100644
--- a/src/pip/_internal/vcs/git.py
+++ b/src/pip/_internal/vcs/git.py
@@ -191,12 +191,16 @@ class Git(VersionControl):
# Only do a checkout if the current commit id doesn't match
# the requested revision.
if not self.is_commit_id_equal(dest, rev_options.rev):
- cmd_args = ['fetch', '-q', url] + rev_options.to_args()
- self.run_command(cmd_args, cwd=dest)
- self.run_command(
- ['checkout', '-q', 'FETCH_HEAD'],
- cwd=dest,
- )
+ rev = rev_options.rev
+ # Only fetch the revision if it's a ref
+ if rev.startswith('refs/'):
+ self.run_command(
+ ['fetch', '-q', url] + rev_options.to_args(),
+ cwd=dest,
+ )
+ # Change the revision to the SHA of the ref we fetched
+ rev = 'FETCH_HEAD'
+ self.run_command(['checkout', '-q', rev], cwd=dest)
#: repo may contain submodules
self.update_submodules(dest)
diff --git a/src/pip/_internal/wheel.py b/src/pip/_internal/wheel.py
index 7118558a5..170e2bdc5 100644
--- a/src/pip/_internal/wheel.py
+++ b/src/pip/_internal/wheel.py
@@ -162,11 +162,16 @@ def message_about_scripts_not_on_PATH(scripts):
script_name = os.path.basename(destfile)
grouped_by_dir[parent_dir].add(script_name)
- path_env_var_parts = os.environ["PATH"].split(os.pathsep)
- # Warn only for directories that are not on PATH
+ # We don't want to warn for directories that are on PATH.
+ not_warn_dirs = [
+ os.path.normcase(i) for i in os.environ["PATH"].split(os.pathsep)
+ ]
+ # If an executable sits with sys.executable, we don't warn for it.
+ # This covers the case of venv invocations without activating the venv.
+ not_warn_dirs.append(os.path.normcase(os.path.dirname(sys.executable)))
warn_for = {
parent_dir: scripts for parent_dir, scripts in grouped_by_dir.items()
- if parent_dir not in path_env_var_parts
+ if os.path.normcase(parent_dir) not in not_warn_dirs
}
if not warn_for:
return None
@@ -703,7 +708,6 @@ class WheelBuilder(object):
buildset = []
for req in requirements:
- ephem_cache = False
if req.constraint:
continue
if req.is_wheel:
@@ -715,10 +719,11 @@ class WheelBuilder(object):
pass
elif autobuilding and req.link and not req.link.is_artifact:
# VCS checkout. Build wheel just for this run.
- ephem_cache = True
+ buildset.append((req, True))
elif autobuilding and not req.source_dir:
pass
else:
+ ephem_cache = False
if autobuilding:
link = req.link
base, ext = link.splitext()
diff --git a/tasks/generate.py b/tasks/generate.py
index acb9c610f..8e4645854 100644
--- a/tasks/generate.py
+++ b/tasks/generate.py
@@ -9,7 +9,8 @@ def authors(ctx):
# Get our list of authors
print("[generate.authors] Collecting author names")
- r = ctx.run("git log --use-mailmap --format'=%aN <%aE>'", hide=True)
+ r = ctx.run('git log --use-mailmap --format"=%aN <%aE>"',
+ encoding="utf-8", hide=True)
authors = []
seen_authors = set()
for author in r.stdout.splitlines():
diff --git a/tests/functional/test_check.py b/tests/functional/test_check.py
index ade108067..e0c65d0e7 100644
--- a/tests/functional/test_check.py
+++ b/tests/functional/test_check.py
@@ -193,3 +193,32 @@ def test_check_considers_conditional_reqs(script):
)
assert matches_expected_lines(result.stdout, expected_lines)
assert result.returncode == 1
+
+
+def test_check_development_versions_are_also_considered(script):
+ # Setup pkga depending on pkgb>=1.0
+ pkga_path = create_test_package_with_setup(
+ script,
+ name='pkga', version='1.0', install_requires=['depend>=1.0'],
+ )
+ # Let's install pkga without its dependency
+ res = script.pip('install', '--no-index', pkga_path, '--no-deps')
+ assert "Successfully installed pkga-1.0" in res.stdout, str(res)
+
+ # Setup depend==1.1.0.dev0
+ depend_path = create_test_package_with_setup(
+ script,
+ name='depend', version='1.1.0.dev0',
+ )
+ # Let's install depend==1.1.0.dev0
+ res = script.pip(
+ 'install', '--no-index', depend_path, '--no-warn-conflicts',
+ )
+ assert "Successfully installed depend-1.1.0.dev0" in res.stdout, str(res)
+
+ result = script.pip('check')
+ expected_lines = (
+ "No broken requirements found.",
+ )
+ assert matches_expected_lines(result.stdout, expected_lines)
+ assert result.returncode == 0
diff --git a/tests/functional/test_install.py b/tests/functional/test_install.py
index 87db792d0..dc875d67b 100644
--- a/tests/functional/test_install.py
+++ b/tests/functional/test_install.py
@@ -19,48 +19,30 @@ from tests.lib.local_repos import local_checkout
from tests.lib.path import Path
-def test_without_setuptools(script, data):
- script.pip("uninstall", "setuptools", "-y")
- result = script.run(
- "python", "-c",
- "import pip._internal; pip._internal.main(["
- "'install', "
- "'INITools==0.2', "
- "'-f', '%s', "
- "'--no-binary=:all:'])" % data.packages,
- expect_error=True,
- )
- assert (
- "Could not import setuptools which is required to install from a "
- "source distribution."
- in result.stderr
- )
- assert "Please install setuptools" in result.stderr
-
-
-def test_with_setuptools_and_import_error(script, data):
- # Make sure we get an ImportError while importing setuptools
- setuptools_init_path = script.site_packages_path.join(
- "setuptools", "__init__.py")
- with open(setuptools_init_path, 'a') as f:
- f.write('\nraise ImportError("toto")')
-
- result = script.run(
- "python", "-c",
- "import pip._internal; pip._internal.main(["
- "'install', "
- "'INITools==0.2', "
- "'-f', '%s', "
- "'--no-binary=:all:'])" % data.packages,
- expect_error=True,
- )
- assert (
- "Could not import setuptools which is required to install from a "
- "source distribution."
- in result.stderr
- )
- assert "Traceback " in result.stderr
- assert "ImportError: toto" in result.stderr
+@pytest.mark.parametrize('original_setuptools', ('missing', 'bad'))
+def test_pep518_uses_build_env(script, data, original_setuptools):
+ if original_setuptools == 'missing':
+ script.pip("uninstall", "-y", "setuptools")
+ elif original_setuptools == 'bad':
+ setuptools_init_path = script.site_packages_path.join(
+ "setuptools", "__init__.py")
+ with open(setuptools_init_path, 'a') as f:
+ f.write('\nraise ImportError("toto")')
+ else:
+ raise ValueError(original_setuptools)
+ to_install = data.src.join("pep518-3.0")
+ for command in ('install', 'wheel'):
+ kwargs = {}
+ if sys.version_info[:2] == (3, 3):
+ # Ignore Python 3.3 deprecation warning...
+ kwargs['expect_stderr'] = True
+ script.run(
+ "python", "-c",
+ "import pip._internal; pip._internal.main(["
+ "%r, " "'-f', %r, " "%r, "
+ "])" % (command, str(data.packages), str(to_install)),
+ **kwargs
+ )
@pytest.mark.network
@@ -622,6 +604,37 @@ def test_install_package_with_target(script):
assert singlemodule_py in result.files_updated, str(result)
+def test_install_with_target_and_scripts_no_warning(script, common_wheels):
+ """
+ Test that installing with --target does not trigger the "script not
+ in PATH" warning (issue #5201)
+ """
+ # We need to have wheel installed so that the project builds via a wheel,
+ # which is the only execution path that has the script warning.
+ script.pip('install', 'wheel', '--no-index', '-f', common_wheels)
+ target_dir = script.scratch_path / 'target'
+ pkga_path = script.scratch_path / 'pkga'
+ pkga_path.mkdir()
+ pkga_path.join("setup.py").write(textwrap.dedent("""
+ from setuptools import setup
+ setup(name='pkga',
+ version='0.1',
+ py_modules=["pkga"],
+ entry_points={
+ 'console_scripts': ['pkga=pkga:main']
+ }
+ )
+ """))
+ pkga_path.join("pkga.py").write(textwrap.dedent("""
+ def main(): pass
+ """))
+ result = script.pip('install', '--target', target_dir, pkga_path)
+ # This assertion isn't actually needed, if we get the script warning
+ # the script.pip() call will fail with "stderr not expected". But we
+ # leave the assertion to make the intention of the code clearer.
+ assert "--no-warn-script-location" not in result.stderr, str(result)
+
+
def test_install_package_with_root(script, data):
"""
Test installing a package using pip install --root
diff --git a/tests/functional/test_install_check.py b/tests/functional/test_install_check.py
new file mode 100644
index 000000000..2259ce768
--- /dev/null
+++ b/tests/functional/test_install_check.py
@@ -0,0 +1,59 @@
+from tests.lib import create_test_package_with_setup
+
+
+def matches_expected_lines(string, expected_lines):
+ def predicate(line):
+ return line and not line.startswith('DEPRECATION')
+
+ output_lines = set(filter(predicate, string.splitlines()))
+ # Match regardless of order
+ return set(output_lines) == set(expected_lines)
+
+
+def test_check_install_warnings(script):
+ pkga_path = create_test_package_with_setup(
+ script,
+ name='pkga',
+ version='1.0',
+ install_requires=['normal-missing', 'special.missing'],
+ )
+ # Let's install pkga without its dependency
+ result = script.pip('install', '--no-index', pkga_path, '--no-deps')
+ assert "Successfully installed pkga-1.0" in result.stdout, str(result)
+
+ # Install the first missing dependency. Only an error for the
+ # second dependency should remain.
+ normal_path = create_test_package_with_setup(
+ script,
+ name='normal-missing', version='0.1',
+ )
+ result = script.pip(
+ 'install', '--no-index', normal_path, '--quiet', expect_error=True
+ )
+ expected_lines = (
+ "pkga 1.0 requires special.missing, which is not installed.",
+ )
+ assert matches_expected_lines(result.stderr, expected_lines)
+ assert result.returncode == 0
+
+ # Install the second missing package and expect that there is no warning
+ # during the installation. This is special as the package name requires
+ # name normalization (as in https://github.com/pypa/pip/issues/5134)
+ missing_path = create_test_package_with_setup(
+ script,
+ name='special.missing', version='0.1',
+ )
+ result = script.pip(
+ 'install', '--no-index', missing_path, '--quiet',
+ )
+ assert matches_expected_lines(result.stdout, [])
+ assert matches_expected_lines(result.stderr, [])
+ assert result.returncode == 0
+
+ # Double check that all errors are resolved in the end
+ result = script.pip('check')
+ expected_lines = (
+ "No broken requirements found.",
+ )
+ assert matches_expected_lines(result.stdout, expected_lines)
+ assert result.returncode == 0
diff --git a/tests/functional/test_install_vcs.py b/tests/functional/test_install_vcs.py
index 9b3c4a1dd..ab0d154fa 100644
--- a/tests/functional/test_install_vcs.py
+++ b/tests/functional/test_install_vcs.py
@@ -116,6 +116,27 @@ def test_git_with_sha1_revisions(script):
@pytest.mark.network
+def test_git_with_short_sha1_revisions(script):
+ """
+ Git backend should be able to install from SHA1 revisions
+ """
+ version_pkg_path = _create_test_package(script)
+ _change_test_package_version(script, version_pkg_path)
+ sha1 = script.run(
+ 'git', 'rev-parse', 'HEAD~1',
+ cwd=version_pkg_path,
+ ).stdout.strip()[:7]
+ script.pip(
+ 'install', '-e',
+ '%s@%s#egg=version_pkg' %
+ ('git+file://' + version_pkg_path.abspath.replace('\\', '/'), sha1),
+ expect_stderr=True
+ )
+ version = script.run('version_pkg')
+ assert '0.1' in version.stdout, version.stdout
+
+
+@pytest.mark.network
def test_git_with_branch_name_as_revision(script):
"""
Git backend should be able to install from branch names
diff --git a/tests/functional/test_wheel.py b/tests/functional/test_wheel.py
index b83702599..68772f378 100644
--- a/tests/functional/test_wheel.py
+++ b/tests/functional/test_wheel.py
@@ -9,17 +9,6 @@ from pip._internal.status_codes import ERROR, PREVIOUS_BUILD_DIR_ERROR
from tests.lib import pyversion
-def test_basic_pip_wheel_fails_without_wheel(script, data):
- """
- Test 'pip wheel' fails without wheel
- """
- result = script.pip(
- 'wheel', '--no-index', '-f', data.find_links, 'simple==3.0',
- expect_error=True,
- )
- assert "'pip wheel' requires the 'wheel' package" in result.stderr
-
-
def test_wheel_exit_status_code_when_no_requirements(script, common_wheels):
"""
Test wheel exit status code when no requirements specified
diff --git a/tests/lib/test_lib.py b/tests/lib/test_lib.py
index 239190ed4..a8ed3c9cd 100644
--- a/tests/lib/test_lib.py
+++ b/tests/lib/test_lib.py
@@ -31,7 +31,7 @@ def test_correct_pip_version(script):
# compare the directory tree of the invoked pip with that of this source
# distribution
pip_folder_outputed = re.match(
- r'pip \d+(\.[\d]+)+(\.?(rc|dev|pre|post)\d+)? from (.*) '
+ r'pip \d+(\.[\d]+)+(\.?(b|rc|dev|pre|post)\d+)? from (.*) '
r'\(python \d(.[\d])+\)$',
result.stdout
).group(4)
diff --git a/tests/unit/test_check.py b/tests/unit/test_check.py
new file mode 100644
index 000000000..4dc893ada
--- /dev/null
+++ b/tests/unit/test_check.py
@@ -0,0 +1,25 @@
+"""Unit Tests for pip's dependency checking logic
+"""
+
+import mock
+from pip._internal.operations import check
+
+
+class TestInstalledDistributionsCall(object):
+
+ def test_passes_correct_default_kwargs(self, monkeypatch):
+ my_mock = mock.MagicMock(return_value=[])
+ monkeypatch.setattr(check, "get_installed_distributions", my_mock)
+
+ check.create_package_set_from_installed()
+
+ my_mock.assert_called_with(local_only=False, skip=())
+
+ def test_passes_any_given_kwargs(self, monkeypatch):
+ my_mock = mock.MagicMock(return_value=[])
+ monkeypatch.setattr(check, "get_installed_distributions", my_mock)
+
+ obj = object()
+ check.create_package_set_from_installed(hi=obj)
+
+ my_mock.assert_called_with(hi=obj)
diff --git a/tests/unit/test_wheel.py b/tests/unit/test_wheel.py
index f1ee8e332..9b029eedb 100644
--- a/tests/unit/test_wheel.py
+++ b/tests/unit/test_wheel.py
@@ -453,3 +453,13 @@ class TestMessageAboutScriptsNotOnPATH(object):
scripts=['/a/b/foo']
)
assert retval is None
+
+ def test_PATH_check_case_insensitive_on_windows(self):
+ retval = self._template(
+ paths=['C:\\A\\b'],
+ scripts=['c:\\a\\b\\c', 'C:/A/b/d']
+ )
+ if WINDOWS:
+ assert retval is None
+ else:
+ assert retval is not None