我正在部署一些python脚本作为Azure Web Jobs,并遇到了导入一些共享模块(以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)中,我添加以下代码: #Acean将脚本放在比解决方案中显示的级别低一级的位置,因此额外的' ..'!
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 *
这会导致导入错误。有什么想法吗?
答案 0 :(得分:0)
我在本地使用pycharm测试了上面的代码。第二个代码也可以很好地工作。我正在使用python3.5.0。我不确定为什么会出现错误。也许Azure中的python版本问题。希望这会对其他人有所帮助。
答案 1 :(得分:0)
我试图通过运行下面的代码段找出第二份工作的问题原因。
import os
real_path = os.path.realpath('.')
print real_path
当前webjob路径的变量real_path
的结果为D:\local\Temp\jobs\continuous\second\<a generated name like vjvunhav.obn>\
。
注意强>
请参阅the section
Logging
of Wiki-DocWeb 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')
最诚挚的问候。
答案 2 :(得分:0)
执行azure webjob时,目录的内容将复制到网站“data”文件夹的temp子目录中(在根/数据处)。
如果您将zip文件放在与Python脚本相同的文件夹中,它也会被复制。如果没有,你需要使用绝对路径“/ site / wwwroot / mysite / App_data / pylib /”
这应该有用!