Не удалось импортировать определенные модули в __init__.py - PullRequest
0 голосов
/ 18 февраля 2020

Мой каталог выглядит так:

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

Я хочу import DBConnection и import getLatlong в __init__.py. В моем __init__.py нет ошибки, пока я не запустил его, я получил:

System.Private.CoreLib: Исключительная ситуация при выполнении функции: Functions.HttpExample. System.Private.CoreLib: Результат: Сбой Исключение: ModuleNotFoundError: Нет модуля с именем '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 в этот класс. Следующие значения перейдут к 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)

Я пытался импортировать эти файлы всеми способами, пока не сошел с ума ..

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Вы получаете эти ошибки, потому что Python не знает, где искать файлы, которые вы хотите импортировать. В зависимости от того, какую Python версию вы используете, я вижу три способа решения этой проблемы:

  1. Вы можете добавить HttpExample к PYTHONPATH, и тогда ваш импорт должен работать так, как он у вас есть. в настоящее время.

  2. Другой способ - использовать модуль sys и добавить путь к HttpExample, например,

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

Но вам придется делать это во всех файлах, куда вы хотите импортировать что-либо из родительской папки.

Или вы используете относительный импорт, который был доступен с Python 2.5 (см. PEP238). Они доступны только в модулях, но, поскольку у вас есть файл __init__.py, он должен работать. Для относительного импорта вы используете точки ., чтобы указать Python, где искать импорт. Одна точка . указывает Python искать нужный импорт в родительской папке. Вы также можете использовать .. до go до двух уровней. Но одного уровня должно быть достаточно в вашем случае.

Так что в вашем случае изменение кода на это должно решить вашу проблему.

В __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
0 голосов
/ 18 февраля 2020

Вы можете попробовать from __app__.HttpExample import getLatlong.

В папке Shared Code есть документ о том, как импортировать модуль. Проверьте это, сделайте c: Структура папки .

В нем говорится, что общий код должен храниться в отдельной папке в __app__. И в моем тесте это может сработать для меня.

...