【问题标题】:Adding local package to poetry with docker使用 docker 将本地包添加到诗歌中
【发布时间】:2020-12-07 02:54:23
【问题描述】:

我目前正在将一些脚本推送到 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

任何帮助将不胜感激。

【问题讨论】:

    标签: python docker python-poetry


    【解决方案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"]
    

    【讨论】:

    猜你喜欢
    • 2022-01-26
    • 2021-03-11
    • 1970-01-01
    • 2022-06-15
    • 2022-01-11
    • 2022-08-12
    • 1970-01-01
    • 2023-02-07
    • 2019-05-18
    相关资源
    最近更新 更多