“resolve()”出现“unexpected keyword argument 'replace_conflicting'”错误是什么意思?

1 投票
1 回答
2488 浏览
提问于 2025-04-17 23:42

当我用 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手册

撰写回答