无法在 __init__.py 中导入定义的模块

Failed to import defined modules in __init__.py

我的目录如下所示:

- HttpExample:
    - __init__.py
    - DBConnection.py
    - getLatlong.py

我想在 __init__.pyimport DBConnectionimport getLatlong。在我 运行 之前,我的 __init__.py 没有错误,我收到了:

System.Private.CoreLib: Exception while executing function: Functions.HttpExample. System.Private.CoreLib: Result: Failure Exception: ModuleNotFoundError: No module named 'getLatlong'

我正在尝试使用 getLatlong 中的函数来使用用户从 __init__.pygetLatlong 输入的信息。下面是代码:

__init__.py :

from getLatlong import result
from DBConnection import blobService, container_name, account_key, file_path


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    section = req.params.get('section')
    bound = req.params.get('bound')
    km_location = req.params.get('km_location')
    location = req.params.get('location')
    if not section:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            section = req_body.get('section')

    if section and bound and km_location:

        result(section, km_location, bound, location).getResult() #HERE

        return func.HttpResponse(f"Hello {section}, {bound}!")

    #elif section is None or bound is None or km_location is None:
    #    return func.HttpResponse("All values are mandatory!")

我也在 getLatlong 处收到编译错误,无法将 DBConnection 导入此 class。以下值将传递给 getLatlong.py。代码:

from DBConnection import blobService, container_name, account_key, file_path #Another import error here says : Unable to import DBConnection

class result:
    def __init__(self, section, bound, km_location, location):
        self.section = section
        self.bound = bound
        self.km_location = km_location
        self.location = location

    def getResult(self):

        print(self.section)
        print(self.bound)
        print(self.km_location)
        print(self.location)

在我失去理智之前,我已经尝试了各种方法来导入这些文件..

您会收到这些错误,因为 Python 不知道在哪里可以找到您要导入的文件。根据您使用的 Python 版本,我看到了三种解决此问题的方法:

  1. 您可以将 HttpExample 添加到您的 PYTHONPATH,然后您的导入应该像您当前拥有的那样工作。

  2. 另一种方法是使用 sys 模块并将路径附加到 HttpExample,例如

import sys
sys.path.append('PATH/TO/HttpExample')

但是您必须在所有文件中执行此操作,以便从父文件夹中导入内容。

  1. 或者您使用从 Python 2.5 开始可用的相对导入(参见 PEP238)。这些仅在模块中可用,但是当您拥有 __init__.py 文件时,它应该可以工作。对于相对导入,您使用点 . 来告诉 Python 在何处查找导入。一个点 . 告诉 Python 在父文件夹中查找所需的导入。您也可以使用 .. 上升两级。但是对于你的情况,一级就足够了。

因此,在您的情况下,将代码更改为此应该可以解决您的问题。

__init.py__中:

from .getLatlong import result
from .DBConnection import blobService, container_name, account_key, file_path

getLangLong.py中:

from .DBConnection import blobService, container_name, account_key, file_path

你可以试试from __app__.HttpExample import getLatlong.

共享代码文件夹中有关于如何导入模块的文档。检查此文档:Folder structure.

它说共享代码应保存在 __app__ 中的单独文件夹中。在我的测试中,这对我有用。