使用Docker将本地包添加到诗歌中

时间:2020-08-17 23:24:17

标签: python docker python-poetry

我目前正在将一些脚本推送到docker映像,并使用诗歌来安装依赖项。我要使用的依赖项之一涉及将目录之一构建到我可以导入的模块中。这是一个示例:

poetry-project
 │   ├ poetry_project
 │   │      └── ex1.py
 │   └ dockerfile
 │   └ pyproject.toml
 │   └ poetry.lock
 │   
 tools
     ├ python_tools
            └── project_tools.py

我想在我的ex1.py类中执行以下操作:

#ex1.py class
from python_tools import project_tools

project_tools.do_stuff()

我的dockerfile示例:

FROM python:3.6
COPY pyproject.toml pyproject.toml
RUN poetry update
COPY poetry_project/ poetry_project/

最终,我想运行一个docker run python3 poetry_project/ex1.py 之类的命令,并能够利用project_tools导入。我读过我可以这样将包添加到pyproject.toml中:

my_package = { path = "/project_name/tools/python_tools/" }

但是,当我遇到以下错误时,这似乎对我不起作用:

Directory does not seem to be a Python package

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

a)好的做法是指定代码在容器内的绝对位置:

COPY . /usr/src/mypythonapp
WORKDIR /usr/src/mypythonapp

因此,您的代码将位于/ usr / src / mypythonapp中。该目录将是所有命令将运行的基本目录。无需丑陋的链接cd xxx && do xxx && bla bla

b)在ex1.py中,您可以指定其他“包含路径”:

sys.path.append(os.path.abspath("/usr/src/mypythonapp/tools/"))

c)您可以在Dockerfile中使用CMD自动运行文件:

CMD ["python3", "/full/path/to/your/script.py"]