diff options
author | Paul Moore <p.f.moore@gmail.com> | 2018-04-14 12:17:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-14 12:17:14 +0100 |
commit | 28f3ce6fe2144c213d253e4d0a27ad4334611419 (patch) | |
tree | 15b5c382ad21f8560c09cc4e431b4621d19b641e | |
parent | 0007825733aa862e76a66e5d1cfee121c29192ff (diff) | |
parent | 4cbdd171c3d6f9c7bacf789cc2c72348240a06bb (diff) | |
download | pip-28f3ce6fe2144c213d253e4d0a27ad4334611419.tar.gz |
Merge pull request #5218 from pypa/release/10.0.010.0.0
Release 10.0.0
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 @@ -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> @@ -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 |