为什么 conda 在我的环境中安装不兼容的 jupyterlab 依赖项 (prometheus_client)?

Why does conda install non-compatible jupyterlab dependency (prometheus_client) in my environment?

提问人:olamarre 提问时间:11/12/2023 最后编辑:olamarre 更新时间:11/12/2023 访问量:43

问:

我正在通过 Ubuntu 20.04 上的标准 miniconda3 安装运行 conda。我需要一个 Python 3.7 环境,并具有以下简化的 conda 环境文件():test_env.yaml

name: test-env
channels:
    - conda-forge
    - nodefaults
dependencies:
    - python=3.7
    - ipykernel
    - jupyterlab

使用并激活环境后,我尝试在 Python 会话中导入,但出现导入错误:conda env create -f test_env.yamljupyterlab

(test-env) [~]$ python
Python 3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:21) 
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import jupyterlab
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/olamarre/miniconda3/envs/test-env/lib/python3.7/site-packages/jupyterlab/__init__.py", line 7, in <module>
    from .handlers.announcements import (  # noqa
  File "/home/olamarre/miniconda3/envs/test-env/lib/python3.7/site-packages/jupyterlab/handlers/announcements.py", line 14, in <module>
    from jupyter_server.base.handlers import APIHandler
  File "/home/olamarre/miniconda3/envs/test-env/lib/python3.7/site-packages/jupyter_server/base/handlers.py", line 18, in <module>
    import prometheus_client
  File "/home/olamarre/miniconda3/envs/test-env/lib/python3.7/site-packages/prometheus_client/__init__.py", line 3, in <module>
    from . import (
  File "/home/olamarre/miniconda3/envs/test-env/lib/python3.7/site-packages/prometheus_client/metrics.py", line 5, in <module>
    from typing import (
ImportError: cannot import name 'Literal' from 'typing' (/home/olamarre/miniconda3/envs/test-env/lib/python3.7/typing.py)
>>> 

其中一个 jupyterlab 依赖项 尝试进行仅适用于 Python 3.8 及更高版本的导入,而不适用于 Python 3.7。因此,该软件包版本(0.18)与我的环境不兼容。如果我明确告诉 conda 安装同一包的早期版本(通过添加到环境文件中的依赖项),则问题已解决。prometheus_clientprometheus_clientprometheus_client=0.17

我的问题是:这可能是jupyterlab依赖树的conda配置有问题吗?(如果是这样,我该如何标记此问题以修复它?或者这可能是我的问题吗?(如果是这样,我应该如何调试它?

让我怀疑的是,我最近创建了一个单独的 Python 3.11 环境,该环境也安装了(以同样的方式,但在 conda 环境文件中),所以我想知道该环境的缓存包是否正在重用于 Python 3.7 环境。jupyterlabpython=3.11prometheus_client

conda python-3.7 jupyter-lab

评论


答:

1赞 olamarre 11/12/2023 #1

我自己问题的潜在答案 - 我刚刚在 prometheus conda 包文件中注意到几天前升级到 0.18,并且要求仅施加 python >= 3.6。我怀疑这可能是问题所在,将跟进开发人员(打开了一个 github 问题)。

enter image description here

评论

1赞 merv 11/13/2023
是的,Conda Forge 在对其配方施加限制方面非常宽松。由于 3.7 是 EOL,因此没有人在新软件包上积极测试与它的向后兼容性。如果你真的必须使用这样一个旧版本的 Python,那么你应该考虑对包施加上限,这样你就只能获得 3.7 仍在使用时的当代版本。但我也同意 conda-build/grayskull 可能应该开始强加于其更新的食谱。python >=3.8noarch
0赞 olamarre 11/13/2023
是的,最终我将需要升级我的代码库。但是,由于 github 上的代码库正确地要求该包版本使用 python >=3.8,我认为它们仍然应该在 conda 中反映该要求。