解决应用程序包之间冲突的最佳方法

问题描述 投票:0回答:1

我正在开发一个程序包,该程序包将由我无法控制的 3 方应用程序使用。

我想知道解决包之间冲突的最佳方法是什么。

例如:

假设一个 3 方应用程序想要使用我的名为

external-package
的包。

├── Dockerfile
├── app.py
├── external-package
│   ├── Core
│   │   ├── ClassA.py
│   │   └── __init__.py
│   └── setup.py
└── requirements.txt

应用程序.py:

from Core import ClassA

app = ClassA()
app.send()

A类:

import backoff
import requests

class ClassA:

    @backoff.on_exception(
        backoff.expo,
        requests.exceptions.RequestException,
        max_tries=35,
        backoff_log_level=20,
        max_time=2400,
        raise_on_giveup=True,
    )
    def send(self):
        requests.get('https://google.com')

Dockerfile:

FROM python:3.10-slim-buster

RUN apt-get update && apt-get install -y \
    automake \
    build-essential \
    libtool \
    wget \
    --no-install-recommends && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY ./external-package /app/external-package
RUN pip install --no-cache-dir /app/external-package

COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt

COPY . /app

CMD ["python", "app.py"]

运行此容器将输出错误:

Traceback (most recent call last):
  File "/app/app.py", line 4, in <module>
    app.send()
  File "/usr/local/lib/python3.10/site-packages/backoff/_sync.py", line 87, in retry
    wait = _init_wait_gen(wait_gen, wait_gen_kwargs)
  File "/usr/local/lib/python3.10/site-packages/backoff/_common.py", line 23, in _init_wait_gen
    return wait_gen(**kwargs)
TypeError: expo() got an unexpected keyword argument 'backoff_log_level'

因为,外包装必须有

backoff ==1.9.2
,3方必须有
backoff ==2.2.1
,但容器有
backoff ==1.9.2

请记住,这只是

backoff
的示例,我希望有一种方法可以为任何库解决此问题。

python python-3.x pip
1个回答
0
投票

我在处理 Python 项目时遇到过几次这种情况,不幸的是,到目前为止,还没有一种优雅的方法可以在同一个 Python 环境中安装同一模块的多个版本。

我通常会做的就是专注于我可以控制的事情,这是我自己的代码的依赖项(在你的例子中,

external-package
)。是否可以不修复
backoff
external-package
版本(即始终默认为最新版本)?如果是,请在
external-package
代码中进行必要的代码更改以实现此目的。

如果没有,那么下一个最佳选择可能是手动将

backoff==1.9.2
的源代码复制到
external-package
中,这是一个非常不优雅的解决方案,可能会导致将来出现问题。

© www.soinside.com 2019 - 2024. All rights reserved.