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/"
Это должно работать!