Ошибка импорта Python Azure WebJob - невозможно импортировать модули расширения Python - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь запустить скрипт Python с помощью веб-задания Azure, и он отлично работает, когда я хочу отправлять запросы и генерировать CSV.Я успешно заархивировал все необходимые мне пакеты вместе со своим сценарием и загрузил их в каталог Azure App_Data.

AzureWebJobDirectory

Однако я такженеобходимо иметь возможность подключаться к сайту SFTP, а некоторые из требуемых пакетов содержат модули расширения Python.Когда я запускаю скрипт локально.это работает отлично.Однако при запуске в Azure появляется сообщение «ImportError: невозможно импортировать имя _bcrypt»

Вот мой сценарий:

import sys, os
sys.path.append(os.path.join(os.getcwd(), "site-packages"))

import pysftp
import paramiko

hostname = 'host'
username='user'
password='pass'
port='port'

source = 'D:\\Home\\PunchData.csv'
destination = 'PunchData_Success.csv'

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=hostname,port=port,username=username,password=password)

ftp_client=client.open_sftp()

ftp_client.chdir('uploads')

ftp_client.put(source,destination)

ftp_client.close()

Вот полное сообщение об ошибке, которое я получаю:

[12/15/2018 00:36:26 > 00ceeb: SYS INFO] Status changed to Initializing
[12/15/2018 00:36:28 > 00ceeb: SYS INFO] Job directory change detected: Job file 'enum\LICENSE' exists in source directory but not in working directory.
[12/15/2018 00:37:03 > 00ceeb: SYS INFO] Run script 'run.py' with script host - 'PythonScriptHost'
[12/15/2018 00:37:03 > 00ceeb: SYS INFO] Status changed to Running
[12/15/2018 00:37:06 > 00ceeb: ERR ] Traceback (most recent call last):
[12/15/2018 00:37:06 > 00ceeb: ERR ]   File "run.py", line 1, in <module>
[12/15/2018 00:37:06 > 00ceeb: ERR ]     import pysftp
[12/15/2018 00:37:06 > 00ceeb: ERR ]   File "D:\local\Temp\jobs\triggered\FTPTest\5zbuguvp.pts\pysftp\__init__.py", line 12, in <module>
[12/15/2018 00:37:06 > 00ceeb: ERR ]     import paramiko
[12/15/2018 00:37:06 > 00ceeb: ERR ]   File "D:\local\Temp\jobs\triggered\FTPTest\5zbuguvp.pts\paramiko\__init__.py", line 22, in <module>
[12/15/2018 00:37:06 > 00ceeb: ERR ]     from paramiko.transport import SecurityOptions, Transport
[12/15/2018 00:37:06 > 00ceeb: ERR ]   File "D:\local\Temp\jobs\triggered\FTPTest\5zbuguvp.pts\paramiko\transport.py", line 90, in <module>
[12/15/2018 00:37:06 > 00ceeb: ERR ]     from paramiko.ed25519key import Ed25519Key
[12/15/2018 00:37:06 > 00ceeb: ERR ]   File "D:\local\Temp\jobs\triggered\FTPTest\5zbuguvp.pts\paramiko\ed25519key.py", line 17, in <module>
[12/15/2018 00:37:06 > 00ceeb: ERR ]     import bcrypt
[12/15/2018 00:37:06 > 00ceeb: ERR ]   File "D:\local\Temp\jobs\triggered\FTPTest\5zbuguvp.pts\bcrypt\__init__.py", line 25, in <module>
[12/15/2018 00:37:06 > 00ceeb: ERR ]     from . import _bcrypt
[12/15/2018 00:37:06 > 00ceeb: ERR ] ImportError: cannot import name _bcrypt
[12/15/2018 00:37:06 > 00ceeb: SYS INFO] Status changed to Failed
[12/15/2018 00:37:06 > 00ceeb: SYS ERR ] Job failed due to exit code 1

Кажется, что происходит сбой каждый раз, когда импортируется модуль расширения Python.Я использую 32-битную среду Python 2.7 на компьютере с Windows.Я читал, что для функций Azure вам нужно использовать колесо Python для замены модулей расширения Python, но я не уверен, как бы я использовал колесо для веб-задания Azure.Загрузка колеса в каталог WebJob не решает проблему.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 21 декабря 2018

Я разобрался с решением.

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

Handler Mapping

Затем открыл консоль Kudu

Kudu

После того, как у меня была открыта консоль Kudu, я зашел в Site Extensions и убедился, что у меня установлена ​​нужная версия Python:

KuduSiteExtensions

Затем я пошел в Debug Console> CMD, чтобы открыть командную строку, и установил все необходимые пакеты, используя pip:

Kudupipinstall

После установки всех необходимых пакетов я смог удалить их из каталога WebJob.Сценарий WebJob может использовать только что установленные пакеты с помощью pip.После запуска у меня больше не было проблем с возможностью импорта модулей расширения Python для Azure.

Надеюсь, это поможет кому-то, кто столкнется с подобной проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...