Доступ к хранилищу блогов Azure из эксперимента Azure ML

Эксперименты Azure ML предоставляют способы чтения и записи файлов CSV в хранилище BLOB-объектов Azure с помощьюReader а такжеWriter модули. Однако мне нужно записать файл JSON в хранилище BLOB-объектов. Поскольку нет модуля для этого, я пытаюсь сделать это изнутриExecute Python Script модуль.

# Import the necessary items
from azure.storage.blob import BlobService

def azureml_main(dataframe1 = None, dataframe2 = None):
    account_name = 'mystorageaccount'
    account_key='mykeyhere=='
    json_string='{jsonstring here}'

    blob_service = BlobService(account_name, account_key)

    blob_service.put_block_blob_from_text("upload","out.json",json_string)

    # Return value must be of a sequence of pandas.DataFrame
    return dataframe1,

Однако это приводит к ошибке:ImportError: No module named azure.storage.blob

Это подразумевает, чтоazure-storage Пакет Python не установлен на Azure ML.

Как записать в хранилище BLOB-объектов Azure из эксперимента Azure ML?

Вот сообщение об ошибке заполнения:

Error 0085: The following error occurred during script evaluation, please view the output log for more information:
---------- Start of error message from Python interpreter ----------
data:text/plain,Caught exception while executing function: Traceback (most recent call last):
  File "C:\server\invokepy.py", line 162, in batch
    mod = import_module(moduleName)
  File "C:\pyhome\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\temp\azuremod.py", line 19, in <module>
    from azure.storage.blob import BlobService
ImportError: No module named azure.storage.blob

---------- End of error message from Python  interpreter  ----------
Start time: UTC 02/06/2016 17:59:47
End time: UTC 02/06/2016 18:00:00`

Спасибо всем!

ОБНОВЛЕНИЕ: Спасибо Дэну и Питеру за идеи ниже. Это прогресс, которого я достиг, используя эти рекомендации. Я создал чистую виртуальную среду Python 2.7 (в VS 2005) и сделалpip install azure-storage чтобы получить зависимости в мой каталог site-packages. Затем я заархивировал папку site-packages и загрузил ее в виде Zip-файла, как указано в примечании Дэна ниже. Затем я включил ссылку на каталог site-packages и успешно импортировал необходимые элементы. Это привело к ошибке времени ожидания при записи в хранилище блога.

Вот мой код:

# Get access to the uploaded Python packages    
import sys
packages = ".\Script Bundle\site-packages"
sys.path.append(packages)

# Import the necessary items from packages referenced above
from azure.storage.blob import BlobService
from azure.storage.queue import QueueService

def azureml_main(dataframe1 = None, dataframe2 = None):
    account_name = 'mystorageaccount'
    account_key='p8kSy3F...elided...3plQ=='

    blob_service = BlobService(account_name, account_key)
    blob_service.put_block_blob_from_text("upload","out.txt","Test to write")

    # All of the following also fail
    #blob_service.create_container('images')
    #blob_service.put_blob("upload","testme.txt","foo","BlockBlob")

    #queue_service = QueueService(account_name, account_key)
    #queue_service.create_queue('taskqueue')

    # Return value must be of a sequence of pandas.DataFrame
    return dataframe1,

И вот новый журнал ошибок:

Error 0085: The following error occurred during script evaluation, please view the output log for more information:
---------- Start of error message from Python interpreter ----------
data:text/plain,C:\pyhome\lib\site-packages\requests\packages\urllib3\util\ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
  InsecurePlatformWarning
Caught exception while executing function: Traceback (most recent call last):   
  File "C:\server\invokepy.py", line 169, in batch
    odfs = mod.azureml_main(*idfs)
  File "C:\temp\azuremod.py", line 44, in azureml_main
    blob_service.put_blob("upload","testme.txt","foo","BlockBlob")
  File ".\Script Bundle\site-packages\azure\storage\blob\blobservice.py", line 883, in put_blob
    self._perform_request(request)
  File ".\Script Bundle\site-packages\azure\storage\storageclient.py", line 171, in _perform_request
    resp = self._filter(request)
  File ".\Script Bundle\site-packages\azure\storage\storageclient.py", line 160, in _perform_request_worker
    return self._httpclient.perform_request(request)
  File ".\Script Bundle\site-packages\azure\storage\_http\httpclient.py", line 181, in perform_request
    self.send_request_body(connection, request.body)
  File ".\Script Bundle\site-packages\azure\storage\_http\httpclient.py", line 143, in send_request_body
    connection.send(request_body)
  File ".\Script Bundle\site-packages\azure\storage\_http\requestsclient.py", line 81, in send
    self.response = self.session.request(self.method, self.uri, data=request_body, headers=self.headers, timeout=self.timeout)
  File "C:\pyhome\lib\site-packages\requests\sessions.py", line 464, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\pyhome\lib\site-packages\requests\sessions.py", line 576, in send
    r = adapter.send(request, **kwargs)
  File "C:\pyhome\lib\site-packages\requests\adapters.py", line 431, in send
    raise SSLError(e, request=request)
SSLError: The write operation timed out

---------- End of error message from Python  interpreter  ----------
Start time: UTC 02/10/2016 15:33:00
End time: UTC 02/10/2016 15:34:18

Куда ведет мое текущее исследование, так это то, что существует зависимость отrequests Пакет Python вazure-storage. requests имеет известную ошибку в Python 2.7 для вызова новых протоколов SSL. Не уверен, но я сейчас копаюсь в этом районе.

ОБНОВЛЕНИЕ 2: Этот код прекрасно работает внутри ноутбука Python 3 Jupyter. Кроме того, если я сделаю Контейнер BLOB-объектов открытым для общего доступа, я могу напрямую ПРОЧИТАТЬ из Контейнера через URL-адрес. Например:df = pd.read_csv("https://mystorageaccount.blob.core.windows.net/upload/test.csv") легко загружает файл из хранилища BLOB-объектов. Тем не менее, я не могу использоватьazure.storage.blob.BlobService читать из того же файла.

ОБНОВЛЕНИЕ 3: Дэн, в комментарии ниже, предложил мне попробовать от ноутбуков Jupyterразмещено на Azure ML, Я работал с локальной записной книжкой Jupyter (см. Обновление 2 выше).тем не мениепроисходит сбой при запуске из ноутбука Azure ML, и ошибки указывают наrequires пакет снова. Мне нужно найти известные проблемы с этим пакетом, но из моего прочтения известная проблема связана с urllib3 и касается только Python 2.7, а НЕ любых версий Python 3.x. И это было запущено в записной книжке Python 3.x. Хмм.

ОБНОВЛЕНИЕ 4: как Дэн отмечает ниже, это может быть проблема с сетью Azure ML, так какExecute Python Script является относительно новым и только что получил поддержку сети. Однако я также проверил это на веб-задании службы приложений Azure, которое работает на совершенно другой платформе Azure. (Он также находится в совершенно другом дистрибутиве Python и поддерживает как Python 2.7, так и 3.4 / 5, но только в 32-битной версии - даже на 64-битных машинах.) Там также происходит сбой кода сInsecurePlatformWarning сообщение.

[02/08/2016 15:53:54 > b40783: SYS INFO] Run script 'ListenToQueue.py' with script host - 'PythonScriptHost'
[02/08/2016 15:53:54 > b40783: SYS INFO] Status changed to Running
[02/08/2016 15:54:09 > b40783: INFO] test.csv
[02/08/2016 15:54:09 >, b40783: ERR ] D:\home\site\wwwroot\env\Lib\site-packages\requests\packages\urllib3\util\ssl_.py:315: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
[02/08/2016 15:54:09 > b40783: ERR ]   SNIMissingWarning
[02/08/2016 15:54:09 > b40783: ERR ] D:\home\site\wwwroot\env\Lib\site-packages\requests\packages\urllib3\util\ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
[02/08/2016 15:54:09 > b40783: ERR ]   InsecurePlatformWarning
[02/08/2016 15:54:09 > b40783: ERR ] D:\home\site\wwwroot\env\Lib\site-packages\requests\packages\urllib3\util\ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
[02/08/2016 15:54:09 > b40783: ERR ]   InsecurePlatformWarning

Ответы на вопрос(3)

Ваш ответ на вопрос