Comment 0 for bug 1626258

Revision history for this message
Felipe Reyes (freyes) wrote : AttributeError: 'Requirement' object has no attribute 'project_name'

[impact]

pip 8.1.1 (xenial) tries to access properties that were dropped from the Requirement class and when pip's code tries to access Requirement.project_name fails, this was fixed in 8.1.2.

Any user trying to install a package that triggers the pkg_resources.VersionConflict exception during will get the error "AttributeError: 'Requirement' object has no attribute 'project_name'"

[Test Case]

# wget https://pypi.python.org/packages/49/6f/183063f01aae1e025cf0130772b55848750a2f3a89bfa11b385b35d7329d/requests-2.10.0.tar.gz
# wget https://pypi.python.org/packages/2e/ad/e627446492cc374c284e82381215dcd9a0a87c4f6e90e9789afefe6da0ad/requests-2.11.1.tar.gz
# pip install requests-2.10.0.tar.gz
# pip install requests-2.11.1.tar.gz

Expected result:

pip installs requests 2.11.1

Actual result:

pip fails with the following exception

root@pip-x:/home/ubuntu# pip install requests-2.11.1.tar.gz
Processing ./requests-2.11.1.tar.gz
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 328, in run
    wb.build(autobuilding=True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 748, in build
    self.requirement_set.prepare_files(self.finder)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 600, in _prepare_file
    req_to_install.check_if_exists()
  File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 1011, in check_if_exists
    self.req.project_name
AttributeError: 'Requirement' object has no attribute 'project_name'
You are using pip version 8.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

[Regression Potential]

* Low. Users consuming pip private API may see a difference in the behavior, but this is a private api and upstream already discourages its use. And this change is already part of 8.1.2

[Other info]

From 8e236dd6a09bd2f70f9d4fc886da8c354d4c58f2 Mon Sep 17 00:00:00 2001
From: Donald Stufft <email address hidden>
Date: Wed, 11 Nov 2015 18:51:46 -0500
Subject: [PATCH] Update to use the Requirement class from packaging
https://github.com/pypa/pip/commit/8e236dd6a09bd2f70f9d4fc886da8c354d4c58f2