簡體   English   中英

在 docker 容器中導入 python 文件

[英]Importing python file in docker container

我正在 docker 容器內執行 python 文件,並且需要導入我放入名為base_functions的單獨 python 文件中的所有函數。 但是, from base_functions import *寫入會引發錯誤,即ModuleNotFoundError: No module named 'base_functions' ,即使base_functions.py與主 python 文件位於同一目錄中。 我怎樣才能做到這一點? 我是否需要在 settings.ini 或其他內容中預先指定要導入的 python 腳本?

這是Dockerfile的內容:

FROM amancevice/pandas:0.24.1-alpine

RUN apk update
RUN apk add build-base
RUN apk add gcc musl-dev libc-dev util-linux-dev linux-headers python3-dev postgresql-libs postgresql-dev git libffi-dev libmemcached-dev zlib-dev \
            ca-certificates zlib-dev jpeg-dev freetype-dev libpng

RUN pip3 install --upgrade pip
COPY requirements.txt .
RUN pip3 install -r requirements.txt

COPY src /vdp

WORKDIR /

ENTRYPOINT ["python3", "-m", "vdp"]

這些是項目目錄中的所有文件:

/home/cr/docker/71119/.

├── docker-compose.yaml
├── Dockerfile
├── Makefile
├── README.md
├── requirements.txt
├── settings.ini
└── src
    ├── base_functions.py
    ├── influx.py
    ├── __init__.py
    └── __main__.py

當您創建 Z60535AD19EB20E29 時,您實際上是在將 package(它聞起來像 package,具有__init__.py__main__.py )從“src”重命名為“vdp”

我建議:

  • src/...重命名為src/vdp/... (或vdp/... )——此時您應該能夠在主機上的src目錄中運行python -m vdp並且一切正常。
  • 將 Dockerfile 節更改為
    COPY src /src
    WORKDIR /src
    ENTRYPOINT ["python3", "-m", "vdp"]
    – 這相當於您在主機上運行它的方式。

另一種選擇是將/src放在存儲庫中並將內容更改為COPY vdp /src/vdp

當然,第三個選項是設置正確的 Python 包裝,讓您的setup.py構建一個合適的輪子,然后簡單地將其安裝在 Docker 容器中。

Python 無法找到文件 base_functions,因為它是從其他文件夾運行的。

您可能想要更改 Dockerfile 中的工作目錄:

WORKDIR /path/to/workdir

您需要提及 PYTHONPATH。 在您的 Dockerfile 中,我假設您的根目錄是/home/cr/docker/71119/src/

env PYTHONPATH /home/cr/docker/71119/src/

要么,或者如果你想看到它工作(我的調試偏好)

docker run -it <img-name> /bin/bash

export PYTHONPATH=/home/cr/docker/71119/src/ && python3 <your-script>.py它應該可以工作。

另一個提示是,如果要顯示文件結構,請通過以下方式安裝樹: apt-get install tree -y && cd <your-dir> && tree然后將其發布到 SO。 它只是更清潔!

暫無
暫無

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

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