You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何安装distro-info===0.18ubuntu0.18.04.1?Django项目依赖安装报错

Django旧项目现代化中requirements.txt的distro-info安装错误解决

我在对Django 2.2旧项目做现代化改造时,用pip freeze生成的requirements.txt里有一行导致pip install执行失败:

distro-info===0.18ubuntu0.18.04.1

我推测报错原因是版本字符串不符合PEP规范,但PEP-518里并没有提到===运算符。Stack上有类似问题,但和我的情况有两点不同:

  • 他们遇到的是ValueError,我遇到的是ParseError;
  • 他们的解决方案是升级pip,但我已经使用了最新版本的pip。

目前直接执行pip install distro-info可以正常完成,我是否应该直接采用这种方式?

更新:该项目约创建于2020年,查distro-info的PyPI历史记录,它2013年发布0.10版本,2021年发布1.0版本。这会不会和pip freeze生成的怪异输出有关?

报错信息如下:

ERROR: Exception:
Traceback (most recent call last):
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3021, in _dep_map
    return self.__dep_map
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2815, in __getattr__
    raise AttributeError(attr)
AttributeError: _DistInfoDistribution__dep_map

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/requirements.py", line 102, in __init__
    req = REQUIREMENT.parseString(requirement_string)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pyparsing/core.py", line 1141, in parse_string
    raise exc.with_traceback(None)
pip._vendor.pyparsing.exceptions.ParseException: Expected string_end, found '('  (at char 12), (line:1, col:13)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3101, in __init__
    super(Requirement, self).__init__(requirement_string)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/packaging/requirements.py", line 104, in __init__
    raise InvalidRequirement(
pip._vendor.packaging.requirements.InvalidRequirement: Parse error at "'(===0.18'": Expected string_end

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 160, in exc_logging_wrapper
    status = run_func(*args)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 247, in wrapper
    return func(self, options, args)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/commands/install.py", line 400, in run
    requirement_set = resolver.resolve(
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 92, in resolve
    result = self._result = resolver.resolve(
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 481, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 373, in resolve
    failure_causes = self._attempt_to_pin_criterion(name)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 213, in _attempt_to_pin_criterion
    criteria = self._get_updated_criteria(candidate)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/resolvelib/resolvers.py", line 203, in _get_updated_criteria
    for requirement in self._p.get_dependencies(candidate=candidate):
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/provider.py", line 237, in get_dependencies
    return [r for r in candidate.iter_dependencies(with_requires) if r is not None]
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/provider.py", line 237, in <listcomp>
    return [r for r in candidate.iter_dependencies(with_requires) if r is not None]
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 247, in iter_dependencies
    requires = self.dist.iter_dependencies() if with_requires else ()
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_internal/metadata/pkg_resources.py", line 216, in iter_dependencies
    return self._dist.requires(extras)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2736, in requires
    dm = self._dep_map
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3023, in _dep_map
    self.__dep_map = self._compute_dependencies()
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3033, in _compute_dependencies
    reqs.extend(parse_requirements(req))
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3094, in parse_requirements
    yield Requirement(line)
  File "/home/old-django-project/.venv/lib/python3.10/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3103, in __init__
    raise RequirementParseError(str(e))
pip._vendor.pkg_resources.RequirementParseError: Parse error at "'(===0.18'": Expected string_end

问题根源分析

  1. ===的由来:这个怪异的版本格式是旧版pip的产物。2020年项目创建时的pip版本,在处理Ubuntu仓库打包的Python包(版本号带系统后缀)时,错误输出了===运算符,而PEP-508规范里只定义了==、>=等合法运算符,新版pip无法解析这种格式。
  2. 版本时间线关联:当时Ubuntu 18.04仓库里的distro-info版本是0.18ubuntu0.18.04.1,旧版pip freeze捕获这类系统包版本时出现兼容性问题,才生成了错误格式。

解决方案

直接用pip install distro-info是可行的,但可以根据项目需求选择更稳妥的方式:

  • 不需要严格固定旧版本:把requirements.txt里的错误行改成distro-info,让pip自动安装兼容的最新版本。distro-info 1.0+兼容Python 3.6+,和Django 2.2的Python版本要求匹配,不会有兼容性问题。
  • 需要匹配旧环境版本:把===改成==,即distro-info==0.18ubuntu0.18.04.1,但注意这个版本是Ubuntu仓库特有的,PyPI上没有。如果新环境不是Ubuntu 18.04,建议换成PyPI上的官方版本distro-info==0.18,测试后确认兼容再替换。

验证步骤

  1. 在测试环境执行pip install distro-info==0.18,运行项目核心功能确认无依赖问题;
  2. 若功能正常,就替换requirements.txt里的错误行;若新版本兼容也没问题,直接写distro-info即可。

内容的提问来源于stack exchange,提问作者toraritte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:35:31