我目前正在将一些脚本推送到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
任何帮助将不胜感激。
答案 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"]