“resolve()”出现“unexpected keyword argument 'replace_conflicting'”错误是什么意思?
当我用 pip
更新我Python安装中的某些包时,我会遇到以下错误:
TypeError: resolve() got an unexpected keyword argument 'replace_conflicting'
这个错误只在某些包上出现,而在其他包上则没有。我曾经在询问过如何解决这个问题(理想情况下希望继续使用 pip
),但我现在想知道这个错误到底是什么意思,以及可能的原因是什么。
这个错误是什么意思?可能是什么原因导致的呢?
Downloading/unpacking xattr
Downloading xattr-0.7.5.tar.gz
Running setup.py (path:/private/tmp/pip_build_root/xattr/setup.py) egg_info for package xattr
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/private/tmp/pip_build_root/xattr/setup.py", line 67, in <module>
cmdclass={'build': cffi_build},
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 112, in setup
_setup_distribution = dist = klass(attrs)
File "/Library/Python/2.7/site-packages/setuptools/dist.py", line 239, in __init__
self.fetch_build_eggs(attrs.pop('setup_requires'))
File "/Library/Python/2.7/site-packages/setuptools/dist.py", line 264, in fetch_build_eggs
replace_conflicting=True
TypeError: resolve() got an unexpected keyword argument 'replace_conflicting'
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 17, in <module>
File "/private/tmp/pip_build_root/xattr/setup.py", line 67, in <module>
cmdclass={'build': cffi_build},
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 112, in setup
_setup_distribution = dist = klass(attrs)
File "/Library/Python/2.7/site-packages/setuptools/dist.py", line 239, in __init__
self.fetch_build_eggs(attrs.pop('setup_requires'))
File "/Library/Python/2.7/site-packages/setuptools/dist.py", line 264, in fetch_build_eggs
replace_conflicting=True
TypeError: resolve() got an unexpected keyword argument 'replace_conflicting'
1 个回答
1
这个问题是因为你的系统里有两个不同版本的setuptools:一个在 /System/Library/Frameworks/Python.framework/Versions/2.7
,另一个在 /Library/Python/2.7/site-packages
。不知怎么的,更新版的 setuptools.dist.Distribution.fetch_build_eggs
调用了旧版的 pkg_resources.working_set.resolve
。而旧版的resolve不支持replace_conflicting这个参数。
在我的OS X Lion电脑上,我是这样解决这个问题的:
$ sudo python /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/easy_install.py -U setuptools
$ sudo easy_install -U pip
也就是说,我用旧版的easy_install来升级easy_install,然后再用它来升级pip。
这样解决了我系统上的问题,因为它修改了 sys.path
,让 /Library/Python
下的新版本的 pkg_resources
在旧版本之前加载,而旧版本仍然在 /System/Library/Frameworks
下。另一种解决方法是临时修改 sys.path
,可以使用 PYTHONPATH
环境变量,具体可以参考 Python手册。