Python packaging安装依赖时抛出InvalidVersion错误(版本3.9.16+)
解决Pipenv安装依赖时的InvalidVersion错误(3.9.16+版本问题)
问题背景
在MacOS 13.2.1的M1 MacBook Pro上,通过pyenv安装了Python 3.9-dev版本,使用pipenv创建虚拟环境后,从Pipfile.lock安装依赖时触发InvalidVersion错误,提示版本'3.9.16+'无效。此前曾安装过Python 3.9.16+版本但已移除并替换为3.9-dev,虚拟环境的pyvenv.cfg文件中version_info显示为"3.9.16.final.0",不清楚错误版本号的来源,需解决依赖安装问题。
错误堆栈信息如下:
Failed to install dependencies. Errors: Traceback (most recent call last): File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 3105, in _dep_map return self.__dep_map File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 2901, in __getattr__ raise AttributeError(attr) AttributeError: _DistInfoDistribution__dep_map During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/bin/invenio", line 8, in <module> sys.exit(cli()) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/click/core.py", line 1130, in __call__ return self.main(*args, **kwargs) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/click/core.py", line 1657, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/click/core.py", line 760, in invoke return __callback(*args, **kwargs) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/click/decorators.py", line 26, in new_func return f(get_current_context(), *args, **kwargs) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/flask/cli.py", line 354, in decorator app = __ctx.ensure_object(ScriptInfo).load_app() File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/flask/cli.py", line 301, in load_app app = self.create_app() File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/invenio_base/app.py", line 170, in create_cli_app app = create_app(debug=get_debug_flag()) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/invenio_base/app.py", line 106, in _create_app config_loader(app, **kwargs) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/invenio_app/factory.py", line 60, in config_loader invenio_config_loader(app, **kwargs_config) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/invenio_config/utils.py", line 54, in _config_loader InvenioConfigEntryPointModule(app=app) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/invenio_config/entrypoint.py", line 35, in __init__ self.init_app(app) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/invenio_config/entrypoint.py", line 45, in init_app app.config.from_object(ep.load()) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 2516, in load self.require(*args, **kwargs) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 2539, in require items = working_set.resolve(reqs, env, installer, extras=self.extras) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 832, in resolve new_requirements = dist.requires(req.extras)[::-1] File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 2821, in requires dm = self._dep_map File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 3107, in _dep_map self.__dep_map = self._compute_dependencies() File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 3124, in _compute_dependencies common = types.MappingProxyType(dict.fromkeys(reqs_for_extra(None))) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/__init__.py", line 3121, in reqs_for_extra if not req.marker or req.marker.evaluate({'extra': extra}): File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py", line 245, in evaluate return _evaluate_markers(self._markers, current_environment) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py", line 137, in _evaluate_markers groups[-1].append(_evaluate_markers(marker, environment)) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py", line 151, in _evaluate_markers groups[-1].append(_eval_op(lhs_value, op, rhs_value)) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/markers.py", line 109, in _eval_op return spec.contains(lhs, prereleases=True) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/specifiers.py", line 565, in contains normalized_item = _coerce_version(item) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/specifiers.py", line 36, in _coerce_version version = Version(version) File "/Users/ianscott/.local/share/virtualenvs/coretest-LjeDqtCi/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/version.py", line 197, in __init__ raise InvalidVersion(f"Invalid version: '{version}'") pkg_resources.extern.packaging.version.InvalidVersion: Invalid version: '3.9.16+'
解决方法
1. 彻底重建虚拟环境
- 删除当前虚拟环境:
pipenv --rm - 确认pyenv使用的是3.9-dev版本:
pyenv version # 若不是则设置当前项目局部版本 pyenv local 3.9-dev - 重新创建虚拟环境并从Pipfile.lock安装依赖:
pipenv install --ignore-pipfile
2. 检查并修正Pipfile.lock
- 打开项目中的
Pipfile.lock文件,搜索3.9.16+,找到依赖中使用该版本标识的约束规则,将其修改为符合语义化版本规范的格式(例如>=3.9.0或~=3.9) - 修改完成后重新执行安装:
pipenv install
3. 清除缓存残留
- 删除pipenv的虚拟环境缓存目录:
rm -rf ~/.local/share/virtualenvs/ - 清除pip缓存:
pip cache purge - 重新创建虚拟环境并安装依赖
4. 重新安装Python 3.9-dev
- 若上述方法无效,彻底卸载并重装3.9-dev:
pyenv uninstall 3.9-dev pyenv install 3.9-dev pyenv rehash - 再次确认版本后重建虚拟环境
内容的提问来源于stack exchange,提问作者monotasker
相关产品推荐
相关产品推荐

