ModuleNotFoundError: нет модуля с именем «pyodbc», хотя пакет успешно установленPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 ModuleNotFoundError: нет модуля с именем «pyodbc», хотя пакет успешно установлен

Сообщение Anonymous »

Я пытаюсь развернуть код Python в функциях Azure. Функция загружает некоторые файлы с FTP-сервера, сохраняет их в каталоге приложения функции на хост-компьютере и загружает в базу данных SQL Azure.

Первая часть работает правильно. ; файлы сохраняются в том же каталоге, что и основной файл Python.

При вызове методов sqlalchemy (в частности, create_engine() )
a ModuleNotFoundError: ни один модуль с именем «pyodbc» не создается.
(

Код: Выделить всё

return __import__('pyodbc')
)

Когда я пытаюсь конкретно импортировать pyodbc, выдается та же ошибка ModuleNotFoundError.

Код отлично работает локально на моей машине.

Я указал путь к модулям в коде, таким образом загружается SQLAlchemy (и другие модули, например фидпарсер).

Я установил модули через консоль Kudu, следуя этому руководству:
(tl;dr make venv и установите с помощью pip)

https://github.com/yokawasa /azure-functions-python-samples/blob/master/docs/install-python-modules.md

ОС хост-компьютера: Версия ОС: Microsoft Windows NT 10.0.14393.0
64-разрядная система

Код: Выделить всё

# -*- coding: utf-8 -*-
import sys
import os

sys.path.append(os.path.abspath(os.path.join(os.path.dirname( __file__ ), 'env/Lib/site-packages')))

from ftplib import FTP
from ast import literal_eval
import csv
import json
from sqlalchemy import create_engine, MetaData, Table
import pyodbc

def post_processing(input, output, csv_counter, header):
'''Removes uneccessary headers from the csv files and writes the data
into a csv file'''
# code...
return csv_counter, header

def download():

# first gets all the dates as the base for the full paths
# afterwards build each possible path to a csv file
# structure or dimensions of folders has to be known in advance
# advantage: specific folders are not hardcoded
# code...

return response

def upload():
postreqdata = json.loads(open(os.environ['req']).read())
response = open(os.environ['res'], 'w')
response.write("Finito" + postreqdata["name"])
response.close()

try:
# dev settings
f = open("connection\\con_info_sink.txt", "r")
connection_info = literal_eval(f.read())
f.close()
except FileNotFoundError:
# prod settings
connection_info = {
"db_user": os.environ["DB_USER"],
"db_password": os.environ["DB_PASSWORD"],
"db_name": os.environ["DB_NAME"],
"db_host": os.environ["DB_HOST"],
}

engine = create_engine(
"mssql+pyodbc://{db_user}:{db_password}@{db_host}/{db_name} ?driver=ODBC+Driver+13+for+SQL+Server".format(**connection_info), convert_unicode=True)

# orm mapping
metadata = MetaData(engine)
pcards = Table("pcardlog", metadata, autoload=True, schema='staging')

col_names_pcard = pcards.columns.keys()
fakedata_pcard = []

with open('source.csv', newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
for row in reader:
fakedata_pcard.append(
{col_names_pcard[0]: row[0],
col_names_pcard[1]: row[1],
col_names_pcard[2]: row[2],
col_names_pcard[3]: row[3],
col_names_pcard[4]: row[4],
col_names_pcard[5]: row[5],
col_names_pcard[6]: row[6],
})

con = engine.connect()
con.execute(pcards.insert(), fakedata_pcard)

return response

if __name__ == "__main__":
response = download()
response = upload()
Я ожидал, что pyodbc загрузится без проблем, поскольку однажды я уже развернул веб-приложение в Azure. Там я установил pyodbc с Wheelhouse прямо из двоичных файлов.

Я тоже пробовал установить pyodbc в этом проекте с Wheelhouse, но это ничего не изменило.

Обновление 1:
Я нашел сообщение на Stackoverflow, в котором говорится, что установка пользовательских драйверов невозможна в приложениях функций Azure.

Драйверы баз данных ODBC или OleDB в Службе приложений Azure

Обновление 2: после наткнулся на проблему GitHub для интерфейса функций Azure

https://github.com/Azure/azure-function ... -452478272

и попробовал развернуть функцию в среде Linux с наконец-то загруженными docker и pyodbc
. Однако спецификация драйвера для SQLAlchemy теперь неверна.

Я разверну эту функцию в веб-приложении Azure, поскольку знаю, что она там будет работать.
Функции Azure с Python находится в предварительной версии, поэтому функциональность может измениться в будущем.

Подробнее здесь: https://stackoverflow.com/questions/540 ... fully-inst
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»