簡體   English   中英

如何從 docker-compose 中的已安裝卷安裝本地 pip package

[英]How to install local pip package from mounted volume in docker-compose

我正在開發一個依賴於另一個項目的項目。

在實時環境中,只需使用pip install即可發布和安裝依賴項。 在我的本地環境中,我希望能夠使用pip install -e命令安裝本地依賴項。

結構如下:

- Home
--- Project1
----- docker-compose
----- Dockerfile
--- relaton-py

在這個結構中,Project1 依賴於 relaton-py,因此我想使用本地的 relaton-py 來“安裝”這個依賴項。

我的 docker-compose 文件如下所示:

volumes:
      - .:/code
      - /Users/myuser/Dev/Projects/relaton-py:/relaton-py

而 Dockerfile 看起來像:

COPY requirements.txt /code/requirements.txt

RUN ["pip", "install", "-e", "relaton-py"]

WORKDIR /code

RUN ["pip", "install", "-r", "requirements.txt"]

# Copy the rest of the codebase
COPY . /code

嘗試旋轉環境時,出現以下錯誤:

=> ERROR [local/web-precheck:latest 11/19] RUN ["pip", "install", "-e", "relaton-py"]                                                                                                                 1.2s
------
 > [local/web-precheck:latest 11/19] RUN ["pip", "install", "-e", "relaton-py"]:
#27 0.685 ERROR: relaton-py is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with bzr+http, bzr+https, bzr+ssh, bzr+sftp, bzr+ftp, bzr+lp, bzr+file, git+http, git+https, git+ssh, git+git, git+file, hg+file, hg+http, hg+https, hg+ssh, hg+static-http, svn+ssh, svn+http, svn+https, svn+svn, svn+file).
#27 0.889 WARNING: You are using pip version 22.0.4; however, version 22.1.2 is available.
#27 0.889 You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
------
failed to solve: rpc error: code = Unknown desc = executor failed running [pip install -e relaton-py]: exit code: 1

但是,如果我嘗試不在 Dockerfile 中安裝此本地依賴項,整個環境就會啟動,我可以使用相同的命令pip install -e relaton-py

有沒有人不得不處理這種事情? 關於如何使 Dockerfile 識別已安裝卷中的文件的任何想法?

卷僅在您運行容器時綁定,而pip install -e relaton-py在您構建映像時發生,因此卷綁定尚未發生。

我建議在容器中嵌入 relaton-py。

為此,您需要更改構建上下文以包含 relaton-py 目錄。 所以在docker-compose.yml

services:
  Project1:
    build:
      context: ../
      dockerfile: ./Project1/Dockerfile

並相應地調整您的 Dockerfile

COPY ./relaton-py /relaton-py
RUN ["pip", "install", "-e", "/relaton-py"]

WORKDIR /code

COPY ./Project1/requirements.txt requirements.txt
RUN ["pip", "install", "-r", "requirements.txt"]

COPY ./Project1 .

這樣,當您構建映像時,代碼將可用。

然后,如果您還需要在容器中進行本地代碼更改,您可以通過執行以下操作將本地目錄安裝在容器內的目錄之上:

volumes:
      - .:/code
      - ../relaton-py:/relaton-py

對於更簡單的包,只需將其直接安裝到site-packages就足夠了。

在您的示例中,您可能想嘗試:

  1. relaton-py (只是 package 的源代碼形式,例如 Git 存儲庫)放在 Compose 文件上方的一個目錄中,以及
  2. 將此行添加到volumes下的docker-compose.yml
- ../relaton-py/relaton:/usr/local/lib/python3.10/site-packages/relaton:ro

假設您使用 Python 3.10,這應該覆蓋在 Docker 映像構建期間從 PyPI 安裝的任何內容,使用主機系統中的目錄,該目錄將以只讀模式安裝以避免意外更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM