如何解决使用Docker将本地包添加到诗歌中
我目前正在将一些脚本推送到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
任何帮助将不胜感激。
解决方法
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"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。