Python: как импортировать zip из другого каталога

Я развернул некоторые скрипты Python в качестве веб-заданий Azure и столкнулся с проблемой импорта некоторых общих модулей (в виде zip-файлов). Все работает нормально, если я копирую zip-файлы в тот же каталог, где находится файл скрипта. Но если я перенесу zip-файлы в другой каталог, все перестает работать.

Теперь по конкретике.

1) Это работает

Структура каталогов:

App_data
  jobs
    continuous
      firstjob
        azure.zip
        job1.py
      secondjob
        azure.zip
        job2.py

В job1.py (и job2.py) я добавляю следующий код:

  sys.path.insert(0, 'azure.zip')
  from azure.storage.blob import *

1) Это НЕ работает

Структура каталогов:

App_data
  pylib
    azure.zip
  jobs
    continuous
      firstjob
        job1.py
      secondjob
        job2.py

В job1.py (и job2.py) я добавляю следующий код: # Azure помещает сценарии на один уровень ниже, чем в решении, поэтому добавляется дополнительный символ ".."!

  lib_path = os.path.realpath('..\..\..\pylib')
  sys.path.insert(0, os.path.join(lib_path, 'azure.zip'))
  # I verified by printing sys.path that the correct path is added for azure.zip
  from azure.storage.blob import *

Это дает ошибку импорта. Есть идеи?

3 ответа

Я проверял ваш код выше в моем локальном, используя pycharm. Второй код также может хорошо работать. Я использую python3.5.0. Я не уверен, почему появляется ошибка. Может быть, проблема версии Python в Azure. Надеюсь, что это поможет другим.

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

import os
real_path = os.path.realpath('.')
print real_path

Результат переменной real_path текущего пути к веб-заданию D:\local\Temp\jobs\continuous\second\<a generated name like vjvunhav.obn>\,

Заметка

Пожалуйста, смотрите раздел Logging Вики-Док Web Jobs знать путь WebJobs - Console.Out and Console.Error,

Таким образом, вы можете попытаться напрямую использовать абсолютный путь /Home/site/wwwroot/App_Data/pylib/azure.zip в коде ниже.

import sys
sys.path.insert(0, '/Home/site/wwwroot/App_Data/pylib/azure.zip')

С уважением.

Когда выполняется веб-задание Azure, содержимое каталога копируется в временный подкаталог папки "data" вашего веб-сайта (в корне /data).

Если вы поместите zip-файл в ту же папку, что и ваш скрипт Python, он тоже будет скопирован. Если нет, вам нужно использовать абсолютный путь "/site/wwwroot/mysite/App_data/pylib/"

Это должно работать!

Другие вопросы по тегам