[英]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
並且一切正常。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.