【问题标题】:Including own project code in fnproject function在 fnproject 函数中包含自己的项目代码
【发布时间】:2020-07-13 11:43:38
【问题描述】:

我正在使用 Fn Project 作为 Oracle Cloud Functions 的一部分,我希望包含一些我自己编写的帮助函数,这些函数目前在其他一些程序中使用。我想包含这些函数,而不必将它们复制并粘贴到我的源代码中,而且我觉得有一种方法可以做到这一点,但我还没有找到。

这是我的目录结构。名称已更改,以便于理解。

- helper
  - foo.py
- other
  - example.py
- functions
  - myfunc
    - func.py
    - func.yaml
    - requirements.txt

目前,在example.py 我有以下内容:

from helper import foo
...
foo.bar() 

当我写 func.py 时,我写了同样的东西,但是当我运行 fn deploy -app test_app 然后 fn invoke test_app myfunc 它在 import 语句上出错(我运行基本的 hello world 函数,顶部是 from helper import foo

Error invoking function. status: 502 message: function failed

我的第一反应是将helper 放在 requirements.txt 文件中,但这仅适用于pip 包。如何确保包含我自己的代码?

任何帮助将不胜感激!


更新

到目前为止,我唯一的解决方案是将我的代码复制并粘贴到源文件中,这不是很容易维护。

【问题讨论】:

    标签: python docker kubernetes libraries fn


    【解决方案1】:

    一旦您在func.py 中执行from helper import foo,包括库导入在内的整个代码都将在func.py 中完成。在您的主目录中使用命令pip freeze > requirements.txt,您可以在requirements.txt 中列出您项目的所有依赖库。因此,当您创建 docker 映像时,它将安装来自 requirements.txt 的所有内容。

    【讨论】:

    • 谢谢你,也许我的问题不够清楚——这实际上是关于我写的foo 文件。它是否会包含在生成的 docker 映像中 - 即 foo.bar() 是否有效?
    • 您在example.py 中写入了foo.bar(),而bar() 函数存在于helper/foo.py 中,对吗?您将生成整个项目的 docker 映像,其中包含所有文件,因此包含所有 .py 文件、其中的函数、需求中的库。 txt 将在那里。
    • 您好 Aparna,我已经更新了问题。它不包括该函数,因为它似乎超出了 Fn 函数的范围。
    • 我相信您正在创建函数文件夹的 docker 映像(以防您的项目),但是您在其中使用的函数在该文件夹之外,因此它不会出现在您的 docker 映像中根据我的理解。如果你想在该图像中使用foo.pyexample.py,它必须在范围内,即。创建一个文件夹 然后将所有这些 helper, others and functions 保存在其中并创建一个 的 docker 映像。
    • 除了在项目中包含这些必需的 .py 文件外,我不确定如何将其用于多个 docker 映像。如果您想在多个项目中使用相同的代码,那么我能想到的唯一方法就是创建该通用代码的图像。这样每个项目的 docker 容器都可以和这个通用容器交互。这根本不是一个好的解决方案,但我没有想到任何其他解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2013-04-05
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多