New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PEP 517 implementation #5743

Merged
merged 30 commits into from Nov 15, 2018

Conversation

Projects
None yet
7 participants
@pfmoore
Copy link
Member

pfmoore commented Aug 28, 2018

Actual implementation of PEP 517 functionality. This is not complete yet. Notes of outstanding actions:

  • Write tests for the new functionality (currently working on getting the existing tests working, to ensure no regressions).
  • Implement the --(no-)use-pep517 flag.
  • Move the patch to the vendored pep517 package back to the package itself.
  • Work out what to do about tests that depend on details of setuptools output.
  • Review remaining places where hook calls might be needed.
  • Documentation.
  • Implement --python-tag support.
  • Design review.

Probably others...

@pfmoore pfmoore force-pushed the pfmoore:pep517 branch from b4ce997 to 7f77eb5 Aug 28, 2018

@pfmoore pfmoore requested a review from pradyunsg Aug 28, 2018

@pfmoore pfmoore self-assigned this Aug 28, 2018

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Aug 28, 2018

One immediate question - can anyone explain what test_pep518_with_user_pip in tests/functional/test_install.py is trying to check? As far as I can see, it's attempting to prove that if we run a copy of pip that was installed as --user, then we get that copy of pip. It's not actually related to PEP 518 in any way that I can see. The problem I have is that it's failing because when it installs pip to user-site, setuptools is (now) generating warnings that were apparently not being generated before (or were being suppressed).

There are two independent but related problems here:

  1. Relying on setuptools' precise output is fragile (and arguably wrong in a PEP 517 world). We're changing our processing so that we call setuptools via its PEP 517 backend, and if as a result setuptools writes different output, then why is that our concern (as long as pip still does its job)?
  2. Stuff going on when pip gets installed as --user is incidental to the actual point of the test (whatever that point is).

I'd like to remove this test, as it's not clear that it has a useful purpose. Failing that, I'd like to ignore the behaviour change in the pip install --user pip_src command (specifically, by setting expect_stderr=True for that call).

@pfmoore pfmoore force-pushed the pfmoore:pep517 branch from 7f77eb5 to 8e75583 Aug 28, 2018

@benoit-pierre

This comment has been minimized.

Copy link
Member

benoit-pierre commented Aug 28, 2018

The goal of test_pep518_with_user_pip is to ensure that PEP 518 support works if pip is installed in the user' site: previously this would fail because build isolation was used when running the command to install the build requirement themselves.

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Aug 28, 2018

previously this would fail because build isolation was used when running the command to install the build requirement themselves

Ah, OK. But presumably the requirement in the test is not to install pip in user-site, but rather

  1. The site-packages pip (which is what the build isolation environment will see by default) is broken.
  2. The user's default environment contains a working pip.

So we don't really care about the details of the install of pip to user-site, other than the fact that it worked? In actual fact, we could probably just set PYTHONPATH to pip's source directory and not do an install at all (although I guess that's fragile in its own way!)

Thanks. I'll add some notes to the test explaining what it's doing, and set expect_stderr=True in the install of pip with a note that we don't so much expect stderr output, as not care whether there is any or not...

@benoit-pierre

This comment has been minimized.

Copy link
Member

benoit-pierre commented Aug 28, 2018

Your latest commit does more than fix test_pep518_with_user_pip.

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Aug 28, 2018

Your latest commit does more than fix test_pep518_with_user_pip.

I know. I intend to reorganise the commits at some point - before I made this into a PR, I was using git commit --amend extremely heavily, just to keep the history looking sane 😢 I'm unfortunately having to use CI to run the tests as they are too slow to run locally, so I'm batching up multiple fixes. I guess I could have just made the commit message "Some more test fixes" or done a commit --amend into the previous commit (that's what I've been doing previously). Would either of those been better for you?

@benoit-pierre

This comment has been minimized.

Copy link
Member

benoit-pierre commented Aug 28, 2018

The real issue with test_pep518_with_user_pip is that it highlights the fact that our build isolation is crap: system site packages should be disabled too...

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Aug 28, 2018

lol, that doesn't surprise me. For now, though, I'll just be glad to get the tests to run at all...

@pradyunsg
Copy link
Member

pradyunsg left a comment

master merges cleanly into this PR and there's cleanups related to FormatControl which should make debugging the --no-binary test failure a little easier + #5455 which makes req_install.py slightly less tedious to navigate.

Show resolved Hide resolved src/pip/_internal/req/req_install.py Outdated
return pkg_resources.Distribution(
os.path.dirname(egg_info),
"""Return a pkg_resources.Distribution for this requirement"""
if self.metadata_directory:

This comment has been minimized.

@pradyunsg

pradyunsg Sep 7, 2018

Member

Break this up into 2 separate functions that get called by this one?

This comment has been minimized.

@benoit-pierre

benoit-pierre Nov 3, 2018

Member

I think this can be simplified to:

    def get_dist(self):
        """Return a pkg_resources.Distribution for this requirement"""
        if self.metadata_directory:
            metadata_path = self.metadata_directory
        else:
            metadata_path = self.egg_info_path
        metadata_path = metadata_path.rstrip(os.path.sep)
        metadata = pkg_resources.PathMetadata(
            os.path.dirname(metadata_path), metadata_path)
        return pkg_resources.Distribution.from_filename(
            metadata_path, metadata=metadata)

This comment has been minimized.

@benoit-pierre

benoit-pierre Nov 3, 2018

Member

Or even better:

    def get_dist(self):
        """Return a pkg_resources.Distribution for this requirement"""
        if self.metadata_directory:
            metadata_path = self.metadata_directory
        else:
            metadata_path = self.egg_info_path
        metadata_path = metadata_path.rstrip(os.path.sep)
        return next(pkg_resources.distributions_from_metadata(metadata_path))

This comment has been minimized.

@pfmoore

pfmoore Nov 3, 2018

Author Member

I'm OK with this - but don't really know the pkg_resources functions well enough to judge the impact. I'll wait for @pradyunsg to do his review, and then I'm happy to just replace the existing get_dist with this one.

On the other hand, it would also be just as easy to put in what we have, and then follow up with a PR simplifying get_dist (in the interest of smaller more focused PRs being better). But as long as making the change doesn't trigger a new wave of weird CI failures, it doesn't really make much difference - this PR is already way too complicated, one more commit won't make much difference 😉

This comment has been minimized.

@pradyunsg

pradyunsg Nov 5, 2018

Member

I'm on board for making more follow up PRs for cleanups. This PR is already a little unwieldy in size and it's taken me a lot longer than I estimated to even try it out.

I've bumped existing notes just so that I don't have to scroll too high when taking a pass later to see what places we've already identified for improvements/refactors.

Show resolved Hide resolved src/pip/_internal/wheel.py Outdated
@@ -712,6 +742,8 @@ def build(self, requirements, session, autobuilding=False):
from pip._internal import index
from pip._internal.models.link import Link

# TODO: This check fails if --no-cache-dir is set. And yet we
# might be able to build into the ephemeral cache, surely?

This comment has been minimized.

@pradyunsg

pradyunsg Sep 7, 2018

Member

Hmm... If --no-cache-dir is passed, wheel_cache.cache_dir would be None (we can't use ~/.cache etc). That doesn't affect ephemeral cache which is in /tmp.

Yeah, this sounds fine to me and was an oversight on my part when I wrote this.

Show resolved Hide resolved src/pip/_internal/commands/install.py Outdated
)
# Ignore the result: a failed wheel will be
# installed from the sdist/vcs whatever.
# Consider legacy and PEP517-using requirements separately

This comment has been minimized.

@pradyunsg

pradyunsg Sep 7, 2018

Member

Considering how long this has become, could this build-the-wheels logic be moved into a method on the command?

This comment has been minimized.

@pfmoore

pfmoore Sep 7, 2018

Author Member

That's a good idea. I'm focusing on getting the tests to pass right now, but refactoring things is something that definitely needs to be done.

This comment has been minimized.

@pradyunsg

pradyunsg Nov 5, 2018

Member

Now would be a nice time to approach refactoring this.

I'm okay if you want to tackle the refactoring in a follow up; tbh I won't mind doing it myself.


metadata_dir = os.path.join(
self.setup_py_dir,
'pip-wheel-metadata'

This comment has been minimized.

@pradyunsg

pradyunsg Sep 7, 2018

Member

Having played around a bit, perhaps we should use a different name here: pip-wheel-metadata stands out... Perhaps a . at the start and perhaps even a sub-folder .pip-metadata/wheel would be a good idea?

Idk. It's a little subjective but I expect this to be something that shows up in development constantly so we should try to optimize the ergonomics here.

This comment has been minimized.

@pradyunsg

pradyunsg Sep 7, 2018

Member

Perhaps build/pip-wheel-metadata?

This comment has been minimized.

@pradyunsg

pradyunsg Nov 5, 2018

Member

I like how build/pip-wheel-metadata would look here.

@pradyunsg

This comment has been minimized.

Copy link
Member

pradyunsg commented Sep 8, 2018

error: 'egg_base' must be a directory name (got `t:\pytest-1\popen-gw0\test_pip_wheel_with_pep518_bui0\workspace\tmp\pip-wheel-faaktp\pep518\pip-wheel-metadata`)

Should pip ensure_dir before calling prepare_metadata_for_build_wheel?

@pradyunsg

This comment has been minimized.

Copy link
Member

pradyunsg commented Sep 8, 2018

This also needs to add support for config settings?

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Sep 8, 2018

Should pip ensure_dir before calling prepare_metadata_for_build_wheel?

Possibly, I'll check. Thanks for the suggestion.

This also needs to add support for config settings?

At this point I've not done anything that changes pip's UI. Adding config_settings support will require design of a command line interface to supply the values, which is something I haven't got to yet. Personally, I'd be happy enough to defer support for config_settings until after the initial implementation is released - the setuptools backend appears to have very primitive (and undocumented) support for it (a single --global-options key, which I guess is supposed to point to a list of setup.py command line arguments?).

There's also pip's --python-tag option to consider - the only place to pass it to the backend is in config_settings, but as config_settings has no standard semantics, we can't do that.

I'll open a separate issue for config settings support in PEP 517. That's probably better, as it allows this PR to progress without getting bogged down in those design questions.

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Sep 8, 2018

#5771 raised for config settings

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Sep 8, 2018

Starting to think about flit as an alternative backend. Some vague (at this point) questions I need to think about and want to keep a note of somewhere:

  • We can't copy a flit project to build it, as flit needs a VCS checkout. In-place builds? That's not part of this work.
  • Flit sdists have a setuptools shim in there, so we will never actually build a flit project from sdist (it's a setuptools project at that point). Also build-via-sdist won't use the flit backend (not that we care as such)
  • We can't easily create flit test cases, because of the VCS requirement, so probably need a dummy backend for non-setuptools testing. Probably a good thing to have, but means we never test that we work with flit. I don't really want the test suite to need git installed (outside of VCS support testing). I also don't want weird test dependencies on users' git config, or complicated stuff to isolate git...

Overall, I suspect that unless flit moves away from its current philosophy of sdists being second-class, and VCS data being key metadata (apologies to the flit project if it's my understanding that's out of date here) I don't think we can usefully treat flit as a typical example of a "non-setuptools" backend. No reason it won't work, but it'll be down to the flit project to make sure it does, pip will follow the standards and shouldn't get distracted by any quirks of flit's particular implementation.

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Sep 8, 2018

Should pip ensure_dir before calling prepare_metadata_for_build_wheel?

Possibly, I'll check. Thanks for the suggestion.

It does - see https://github.com/pypa/pip/pull/5743/files#diff-47a4ece629e4698a5eaefea075d3cbdfR509. Previously, this error has been cause by a bug in the setuptools backend, passing Unicode to a distutils API that requires a str. That's what all the fuss was about needing a new version of setuptools, and the bump in the minimum setuptools version in the code.

The problem here is I've no idea why that would be the case only on Appveyor. I'll need to look into it some more. Hopefully it's not another setuptools bug - I don't like the way this development is so tightly tied to setuptools released versions. If it is a setuptools bug, I'll probably just mark the test as xfail for now (maybe making the xfail conditional on setuptools version when a fix gets released...)

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Sep 24, 2018

Quick status update. I've not worked on this for a couple of weeks now, Real life issues have been taking up most of my time, but I do intend to get back to it as soon as I can. It's not going to be ready for the next release, which is completely fine as far as I'm concerned, but the core functionality is looking good, it's just the wealth of details that need tidying up.

@pfmoore pfmoore force-pushed the pfmoore:pep517 branch 2 times, most recently from b66e295 to 570b6a4 Oct 9, 2018

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Oct 9, 2018

Does anyone know why, in https://github.com/pypa/pip/blob/master/src/pip/_internal/cli/base_command.py#L215, we don't pass the command options object into install_req_from_line? I'm adding the --[no-]-use-pep517 option, and it seems really annoying to have to change the signature of the function just to pass a flag that's present in the options that we are in theory passing anyway.

@pradyunsg You were the last person to work on this code (although as far as I can see, all you did was move it in a refactoring). Do you know why this might be?

@pradyunsg

This comment has been minimized.

Copy link
Member

pradyunsg commented Oct 9, 2018

I don't think I'll be able to take a good look until the end of the week at this.

I'm nearing the end of the semester so all of my procrastination is showing in terms of piled up work. :)

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Oct 9, 2018

lol no worries, I'll probably just pass the options in and see if anything breaks - after all, the whole of this exercise so far has been making sure I've not introduced any regressions, so this is just more of the same. If the tests pass, I'll assume it's OK and move on.

If I get this in, I think I'll be in a position to actually start testing that the new functionality works ;-)

@pfmoore pfmoore force-pushed the pfmoore:pep517 branch from ecbc8aa to 32709e0 Oct 9, 2018

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Oct 9, 2018

Just using options broke it - so I bit the bullet and added a new argument.

@pradyunsg

This comment has been minimized.

Copy link
Member

pradyunsg commented Nov 9, 2018

Let's deal with this in a follow up. :)

@BrownTruck

This comment has been minimized.

Copy link
Contributor

BrownTruck commented Nov 11, 2018

Hello!

I am an automated bot and I have noticed that this pull request is not currently able to be merged. If you are able to either merge the master branch into this pull request or rebase this pull request against master then it will be eligible for code review and hopefully merging!

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Nov 14, 2018

OK, I believe that's all review comments addressed. @pradyunsg @benoit-pierre @cjerdonek are you aware of anything I've missed? Assuming not, I'm going to go ahead and merge this once CI has passed, and we can address any follow-up fixes that might be needed in separate PRs.

@pradyunsg

This comment has been minimized.

Copy link
Member

pradyunsg commented Nov 14, 2018

I think there might be a minor logging/code flow issue pointed out here: #5743 (comment)

None the less, it's not a blocker so it can be a follow up if you don't have the time to look into that currently.

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Nov 14, 2018

I think there might be a minor logging/code flow issue

No, you're right, I'd missed that. Fixed now, and thanks for the reminder.

@pfmoore pfmoore merged commit 3a77bd6 into pypa:master Nov 15, 2018

3 checks passed

continuous-integration/appveyor/pr AppVeyor build succeeded
Details
continuous-integration/travis-ci/pr The Travis CI build passed
Details
news-file/pr News files updated and/or change is trivial.
Details
@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Nov 15, 2018

OK, merged this. We now have PEP 517 support in pip 😄 If anyone hits any issues with this, ping me in an issue and I'll take a look.

🎉

@pradyunsg

This comment has been minimized.

Copy link
Member

pradyunsg commented Nov 15, 2018

Hurrah! Thanks for all the work on this important feature!

@cjerdonek

This comment has been minimized.

Copy link
Member

cjerdonek commented Nov 15, 2018

Excellent work, @pfmoore! Thanks for all of your patience and hard work! 🏆

@pfmoore

This comment has been minimized.

Copy link
Member Author

pfmoore commented Nov 15, 2018

And to you all for the reviews and comments - I would have burned out on this without the help and support.

After my complaints about the monolithic PR for PEP 518, I feel a bit bad that this was also such a big chunk of change to review. It would be good if we could find a better way of partitioning up big feature changes into more reviewable parts, without leaving master in an unreleasable state. I'll think about what I could have done differently, and if I have any inspirations, I'll post them somewhere :-)

@uSpike uSpike referenced this pull request Dec 4, 2018

Open

Support Poetry #4912

@pradyunsg pradyunsg added this to the 19.0 milestone Jan 3, 2019

suutari-ai pushed a commit to suutari/prequ that referenced this pull request Jan 27, 2019

Use prepare_metadata with Pip 19 instead of run_egg_info
Newer Pip [1] doesn't fill the requirement metadata anymore with the
"run_egg_info" method, but a new method named "prepare_metadata" should
be used instead.  Make the "name_from_ireq" helper function to call the
new method when it's available.

[1] pypa/pip#5743

bors bot added a commit to mozilla/normandy that referenced this pull request Feb 7, 2019

Merge #1723
1723: Scheduled weekly dependency update for week 05 r=mythmon a=pyup-bot






### Update [atomicwrites](https://pypi.org/project/atomicwrites) from **1.2.1** to **1.3.0**.


*The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)*

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/atomicwrites
  - Repo: https://github.com/untitaker/python-atomicwrites
</details>





### Update [botocore](https://pypi.org/project/botocore) from **1.12.82** to **1.12.86**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.12.86
   ```
   =======

* api-change:``devicefarm``: Update devicefarm client to latest version
* api-change:``codecommit``: Update codecommit client to latest version
* api-change:``medialive``: Update medialive client to latest version
* api-change:``mediaconnect``: Update mediaconnect client to latest version
   ```
   
  
  
   ### 1.12.85
   ```
   =======

* api-change:``logs``: Update logs client to latest version
* api-change:``elbv2``: Update elbv2 client to latest version
* api-change:``rds``: Update rds client to latest version
* api-change:``codebuild``: Update codebuild client to latest version
* api-change:``sms-voice``: Update sms-voice client to latest version
* api-change:``ecr``: Update ecr client to latest version
   ```
   
  
  
   ### 1.12.84
   ```
   =======

* api-change:``worklink``: Update worklink client to latest version
* api-change:``apigatewaymanagementapi``: Update apigatewaymanagementapi client to latest version
* api-change:``acm-pca``: Update acm-pca client to latest version
   ```
   
  
  
   ### 1.12.83
   ```
   =======

* api-change:``appstream``: Update appstream client to latest version
* api-change:``discovery``: Update discovery client to latest version
* api-change:``dms``: Update dms client to latest version
* api-change:``fms``: Update fms client to latest version
* api-change:``ssm``: Update ssm client to latest version
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/botocore
  - Changelog: https://pyup.io/changelogs/botocore/
  - Repo: https://github.com/boto/botocore
</details>





### Update [Faker](https://pypi.org/project/Faker) from **1.0.1** to **1.0.2**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.0.2
   ```
   --------------------------------------------------------------------------------------

* Fix state abbreviations for ``id_ID`` to be 2-letters. Thanks dt-ap.
* Fix format for ``city_with_postcode`` on ``de_DE`` locale. Thanks TZanke.
* Update ``person`` providers for ``zh_CN``. Thanks TimeFinger.
* Implement ``zipcode_in_state`` and aliases in ``en_US`` locale for generating
  a zipcode for a specified state. Thanks mattyg.
* Group first names by gender on ``zh_CN`` provider. Thanks TimeFinger.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/faker
  - Changelog: https://pyup.io/changelogs/faker/
  - Repo: https://github.com/joke2k/faker
</details>





### Update [pycodestyle](https://pypi.org/project/pycodestyle) from **2.4.0** to **2.5.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 2.5.0
   ```
   ------------------

New checks:

* E117: Over-indented code blocks
* W505: Maximum doc-string length only when configured with --max-doc-length

Changes:

* Remove support for EOL Python 2.6 and 3.3. PR 720.
* Add E117 error for over-indented code blocks.
* Allow W605 to be silenced by ` noqa` and fix the position reported by W605
* Allow users to omit blank lines around one-liner definitions of classes and
  functions
* Include the function return annotation (``-&gt;``) as requiring surrounding
  whitespace only on Python 3
* Verify that only names can follow ``await``. Previously we allowed numbers
  and strings.
* Add support for Python 3.7
* Fix detection of annotated argument defaults for E252
* Cprrect the position reported by W504
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pycodestyle
  - Changelog: https://pyup.io/changelogs/pycodestyle/
  - Docs: https://pycodestyle.readthedocs.io/
</details>





### Update [pyflakes](https://pypi.org/project/pyflakes) from **2.0.0** to **2.1.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 2.1.0
   ```
   - Allow intentional assignment to variables named ``_``
- Recognize ``__module__`` as a valid name in class scope
- ``pyflakes.checker.Checker`` supports checking of partial ``ast`` trees
- Detect assign-before-use for local variables which shadow builtin names
- Detect invalid ``print`` syntax using ``&gt;&gt;`` operator
- Treat ``async for`` the same as a ``for`` loop for introducing variables
- Add detection for list concatenation in ``__all__``
- Exempt ``typing.overload`` from duplicate function declaration
- Importing a submodule of an ``as``-aliased ``import``-import is marked as
  used
- Report undefined names from ``__all__`` as possibly coming from a ``*``
  import
- Add support for changes in Python 3.8-dev
- Add support for PEP 563 (``from __future__ import annotations``)
- Include Python version and platform information in ``pyflakes --version``
- Recognize ``__annotations__`` as a valid magic global in Python 3.6+
- Mark names used in PEP 484 `` type: ...`` comments as used
- Add check for use of ``is`` operator with ``str``, ``bytes``, and ``int``
  literals
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pyflakes
  - Changelog: https://pyup.io/changelogs/pyflakes/
  - Repo: https://github.com/PyCQA/pyflakes
</details>





### Update [setuptools](https://pypi.org/project/setuptools) from **40.6.3** to **40.7.3**.


<details>
  <summary>Changelog</summary>
  
  
   ### 40.7.3
   ```
   -------

* 1670: In package_index, revert to using a copy of splituser from Python 3.8. Attempts to use ``urllib.parse.urlparse`` led to problems as reported in 1663 and 1668. This change serves as an alternative to 1499 and fixes 1668.
   ```
   
  
  
   ### 40.7.2
   ```
   -------

* 1666: Restore port in URL handling in package_index.
   ```
   
  
  
   ### 40.7.1
   ```
   -------

* 1660: On Python 2, when reading config files, downcast options from text to bytes to satisfy distutils expectations.
   ```
   
  
  
   ### 40.7.0
   ```
   -------

* 1551: File inputs for the `license` field in `setup.cfg` files now explicitly raise an error.
* 1180: Add support for non-ASCII in setup.cfg (1062). Add support for native strings on some parameters (1136).
* 1499: ``setuptools.package_index`` no longer relies on the deprecated ``urllib.parse.splituser`` per Python 27485.
* 1544: Added tests for PackageIndex.download (for git URLs).
* 1625: In PEP 517 build_meta builder, ensure that sdists are built as gztar per the spec.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/setuptools
  - Changelog: https://pyup.io/changelogs/setuptools/
  - Repo: https://github.com/pypa/setuptools
</details>





### Update [cachetools](https://pypi.org/project/cachetools) from **3.0.0** to **3.1.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 3.1.0
   ```
   -------------------

- Fix Python 3.8 compatibility issue.

- Use ``time.monotonic`` as default timer if available.

- Improve documentation regarding thread safety.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/cachetools
  - Changelog: https://pyup.io/changelogs/cachetools/
  - Repo: https://github.com/tkem/cachetools
</details>





### Update [boto3](https://pypi.org/project/boto3) from **1.9.82** to **1.9.86**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.9.86
   ```
   ======

* api-change:``devicefarm``: [``botocore``] Update devicefarm client to latest version
* api-change:``codecommit``: [``botocore``] Update codecommit client to latest version
* api-change:``medialive``: [``botocore``] Update medialive client to latest version
* api-change:``mediaconnect``: [``botocore``] Update mediaconnect client to latest version
   ```
   
  
  
   ### 1.9.85
   ```
   ======

* api-change:``logs``: [``botocore``] Update logs client to latest version
* api-change:``elbv2``: [``botocore``] Update elbv2 client to latest version
* api-change:``rds``: [``botocore``] Update rds client to latest version
* api-change:``codebuild``: [``botocore``] Update codebuild client to latest version
* api-change:``sms-voice``: [``botocore``] Update sms-voice client to latest version
* api-change:``ecr``: [``botocore``] Update ecr client to latest version
   ```
   
  
  
   ### 1.9.84
   ```
   ======

* api-change:``worklink``: [``botocore``] Update worklink client to latest version
* api-change:``apigatewaymanagementapi``: [``botocore``] Update apigatewaymanagementapi client to latest version
* api-change:``acm-pca``: [``botocore``] Update acm-pca client to latest version
   ```
   
  
  
   ### 1.9.83
   ```
   ======

* api-change:``appstream``: [``botocore``] Update appstream client to latest version
* api-change:``discovery``: [``botocore``] Update discovery client to latest version
* api-change:``dms``: [``botocore``] Update dms client to latest version
* api-change:``fms``: [``botocore``] Update fms client to latest version
* api-change:``ssm``: [``botocore``] Update ssm client to latest version
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/boto3
  - Changelog: https://pyup.io/changelogs/boto3/
  - Repo: https://github.com/boto/boto3
</details>





### Update [flake8](https://pypi.org/project/flake8) from **3.6.0** to **3.7.5**.


<details>
  <summary>Changelog</summary>
  
  
   ### 3.7.5
   ```
   -------------------

You can view the `3.7.5 milestone`_ on GitLab for more details.

Bugs Fixed
~~~~~~~~~~

- Fix reporting of pyflakes &quot;referenced before assignment&quot; error (See also
  `GitLab!301`_, `GitLab503`_)


.. all links
.. _3.7.5 milestone:
    https://gitlab.com/pycqa/flake8/milestones/28

.. issue links
.. _GitLab503:
    https://gitlab.com/pycqa/flake8/issues/503

.. merge request links
.. _GitLab!301:
    https://gitlab.com/pycqa/flake8/merge_requests/301
   ```
   
  
  
   ### 3.7.4
   ```
   -------------------

You can view the `3.7.4 milestone`_ on GitLab for more details.

Bugs Fixed
~~~~~~~~~~

- Fix performance regression with lots of ``per-file-ignores`` and errors
  (See also `GitLab!299`_, `GitLab501`_)


.. all links
.. _3.7.4 milestone:
    https://gitlab.com/pycqa/flake8/milestones/27

.. issue links
.. _GitLab501:
    https://gitlab.com/pycqa/flake8/issues/501

.. merge request links
.. _GitLab!299:
    https://gitlab.com/pycqa/flake8/merge_requests/299
   ```
   
  
  
   ### 3.7.3
   ```
   -------------------

You can view the `3.7.3 milestone`_ on GitLab for more details.

Bugs Fixed
~~~~~~~~~~

- Fix imports of ``typing`` in python 3.5.0 / 3.5.1 (See also `GitLab!294`_,
  `GitLab498`_)

- Fix ``flake8 --statistics`` (See also `GitLab!295`_, `GitLab499`_)

- Gracefully ignore ``flake8-per-file-ignores`` plugin if installed (See also
  `GitLab!297`_, `GitLab495`_)

- Improve error message for malformed ``per-file-ignores`` (See also
  `GitLab!298`_, `GitLab489`_)


.. all links
.. _3.7.3 milestone:
    https://gitlab.com/pycqa/flake8/milestones/26

.. issue links
.. _GitLab489:
    https://gitlab.com/pycqa/flake8/issues/489
.. _GitLab495:
    https://gitlab.com/pycqa/flake8/issues/495
.. _GitLab498:
    https://gitlab.com/pycqa/flake8/issues/498
.. _GitLab499:
    https://gitlab.com/pycqa/flake8/issues/499

.. merge request links
.. _GitLab!294:
    https://gitlab.com/pycqa/flake8/merge_requests/294
.. _GitLab!295:
    https://gitlab.com/pycqa/flake8/merge_requests/295
.. _GitLab!297:
    https://gitlab.com/pycqa/flake8/merge_requests/297
.. _GitLab!298:
    https://gitlab.com/pycqa/flake8/merge_requests/298
   ```
   
  
  
   ### 3.7.2
   ```
   -------------------

You can view the `3.7.2 milestone`_ on GitLab for more details.

Bugs Fixed
~~~~~~~~~~

- Fix broken ``flake8 --diff`` (regressed in 3.7.0) (See also `GitLab!292`_,
  `GitLab490`_)

- Fix typo in plugin exception reporting (See also `GitLab!275`_,
  `GitLab491`_)

- Fix ``AttributeError`` while attempting to use the legacy api (regressed in
  3.7.0) (See also `GitLab!293`_, `GitLab497`_)

.. all links
.. _3.7.2 milestone:
    https://gitlab.com/pycqa/flake8/milestones/25

.. issue links
.. _GitLab490:
    https://gitlab.com/pycqa/flake8/issues/490
.. _GitLab491:
    https://gitlab.com/pycqa/flake8/issues/491
.. _GitLab497:
    https://gitlab.com/pycqa/flake8/issues/497

.. merge request links
.. _GitLab!292:
    https://gitlab.com/pycqa/flake8/merge_requests/292
.. _GitLab!275:
    https://gitlab.com/pycqa/flake8/merge_requests/275
.. _GitLab!293:
    https://gitlab.com/pycqa/flake8/merge_requests/293
   ```
   
  
  
   ### 3.7.1
   ```
   -------------------

You can view the `3.7.1 milestone`_ on GitLab for more details.

Bugs Fixed
~~~~~~~~~~

- Fix capitalized filenames in ``per-file-ignores`` setting (See also
  `GitLab!290`_, `GitLab488`_)

.. all links
.. _3.7.1 milestone:
    https://gitlab.com/pycqa/flake8/milestones/24

.. issue links
.. _GitLab488:
    https://gitlab.com/pycqa/flake8/issues/488

.. merge request links
.. _GitLab!290:
    https://gitlab.com/pycqa/flake8/merge_requests/290
   ```
   
  
  
   ### 3.7.0
   ```
   -------------------

You can view the `3.7.0 milestone`_ on GitLab for more details.

New Dependency Information
~~~~~~~~~~~~~~~~~~~~~~~~~~

- Add dependency on ``entrypoints`` &gt;= 0.3, &lt; 0.4 (See also `GitLab!264`_,
  `GitLab!288`_)

- Pyflakes has been updated to &gt;= 2.1.0, &lt; 2.2.0 (See also `GitLab!283`_,
  `GitLab!285`_)

- pycodestyle has been updated to &gt;= 2.5.0, &lt; 2.6.0 (See also `GitLab!287`_)

Features
~~~~~~~~

- Add support for ``per-file-ignores`` (See also `GitLab!259`_, `GitLab156`_,
  `GitLab!281`_, `GitLab471`_)

- Enable use of ``float`` and ``complex`` option types (See also `GitLab!261`_,
  `GitLab452`_)

- Improve startup performance by switching from ``pkg_resources`` to
  ``entrypoints`` (See also `GitLab!264`_)

- Add metadata for use through the `pre-commit`_ git hooks framework (See also
  `GitLab!268`_, `GitLab!284`_)

- Allow physical line checks to return more than one result (See also
  `GitLab!269`_)

- Allow `` noqa:X123`` comments without space between the colon and codes
  list (See also `GitLab!273`_, `GitLab470`_)

- Remove broken and unused ``flake8.listen`` plugin type (See also
  `GitLab!274`_, `GitLab480`_)

.. all links
.. _3.7.0 milestone:
    https://gitlab.com/pycqa/flake8/milestones/23
.. _pre-commit:
    https://pre-commit.com/

.. issue links
.. _GitLab156:
    https://gitlab.com/pycqa/flake8/issues/156
.. _GitLab452:
    https://gitlab.com/pycqa/flake8/issues/452
.. _GitLab470:
    https://gitlab.com/pycqa/flake8/issues/470
.. _GitLab471:
    https://gitlab.com/pycqa/flake8/issues/471
.. _GitLab480:
    https://gitlab.com/pycqa/flake8/issues/480

.. merge request links
.. _GitLab!259:
    https://gitlab.com/pycqa/flake8/merge_requests/259
.. _GitLab!261:
    https://gitlab.com/pycqa/flake8/merge_requests/261
.. _GitLab!264:
    https://gitlab.com/pycqa/flake8/merge_requests/264
.. _GitLab!268:
    https://gitlab.com/pycqa/flake8/merge_requests/268
.. _GitLab!269:
    https://gitlab.com/pycqa/flake8/merge_requests/269
.. _GitLab!273:
    https://gitlab.com/pycqa/flake8/merge_requests/273
.. _GitLab!274:
    https://gitlab.com/pycqa/flake8/merge_requests/274
.. _GitLab!281:
    https://gitlab.com/pycqa/flake8/merge_requests/281
.. _GitLab!283:
    https://gitlab.com/pycqa/flake8/merge_requests/283
.. _GitLab!284:
    https://gitlab.com/pycqa/flake8/merge_requests/284
.. _GitLab!285:
    https://gitlab.com/pycqa/flake8/merge_requests/285
.. _GitLab!287:
    https://gitlab.com/pycqa/flake8/merge_requests/287
.. _GitLab!288:
    https://gitlab.com/pycqa/flake8/merge_requests/288
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/flake8
  - Changelog: https://pyup.io/changelogs/flake8/
  - Repo: https://gitlab.com/pycqa/flake8
</details>





### Update [newrelic](https://pypi.org/project/newrelic) from **4.10.0.112** to **4.12.0.113**.


<details>
  <summary>Changelog</summary>
  
  
   ### 4.12.0.113
   ```
   This release of the Python agent extends support of Amazon&#39;s boto3 library and includes bug fixes.

The agent can be installed using easy_install/pip/distribute via the Python Package Index or can be downloaded directly from the New Relic download site.

Features


AWS operation and request ID will now be reported in transaction traces and
spans when using boto3 and botocore.

The agent will now report aws.requestId and aws.operation for all calls
to AWS made using botocore and boto3.
DynamoDB calls are now reported under the Databases tab.

The agent will now record DynamoDB query performance in the Databases tab in
APM in addition to table name for the following calls:


put_item
get_item
update_item
delete_item
create_table
delete_table
query
scan

Certain SQS calls will now report additional data for spans and transaction
traces.

The agent will now record the queue name in spans and transaction traces for
the following SQS calls:


send_message
send_message_batch
receive_message

SNS publish will now report additional data for spans and transaction traces.

The SNS topic, target, or the string literal PhoneNumber will be reported to
New Relic inside of spans and transaction traces.
The full URL path will now be recorded on span events and transaction traces
when using boto3 or botocore.

The agent will now record the full URL path for API calls made to AWS through
the boto3 / botocore libraries. The path will be available through span
events and transaction traces.


Bug Fixes


Using newrelic-admin to start a GunicornWebWorker with an application factory
resulted in an application crash.

The agent would fail to start if using the newrelic-admin command to start an
aiohttp application factory with GunicornWebWorker. This issue has now been
fixed.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/newrelic
  - Changelog: https://pyup.io/changelogs/newrelic/
  - Homepage: http://newrelic.com/docs/python/new-relic-for-python
</details>





### Update [psycopg2](https://pypi.org/project/psycopg2) from **2.7.6.1** to **2.7.7**.


<details>
  <summary>Changelog</summary>
  
  
   ### 2.7.7
   ```
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^

- Cleanup of the cursor results assignment code, which might have solved
  double free and inconsistencies in concurrent usage (🎟`346, 384`).
- Wheel package compiled against OpenSSL 1.0.2q.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/psycopg2
  - Changelog: https://pyup.io/changelogs/psycopg2/
  - Homepage: http://initd.org/psycopg/
</details>





### Update [pyasn1-modules](https://pypi.org/project/pyasn1-modules) from **0.2.3** to **0.2.4**.


*The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)*

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pyasn1-modules
  - Changelog: https://pyup.io/changelogs/pyasn1-modules/
  - Repo: https://github.com/etingof/pyasn1-modules
</details>





### Update [pytest-django](https://pypi.org/project/pytest-django) from **3.4.5** to **3.4.7**.


<details>
  <summary>Changelog</summary>
  
  
   ### 3.4.7
   ```
   ------------------

Bugfixes
^^^^^^^^

* Fix disabling/handling of unittest methods with pytest 4.2+ (700)
   ```
   
  
  
   ### 3.4.6
   ```
   ------------------

Bugfixes
^^^^^^^^

* django_find_project: add cwd as fallback always (690)

Misc
^^^^

* Enable tests for Django 2.2 and add classifier (693)
* Disallow pytest 4.2.0 in ``install_requires`` (697)
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest-django
  - Changelog: https://pyup.io/changelogs/pytest-django/
  - Docs: https://pytest-django.readthedocs.io/
</details>





### Update [pytest](https://pypi.org/project/pytest) from **4.1.1** to **4.2.0**.


<details>
  <summary>Changelog</summary>
  
  
   ### 4.2.0
   ```
   =========================

Features
--------

- `3094 &lt;https://github.com/pytest-dev/pytest/issues/3094&gt;`_: `Class xunit-style &lt;https://docs.pytest.org/en/latest/xunit_setup.html&gt;`__ functions and methods
  now obey the scope of *autouse* fixtures.

  This fixes a number of surprising issues like ``setup_method`` being called before session-scoped
  autouse fixtures (see `517 &lt;https://github.com/pytest-dev/pytest/issues/517&gt;`__ for an example).


- `4627 &lt;https://github.com/pytest-dev/pytest/issues/4627&gt;`_: Display a message at the end of the test session when running under Python 2.7 and 3.4 that pytest 5.0 will no longer
  support those Python versions.


- `4660 &lt;https://github.com/pytest-dev/pytest/issues/4660&gt;`_: The number of *selected* tests now are also displayed when the ``-k`` or ``-m`` flags are used.


- `4688 &lt;https://github.com/pytest-dev/pytest/issues/4688&gt;`_: ``pytest_report_teststatus`` hook now can also receive a ``config`` parameter.


- `4691 &lt;https://github.com/pytest-dev/pytest/issues/4691&gt;`_: ``pytest_terminal_summary`` hook now can also receive a ``config`` parameter.



Bug Fixes
---------

- `3547 &lt;https://github.com/pytest-dev/pytest/issues/3547&gt;`_: ``--junitxml`` can emit XML compatible with Jenkins xUnit.
  ``junit_family`` INI option accepts ``legacy|xunit1``, which produces old style output, and ``xunit2`` that conforms more strictly to https://github.com/jenkinsci/xunit-plugin/blob/xunit-2.3.2/src/main/resources/org/jenkinsci/plugins/xunit/types/model/xsd/junit-10.xsd


- `4280 &lt;https://github.com/pytest-dev/pytest/issues/4280&gt;`_: Improve quitting from pdb, especially with ``--trace``.

  Using ``q[quit]`` after ``pdb.set_trace()`` will quit pytest also.


- `4402 &lt;https://github.com/pytest-dev/pytest/issues/4402&gt;`_: Warning summary now groups warnings by message instead of by test id.

  This makes the output more compact and better conveys the general idea of how much code is
  actually generating warnings, instead of how many tests call that code.


- `4536 &lt;https://github.com/pytest-dev/pytest/issues/4536&gt;`_: ``monkeypatch.delattr`` handles class descriptors like ``staticmethod``/``classmethod``.


- `4649 &lt;https://github.com/pytest-dev/pytest/issues/4649&gt;`_: Restore marks being considered keywords for keyword expressions.


- `4653 &lt;https://github.com/pytest-dev/pytest/issues/4653&gt;`_: ``tmp_path`` fixture and other related ones provides resolved path (a.k.a real path)


- `4667 &lt;https://github.com/pytest-dev/pytest/issues/4667&gt;`_: ``pytest_terminal_summary`` uses result from ``pytest_report_teststatus`` hook, rather than hardcoded strings.


- `4669 &lt;https://github.com/pytest-dev/pytest/issues/4669&gt;`_: Correctly handle ``unittest.SkipTest`` exception containing non-ascii characters on Python 2.


- `4680 &lt;https://github.com/pytest-dev/pytest/issues/4680&gt;`_: Ensure the ``tmpdir`` and the ``tmp_path`` fixtures are the same folder.


- `4681 &lt;https://github.com/pytest-dev/pytest/issues/4681&gt;`_: Ensure ``tmp_path`` is always a real path.



Trivial/Internal Changes
------------------------

- `4643 &lt;https://github.com/pytest-dev/pytest/issues/4643&gt;`_: Use ``a.item()`` instead of the deprecated ``np.asscalar(a)`` in ``pytest.approx``.

  ``np.asscalar`` has been `deprecated &lt;https://github.com/numpy/numpy/blob/master/doc/release/1.16.0-notes.rstnew-deprecations&gt;`__ in ``numpy 1.16.``.


- `4657 &lt;https://github.com/pytest-dev/pytest/issues/4657&gt;`_: Copy saferepr from pylib
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest
  - Changelog: https://pyup.io/changelogs/pytest/
  - Homepage: https://docs.pytest.org/en/latest/
</details>





### Update [pytest-mock](https://pypi.org/project/pytest-mock) from **1.10.0** to **1.10.1**.


*The bot wasn't able to find a changelog for this release. [Got an idea?](https://github.com/pyupio/changelogs/issues/new)*

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest-mock
  - Changelog: https://pyup.io/changelogs/pytest-mock/
  - Repo: https://github.com/pytest-dev/pytest-mock/
</details>





### Update [Sphinx](https://pypi.org/project/Sphinx) from **1.8.3** to **1.8.4**.


<details>
  <summary>Changelog</summary>
  
  
   ### 1.8.4
   ```
   =====================================

Bugs fixed
----------

* 3707: latex: no bold checkmark (✔) available.
* 5605: with the documentation language set to Chinese, English words could not
  be searched.
* 5889: LaTeX: user ``numfig_format`` is stripped of spaces and may cause
  build failure
* C++, fix hyperlinks for declarations involving east cv-qualifiers.
* 5755: C++, fix duplicate declaration error on function templates with constraints
  in the return type.
* C++, parse unary right fold expressions and binary fold expressions.
* pycode could not handle egg files on windows
* 5928: KeyError: &#39;DOCUTILSCONFIG&#39; when running build
* 5936: LaTeX: PDF build broken by inclusion of image taller than page height
  in an admonition
* 5231: &quot;make html&quot; does not read and build &quot;po&quot; files in &quot;locale&quot; dir
* 5954: ``:scale:`` image option may break PDF build if image in an admonition
* 5966: mathjax has not been loaded on incremental build
* 5960: LaTeX: modified PDF layout since September 2018 TeXLive update of
  :file:`parskip.sty`
* 5948: LaTeX: duplicated labels are generated for sections
* 5958: versionadded directive causes crash with Python 3.5.0
* 5995: autodoc: autodoc_mock_imports conflict with metaclass on Python 3.7
* 5871: texinfo: a section title ``.`` is not allowed
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/sphinx
  - Changelog: https://pyup.io/changelogs/sphinx/
  - Homepage: http://sphinx-doc.org/
</details>





### Update [pip](https://pypi.org/project/pip) from **18.1** to **19.0.1**.


<details>
  <summary>Changelog</summary>
  
  
   ### 19.0
   ```
   =================

Deprecations and Removals
-------------------------

- Deprecate support for Python 3.4 (`6106 &lt;https://github.com/pypa/pip/issues/6106&gt;`_)
- Start printing a warning for Python 2.7 to warn of impending Python 2.7 End-of-life and
  prompt users to start migrating to Python 3. (`6148 &lt;https://github.com/pypa/pip/issues/6148&gt;`_)
- Remove the deprecated ``--process-dependency-links`` option. (`6060 &lt;https://github.com/pypa/pip/issues/6060&gt;`_)
- Remove the deprecated SVN editable detection based on dependency links
  during freeze. (`5866 &lt;https://github.com/pypa/pip/issues/5866&gt;`_)

Features
--------

- Implement PEP 517 (allow projects to specify a build backend via pyproject.toml). (`5743 &lt;https://github.com/pypa/pip/issues/5743&gt;`_)
- Implement manylinux2010 platform tag support.  manylinux2010 is the successor
  to manylinux1.  It allows carefully compiled binary wheels to be installed
  on compatible Linux platforms. (`5008 &lt;https://github.com/pypa/pip/issues/5008&gt;`_)
- Improve build isolation: handle ``.pth`` files, so namespace packages are correctly supported under Python 3.2 and earlier. (`5656 &lt;https://github.com/pypa/pip/issues/5656&gt;`_)
- Include the package name in a freeze warning if the package is not installed. (`5943 &lt;https://github.com/pypa/pip/issues/5943&gt;`_)
- Warn when dropping an ``--[extra-]index-url`` value that points to an existing local directory. (`5827 &lt;https://github.com/pypa/pip/issues/5827&gt;`_)
- Prefix pip&#39;s ``--log`` file lines with their timestamp. (`6141 &lt;https://github.com/pypa/pip/issues/6141&gt;`_)

Bug Fixes
---------

- Avoid creating excessively long temporary paths when uninstalling packages. (`3055 &lt;https://github.com/pypa/pip/issues/3055&gt;`_)
- Redact the password from the URL in various log messages. (`4746 &lt;https://github.com/pypa/pip/issues/4746&gt;`_, `6124 &lt;https://github.com/pypa/pip/issues/6124&gt;`_)
- Avoid creating excessively long temporary paths when uninstalling packages. (`3055 &lt;https://github.com/pypa/pip/issues/3055&gt;`_)
- Avoid printing a stack trace when given an invalid requirement. (`5147 &lt;https://github.com/pypa/pip/issues/5147&gt;`_)
- Present 401 warning if username/password do not work for URL (`4833 &lt;https://github.com/pypa/pip/issues/4833&gt;`_)
- Handle ``requests.exceptions.RetryError`` raised in ``PackageFinder`` that was causing pip to fail silently when some indexes were unreachable. (`5270 &lt;https://github.com/pypa/pip/issues/5270&gt;`_, `5483 &lt;https://github.com/pypa/pip/issues/5483&gt;`_)
- Handle a broken stdout pipe more gracefully (e.g. when running ``pip list | head``). (`4170 &lt;https://github.com/pypa/pip/issues/4170&gt;`_)
- Fix crash from setting ``PIP_NO_CACHE_DIR=yes``. (`5385 &lt;https://github.com/pypa/pip/issues/5385&gt;`_)
- Fix crash from unparseable requirements when checking installed packages. (`5839 &lt;https://github.com/pypa/pip/issues/5839&gt;`_)
- Fix content type detection if a directory named like an archive is used as a package source. (`5838 &lt;https://github.com/pypa/pip/issues/5838&gt;`_)
- Fix listing of outdated packages that are not dependencies of installed packages in ``pip list --outdated --not-required`` (`5737 &lt;https://github.com/pypa/pip/issues/5737&gt;`_)
- Fix sorting ``TypeError`` in ``move_wheel_files()`` when installing some packages. (`5868 &lt;https://github.com/pypa/pip/issues/5868&gt;`_)
- Fix support for invoking pip using ``python src/pip ...``. (`5841 &lt;https://github.com/pypa/pip/issues/5841&gt;`_)
- Greatly reduce memory usage when installing wheels containing large files. (`5848 &lt;https://github.com/pypa/pip/issues/5848&gt;`_)
- Editable non-VCS installs now freeze as editable. (`5031 &lt;https://github.com/pypa/pip/issues/5031&gt;`_)
- Editable Git installs without a remote now freeze as editable. (`4759 &lt;https://github.com/pypa/pip/issues/4759&gt;`_)
- Canonicalize sdist file names so they can be matched to a canonicalized package name passed to ``pip install``. (`5870 &lt;https://github.com/pypa/pip/issues/5870&gt;`_)
- Properly decode special characters in SVN URL credentials. (`5968 &lt;https://github.com/pypa/pip/issues/5968&gt;`_)
- Make ``PIP_NO_CACHE_DIR`` disable the cache also for truthy values like ``&quot;true&quot;``, ``&quot;yes&quot;``, ``&quot;1&quot;``, etc. (`5735 &lt;https://github.com/pypa/pip/issues/5735&gt;`_)

Vendored Libraries
------------------

- Include license text of vendored 3rd party libraries. (`5213 &lt;https://github.com/pypa/pip/issues/5213&gt;`_)
- Update certifi to 2018.11.29
- Update colorama to 0.4.1
- Update distlib to 0.2.8
- Update idna to 2.8
- Update packaging to 19.0
- Update pep517 to 0.5.0
- Update pkg_resources to 40.6.3 (via setuptools)
- Update pyparsing to 2.3.1
- Update pytoml to 0.1.20
- Update requests to 2.21.0
- Update six to 1.12.0
- Update urllib3 to 1.24.1

Improved Documentation
----------------------

- Include the Vendoring Policy in the documentation. (`5958 &lt;https://github.com/pypa/pip/issues/5958&gt;`_)
- Add instructions for running pip from source to Development documentation. (`5949 &lt;https://github.com/pypa/pip/issues/5949&gt;`_)
- Remove references to removed ``egg=&lt;name&gt;-&lt;version&gt;`` functionality (`5888 &lt;https://github.com/pypa/pip/issues/5888&gt;`_)
- Fix omission of command name in HTML usage documentation (`5984 &lt;https://github.com/pypa/pip/issues/5984&gt;`_)
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pip
  - Changelog: https://pyup.io/changelogs/pip/
  - Homepage: https://pip.pypa.io/
</details>







Co-authored-by: pyup-bot <github-bot@pyup.io>
Co-authored-by: Peter Bengtsson <mail@peterbe.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment