1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00
Commit graph

84 commits

Author SHA1 Message Date
Ville Skyttä
cee7a53712 Python 3.6 invalid escape sequence deprecation fixes 2017-03-20 13:54:29 +01:00
Anish Tambe
f913942479 Improve message when installing requirements file (#4127) (#4211)
* improve message when installing requirements file (#4127)

* Refactor for issue (#4127)
2017-01-17 23:14:09 +01:00
Xavier Fernandez
b867c78904 Refactor InstallRequirement instantiation 2016-12-11 19:53:25 +01:00
Xavier Fernandez
8f171cd212 Fix environment markers evaluation - issue #3829 (#4051) 2016-11-02 08:28:17 -04:00
Paul Moore
1f2d639029 Skip a couple of tests that fail on Windows 2016-09-01 19:59:07 +01:00
Jakub Wilk
6dc28c1b31 Fix typos 2016-06-10 21:29:43 +02:00
burrows
3c11bb4de9 Give markers chance to remove incompat wheel links
`pip install -r reqs.txt` was failing when the requirements file includes
an unsupported wheel, regardless of whether it is conditionally removed
by a marker. This patch fixes that issue.

Additionally, this patch makes pip check local file wheels for
compatibility. Previously, a requirements file could include a path
to a valid wheel for any platform and pip would happily install it.
2016-04-07 13:00:03 -04:00
Donald Stufft
8e236dd6a0 Update to use the Requirement class from packaging 2016-03-07 11:40:39 +11:00
Ed Morley
4bc0395a53 Correct the suggested package hash lines for URL requirements
When require hashes mode is enabled, if any packages defined in the
requirements file are missing a hash, installation fails with a message
suggesting the appropriate lines that should be copied into the
requirements file.

This worked fine for requirement specifiers such as `requests==2.9.1`,
however for packages specified by URL, the resultant output did not
match that originally in the requirements file.

For example a requirements file containing:
```
--require-hashes
https://github.com/benoitc/gunicorn/archive/19.4.5.zip
https://github.com/kennethreitz/requests/archive/v2.9.1.zip#egg=requests==2.9.1
```

Would result in:
```
Hashes are required in ...
    unknown package --hash=sha256:399347c0a7272fb70b45d5840027c372f...
    requests==2.9.1 --hash=sha256:89839b1698243e232780d1fc808ae8730...
```

Now the original URL line is correctly shown:
```
Hashes are required in ...
    https://github.com/benoitc/gunicorn/archive/19.4.5.zip --hash=...
    https://github.com/kennethreitz/requests/archive/v2.9.1.zip#egg=requests==2.9.1 --hash=...
```

Fixes #3362.
2016-03-04 10:46:40 +00:00
Stéphane Bidoul
f3ca1b973f remove editable_options which is now obsolete code 2016-02-09 11:08:16 +01:00
Xavier Fernandez
08932c4a4e Fix test_reqs unit tests on windows 2016-01-17 22:40:46 +01:00
Xavier Fernandez
d459969b03 fix test_unexisting_path on windows 2015-12-01 13:07:19 +01:00
Xavier Fernandez
b939c3d6d2 fix test_unsupported_hashes for windows 2015-12-01 12:57:46 +01:00
Xavier Fernandez
e42e822f2c Provide more helpful message on invalid requirement
closes #540, #1000, #1426
2015-11-13 11:05:02 +01:00
Erik Rose
f38fc903f2 Obey --require-hashes option in requirements files.
Removed the mention of "package index options" in the docs, because they don't all fit that category anymore. Not even --no-binary and --only-binary do; they're "install options".
2015-10-21 16:02:47 -04:00
Erik Rose
0e6058bc63 Change head() method to an attr in hashing exceptions. Tweak English.
Standardize on present tense, improve flow, and clarify.
2015-10-10 22:44:12 -04:00
Erik Rose
bf0ff80d73 pep8 fixes 2015-10-07 17:31:40 -04:00
Erik Rose
910b82c59d --require-hashes no longer implies --no-deps.
For dependencies that are properly pinned and hashed (not really dependencies at all, if you like, since they're explicit, root-level requirements), we install them as normal. For ones that are not pinned and hashes, we raise the errors typical of any unhashed requirement in --require-hashes mode.

Since the stanza under "if not ignore_dependencies" doesn't actually add anything if it's already in the RequirementSet, not much has to be done in the way of code: the unhashed deps don't have any hashes, so we complain about them as per usual.

Also...
* Revise wording of HashUnpinned errors. They can be raised even if no hash is specified, so the previous wording was misleading.
* Make wording of HashMissing less awkward.
2015-09-25 19:07:20 -04:00
Erik Rose
f3f73f1c07 Remove the -H spelling for --hashes.
dstufft is nervous about blowing a single-char option on something that will usually be copied and pasted anyway. We can always put it back later if it proves to be a pain.
2015-09-25 15:32:33 -04:00
Erik Rose
0c17248998 Pass PEP 8 checks. 2015-09-24 22:16:00 -04:00
Erik Rose
11dbb92440 Switch from --sha256 etc. to a single option: --hash.
Everybody seems to favor this. Spelled -H, it's still pretty short. And it is less unusual programmatically.
2015-09-24 22:16:00 -04:00
Erik Rose
1e41f01823 Add checks against requirements-file-dwelling hashes for most kinds of packages. Close #1175.
* Add --require-hashes option. This is handy in deployment scripts to force application authors to hash their requirements. It is also a convenient way to get pip to show computed hashes for a virgin, unhashed requirements file. Eventually, additions to `pip freeze` should fill a superset of this use case.
  * In --require-hashes mode, at least one hash is required to match for each requirement.
  * Option-based requirements (--sha256=...) turn on --require-hashes mode implicitly.
  * Internet-derived URL-based hashes are "necessary but not sufficient": they do not satisfy --require-hashes mode when they match, but they are still used to guard against transmission errors.
  * Other URL-based requirements (#md5=...) are treated just like flag-based ones, except they don't turn on --require-hashes.
* Complain informatively, with the most devastating errors first so you don't chase your tail all day only to run up against a brick wall at the end. This also means we don't complain that a hash is missing, only for the user to find, after fixing it, that we have no idea how to even compute a hash for that type of requirement.
  * Complain about unpinned requirements when hash-checking mode is on, lest they cause the user surprise later.
  * Complain about missing hashes.
  * Complain about requirement types we don't know how to hash (like VCS ones and local dirs).
* Have InstallRequirement keep its original Link around (original_link) so we can differentiate between URL hashes from requirements files and ones downloaded from the (untrustworthy) internet.
* Remove test_download_hashes, which is obsolete. Similar coverage is provided in test_utils.TestHashes and the various hash cases in test_req.py.
2015-09-24 22:16:00 -04:00
Marcus Smith
d85ceb06fe Merge pull request #2846 from mrtrumbe/dev/issue1236_movetests
Moved tests for InstallRequirement extras handling from test_req_file to test_req.
2015-06-01 07:30:21 -07:00
matthew
111dbc95dc Moved tests for InstallRequirement extras handling from test_req_file to test_req. 2015-05-31 13:43:39 -05:00
Donald Stufft
56d5076ee2 Hide setup.py output unless using -v 2015-05-20 21:27:12 -04:00
Marcus Smith
90f17915be consolidate tests from test_req to test_req_file 2015-04-13 00:07:15 +02:00
Marcus Smith
6c747be598 move some tests from test_req to test_req_file 2015-04-13 00:07:15 +02:00
Georgi Valkov
0da51b14d7 Remove misleading test cases and improve docs 2015-04-12 23:52:49 +02:00
Georgi Valkov
29f0c75c63 Do not shlex.split() and flatten value of global|install_options 2015-04-12 23:52:49 +02:00
Georgi Valkov
5a57325761 Fix pep8 compatibility 2015-04-12 23:52:49 +02:00
Georgi Valkov
832c050ca4 Fix pep8 compatibility 2015-04-12 23:52:49 +02:00
Georgi Valkov
0ab7a7bbb5 Use optparse and pip.cmdoptions for parsing requirement-line options 2015-04-12 23:52:49 +02:00
Georgi Valkov
4a70730617 Replace all occurrences of install|global-options with install|global-option 2015-04-12 23:52:49 +02:00
Georgi Valkov
b014668b30 Add --install-options and --global-options to the requirements file parser
This allows lines such as the following to exist in requirements files:

  INITools==0.2 --install-options="--prefix=/opt"
  virtualenv>=1 --global-options="--no-user-cfg"

In addition, the requirements file parser was overhauled with simplicity
and clarity in mind.
2015-04-12 23:52:49 +02:00
Xavier Fernandez
a947c29903 Always check environment markers
Fixes #2658
2015-04-07 22:42:17 +02:00
Donald Stufft
a510b2229e Reverts #2493 - Upgrades will again contact the index 2015-04-04 14:21:40 -04:00
Marc Abramowitz
d02cb6de43 Speed up _filter_install function
This speeds up the _filter_install function that is used to filter the
output of `python setup.py install` when installing packages. It does
this by using a single regex which is pre-compiled and thus avoiding a
`for` loop over 15 different regexes.

Before:

    $ python
    Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46)
    [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import timeit
    >>> timeit.timeit("""_filter_install("if we've already set distribute as a conflict to setuptools blah blah blah blah")""", setup='from pip.req.req_install import InstallRequirement; ir = InstallRequirement("foo", None, None); _filter_install = ir._filter_install')
    21.220640897750854

After:

    $ python
    Python 2.7.9 (v2.7.9:648dcafa7e5f, Dec 10 2014, 10:10:46)
    [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import timeit
    >>> timeit.timeit("""_filter_install("if we've already set distribute as a conflict to setuptools blah blah blah blah")""", setup='from pip.req.req_install import InstallRequirement; ir = InstallRequirement("foo", None, None); _filter_install = ir._filter_install')
    0.9454500675201416
2015-03-19 19:27:19 -07:00
Donald Stufft
34073df838 Merge pull request #2493 from msabramo/issue-770-redux
Fix for #770: pip install -U shouldn't look at pypi if not needed
2015-03-17 07:26:34 -04:00
Marc Abramowitz
94fcd18ed4 Fix for #770: pip install -U shouldn't look at pypi if not needed
If an exact version is specified for install, and that version is
already installed, then there is no point going to pypi as no install
is needed.

Adds a test called
`test_upgrade_no_look_at_pypi_if_exact_version_installed`.

This is a rework of PR #771, because that PR is old and has merge
conflicts that were easier to fix by applying the changes manually.
2015-03-16 22:30:13 -07:00
Marc Abramowitz
d04850659c Make get_dist handle egg_info_path w/ slash at end
Without this, I was getting:

    $ pip install -U 'sentry[lol]'
    ...
      UnknownExtra: Unknown 7.4.1 has no such extra feature 'lol'

With this, I get:

    $ pip install -U 'sentry[lol]'
    ...
      UnknownExtra: sentry 7.4.1 has no such extra feature 'lol'
2015-03-16 11:48:41 -07:00
Donald Stufft
cc7d178712 Fix tests 2015-03-16 08:44:02 -04:00
Donald Stufft
0de8e98708 Merge pull request #2496 from msabramo/test_req_add_tests
Add test_{str,repr} to tests/unit/test_req.py
2015-03-16 07:57:28 -04:00
Marc Abramowitz
90a7edfcca Add test_{str,repr} to tests/unit/test_req.py
Corrects my failure to include a test with
https://github.com/pypa/pip/pull/2495
2015-03-06 08:56:24 -08:00
Xavier Fernandez
e8e2566279 replace InstallRequirement.url by a link attribute 2015-03-05 11:01:28 +01:00
Matej Stuchlik
c5024dc851 Mark tests requiring Internet access 2015-01-15 00:53:15 +01:00
Donald Stufft
5f414a69c6 Don't return cached output for InstallRequirement().installed_version 2014-12-23 07:39:13 -05:00
Xavier Fernandez
06da6c07ec Fix environment extras installation for sdist
use pkg_resources.Distribution.requires instead of
Requirements.requirements to have environment markers parsing for free
It also unifies a little the process for wheel and non-wheel installs

closes #2174
2014-12-19 19:12:20 +01:00
Xavier Fernandez
4ea7937264 parse_editable: clarify output
extras and editable_options are two different things
2014-12-19 19:11:14 +01:00
Marc Abramowitz
59d1ce1af7 Add test_installed_version_not_installed
Checks what happens when user tries to get `installed_version` property
for a InstallRequirement object when that distribution is not installed.
2014-12-17 15:23:42 -08:00
Donald Stufft
6f64d3e6e2 Implement PEP 440 2014-12-13 13:50:21 -05:00