Upgrading setuptools leaves behind broken symlink
Igorshp opened this issue · comments
Recently started having this issue.
when running python::default on new node, chef will fail when trying to upgrade virtualenv.
here is the log:
[2015-03-06T11:47:56+00:00] ERROR: python_pip[virtualenv] (python::virtualenv line 23) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '2'
---- Begin output of pip install --upgrade virtualenv ----
STDOUT: Exception:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 232, in main
status = self.run(options, args)
File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 339, in run
requirement_set.prepare_files(finder)
File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 229, in prepare_files
req_to_install.check_if_exists()
File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 931, in check_if_exists
self.satisfied_by = pkg_resources.get_distribution(self.req)
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 461, in get_distribution
dist = get_provider(dist)
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 341, in get_provider
return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 870, in require
needed = self.resolve(parse_requirements(requirements))
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 740, in resolve
env = Environment(self.entries)
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 927, in __init__
self.scan(search_path)
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 957, in scan
self.add(dist)
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 973, in add
if self.can_add(dist) and dist.has_version():
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2658, in has_version
self.version
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2466, in version
for line in self._get_metadata(self.PKG_INFO):
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 2510, in _get_metadata
for line in self.get_metadata_lines(name):
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 1927, in get_metadata_lines
return yield_lines(self.get_metadata(name))
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/__init__.py", line 1921, in get_metadata
with open(self.path,'rU') as f:
IOError: [Errno 2] No such file or directory: '/usr/lib/python2.7/dist-packages/setuptools.egg-info'
STDERR:
---- End output of pip install --upgrade virtualenv ----
you can see the culprit at the end, /usr/lib/python2.7/dist-packages/setuptools.egg-info'
this file is a symink that points to a dead directory.
I have check and it is alive and present before chef run.
it looks like when chef does setuptools upgrade, it removes the realpath directory, but does not cleanup the symlink.
Deleting the symlink manually, allows the chef run to continue.
Had to pin the version at 0.6rc11 to get chef to pass.
+1
Any tips on what to change to make this work in the short term?
This may be related to pypa/pip#2438
@Igorshp Did you pin the setuptools version to 0.6rc11 by setting the node['python']['setuptools_version'] property?
Sounds like a bug in pip's upgrade behavior. Closing this out at this cookbook is deprecated.