无法在 __init__.py 中导入定义的模块
Failed to import defined modules in __init__.py
我的目录如下所示:
- HttpExample:
- __init__.py
- DBConnection.py
- getLatlong.py
我想在 __init__.py
中 import DBConnection
和 import 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__.py
到 getLatlong
输入的信息。下面是代码:
__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 版本,我看到了三种解决此问题的方法:
您可以将 HttpExample
添加到您的 PYTHONPATH,然后您的导入应该像您当前拥有的那样工作。
另一种方法是使用 sys
模块并将路径附加到 HttpExample
,例如
import sys
sys.path.append('PATH/TO/HttpExample')
但是您必须在所有文件中执行此操作,以便从父文件夹中导入内容。
- 或者您使用从 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__
中的单独文件夹中。在我的测试中,这对我有用。
我的目录如下所示:
- HttpExample:
- __init__.py
- DBConnection.py
- getLatlong.py
我想在 __init__.py
中 import DBConnection
和 import 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__.py
到 getLatlong
输入的信息。下面是代码:
__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 版本,我看到了三种解决此问题的方法:
您可以将
HttpExample
添加到您的 PYTHONPATH,然后您的导入应该像您当前拥有的那样工作。另一种方法是使用
sys
模块并将路径附加到HttpExample
,例如
import sys
sys.path.append('PATH/TO/HttpExample')
但是您必须在所有文件中执行此操作,以便从父文件夹中导入内容。
- 或者您使用从 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__
中的单独文件夹中。在我的测试中,这对我有用。