Ubuntu 23.10执行pipenv update时提示setuptools未找到的问题
问题描述
在Ubuntu 23.10系统、Python 3.11.6环境下,执行命令pipenv update --python=/usr/bin/python时出现依赖锁定失败,核心报错为:
The 'setuptools' distribution was not found and is required by the application
完整报错回溯如下:
$ pipenv update --python=/usr/bin/python Loading .env environment variables... Running $ pipenv lock then $ pipenv sync. Locking [packages] dependencies... Building requirements... Resolving dependencies... Resolving dependencies... ✘ Locking Failed! ⠸ Locking... Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pipenv/resolver.py", line 738, in <module> main() File "/usr/lib/python3/dist-packages/pipenv/resolver.py", line 724, in main _main( File "/usr/lib/python3/dist-packages/pipenv/resolver.py", line 704, in _main resolve_packages( File "/usr/lib/python3/dist-packages/pipenv/resolver.py", line 662, in resolve_packages results, resolver = resolve( ^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/resolver.py", line 642, in resolve return resolve_deps( ^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/utils/resolver.py", line 1167, in resolve_deps results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps( ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/utils/resolver.py", line 937, in actually_resolve_deps resolver = Resolver.create( ^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/utils/resolver.py", line 479, in create constraints, skipped, index_lookup, markers_lookup = resolver.get_metadata( ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/utils/resolver.py", line 230, in get_metadata req, req_idx, markers_idx = self.parse_line( ^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/utils/resolver.py", line 285, in parse_line req = Requirement.from_line(line) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/requirements.py", line 2467, in from_line parsed_line.set_setup_info(parsed_line.get_setup_info()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/requirements.py", line 791, in get_setup_info setup_info = SetupInfo.from_ireq(self.ireq, subdir=self.subdirectory) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/setup_info.py", line 1705, in from_ireq created = cls.create( ^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/setup_info.py", line 1740, in create created.get_initial_info() File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/setup_info.py", line 1577, in get_initial_info self.run_pyproject() File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/setup_info.py", line 1558, in run_pyproject result = get_pyproject(self.pyproject.parent) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/utils.py", line 465, in get_pyproject backend = get_default_pyproject_backend() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/utils.py", line 436, in get_default_pyproject_backend st_version = get_setuptools_version() ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/requirementslib/models/utils.py", line 430, in get_setuptools_version setuptools_dist = get_distribution(Requirement("setuptools")) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/pkg_resources/__init__.py", line 528, in get_distribution dist = get_provider(dist) ^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/pkg_resources/__init__.py", line 400, in get_provider return working_set.find(moduleOrReq) or require(str(moduleOrReq))[0] ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/pkg_resources/__init__.py", line 968, in require needed = self.resolve(parse_requirements(requirements)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/pkg_resources/__init__.py", line 829, in resolve dist = self._resolve_dist( ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/patched/pip/_vendor/pkg_resources/__init__.py", line 870, in _resolve_dist raise DistributionNotFound(req, requirers) pipenv.patched.pip._vendor.pkg_resources.DistributionNotFound: The 'setuptools' distribution was not found and is required by the application Traceback (most recent call last): File "/home/khteh/.local/bin/pipenv", line 8, in <module> sys.exit(cli()) ^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1130, in __call__ return self.main(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/cli/options.py", line 58, in main return super().main(*args, **kwargs, windows_expand_args=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1055, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1657, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 760, in invoke return __callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/decorators.py", line 84, in new_func return ctx.invoke(f, obj, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/core.py", line 760, in invoke return __callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/vendor/click/decorators.py", line 26, in new_func return f(get_current_context(), *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/cli/command.py", line 573, in update do_update( File "/usr/lib/python3/dist-packages/pipenv/routines/update.py", line 68, in do_update do_lock( File "/usr/lib/python3/dist-packages/pipenv/routines/lock.py", line 65, in do_lock venv_resolve_deps( File "/usr/lib/python3/dist-packages/pipenv/utils/resolver.py", line 1110, in venv_resolve_deps c = resolve(cmd, st, project=project) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/pipenv/utils/resolver.py", line 985, in resolve raise RuntimeError("Failed to lock Pipfile.lock!") RuntimeError: Failed to lock Pipfile.lock!
解决方案
1. 安装系统级Python的setuptools
Ubuntu系统默认可能未给系统Python安装setuptools,执行以下命令安装:
sudo apt update && sudo apt install python3-setuptools
2. 在pipenv目标环境中手动安装setuptools
如果系统级安装无效,直接在pipenv要使用的Python环境中安装:
# 创建并进入pipenv虚拟环境 pipenv shell --python=/usr/bin/python # 在环境内安装setuptools pip install setuptools # 退出虚拟环境 exit # 重新执行update命令 pipenv update --python=/usr/bin/python
3. 升级目标Python的pip和setuptools
先确保目标Python的pip和setuptools是最新版本:
/usr/bin/python -m pip install --upgrade pip setuptools
完成后再运行pipenv update --python=/usr/bin/python
4. 重置pipenv环境(极端情况)
如果以上方法都无效,删除现有锁定文件和虚拟环境后重新初始化:
# 删除Pipfile.lock rm -f Pipfile.lock # 删除现有虚拟环境 pipenv --rm # 重新创建环境并安装依赖 pipenv install --python=/usr/bin/python # 执行update pipenv update
内容的提问来源于stack exchange,提问作者khteh
相关产品推荐
相关产品推荐

