ImportError:使用Azure后端时无法导入名称“BlobService”

时间:2017-10-12 01:50:28

标签: python django azure azure-storage-blobs

我按照这些说明将Azure设置为我的后端服务: http://django-storages.readthedocs.io/en/latest/backends/azure.html

还为此文档添加了其他包: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-python-how-to-use-blob-storage

获取此错误: 回溯(最近一次调用最后一次):

  File "/usr/local/lib/python3.6/site-packages/storages/backends/azure_storage.py", line 23, in <module>
    from azure.storage.blob.blobservice import BlobService
ModuleNotFoundError: No module named 'azure.storage.blob.blobservice'

...

  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/usr/local/lib/python3.6/site-packages/storages/backends/azure_storage.py", line 26, in <module>
    from azure.storage import BlobService
ImportError: cannot import name 'BlobService'
[12/Oct/2017 01:38:00] "POST /upload HTTP/1.1" 500 18034

我的pip3冻结看起来像这样:

(venv) Mikes-MacBook:drhazelapp mikebz$ pip3 freeze | grep azure
azure==2.0.0
azure-batch==3.0.0
azure-common==1.1.8
azure-datalake-store==0.0.17
azure-graphrbac==0.30.0
azure-keyvault==0.3.7
azure-mgmt==1.0.0
azure-mgmt-authorization==0.30.0
azure-mgmt-batch==4.0.0
azure-mgmt-cdn==0.30.3
azure-mgmt-cognitiveservices==1.0.0
azure-mgmt-compute==1.0.0
azure-mgmt-containerregistry==0.2.1
azure-mgmt-datalake-analytics==0.1.6
azure-mgmt-datalake-nspkg==2.0.0
azure-mgmt-datalake-store==0.1.6
azure-mgmt-devtestlabs==2.0.0
azure-mgmt-dns==1.0.1
azure-mgmt-documentdb==0.1.3
azure-mgmt-iothub==0.2.2
azure-mgmt-keyvault==0.31.0
azure-mgmt-logic==2.1.0
azure-mgmt-monitor==0.2.1
azure-mgmt-network==1.0.0
azure-mgmt-nspkg==2.0.0
azure-mgmt-rdbms==0.1.0
azure-mgmt-redis==4.1.0
azure-mgmt-resource==1.1.0
azure-mgmt-scheduler==1.1.3
azure-mgmt-sql==0.5.3
azure-mgmt-storage==1.0.0
azure-mgmt-trafficmanager==0.30.0
azure-mgmt-web==0.32.0
azure-nspkg==2.0.0
azure-servicebus==0.21.1
azure-servicefabric==5.6.130
azure-servicemanagement-legacy==0.20.6
azure-storage==0.34.3
azure-storage-blob==0.37.0
azure-storage-common==0.37.0
azure-storage-file==0.37.0
azure-storage-nspkg==2.0.0
msrestazure==0.4.14

5 个答案:

答案 0 :(得分:6)

azure-storage-blob的较新版本中,导入BlockBlobService已重命名为BlobServiceClient

将导入语句更新为以下内容可以解决您的问题:

from azure.storage.blob import BlobServiceClient

在文档here中可以看到一个示例。

答案 1 :(得分:1)

奇怪......在Azure官方文档中,它表示您需要from azure.storage.blob import BlockBlobService,但您所做的是from azure.storage.blob.blobservice import BlobServicefrom azure.storage import BlobService

那你为什么不跟着官方文件呢?

答案 2 :(得分:1)

在合并之前,当前的azure存储库不起作用。因此,为了实现这一点,我必须安装一个Django存储的私有分支:

我分叉:https://github.com/guydou/django-storages/tree/upgrade_azure 并指出我自己的回购:

pip3 install -e 'git+https://github.com/mikebz/django-storages.git#egg=upgrade_azure'

然后安装blob库和azure SDK:

pip3 install azure
pip3 install azure-storages==0.34.3

之后配置似乎有效。来自azure的最终要求文件如下: (venv)Mikes-MacBook:drhazelapp mikebz $ pip3 freeze

adal==0.4.7
appnope==0.1.0
asn1crypto==0.23.0
astroid==1.5.3
azure==2.0.0
azure-batch==3.0.0
azure-common==1.1.8
azure-datalake-store==0.0.17
azure-graphrbac==0.30.0
azure-keyvault==0.3.7
azure-mgmt==1.0.0
azure-mgmt-authorization==0.30.0
azure-mgmt-batch==4.0.0
azure-mgmt-cdn==0.30.3
azure-mgmt-cognitiveservices==1.0.0
azure-mgmt-compute==1.0.0
azure-mgmt-containerregistry==0.2.1
azure-mgmt-datalake-analytics==0.1.6
azure-mgmt-datalake-nspkg==2.0.0
azure-mgmt-datalake-store==0.1.6
azure-mgmt-devtestlabs==2.0.0
azure-mgmt-dns==1.0.1
azure-mgmt-documentdb==0.1.3
azure-mgmt-iothub==0.2.2
azure-mgmt-keyvault==0.31.0
azure-mgmt-logic==2.1.0
azure-mgmt-monitor==0.2.1
azure-mgmt-network==1.0.0
azure-mgmt-nspkg==2.0.0
azure-mgmt-rdbms==0.1.0
azure-mgmt-redis==4.1.0
azure-mgmt-resource==1.1.0
azure-mgmt-scheduler==1.1.3
azure-mgmt-sql==0.5.3
azure-mgmt-storage==1.0.0
azure-mgmt-trafficmanager==0.30.0
azure-mgmt-web==0.32.0
azure-nspkg==2.0.0
azure-servicebus==0.21.1
azure-servicefabric==5.6.130
azure-servicemanagement-legacy==0.20.6
azure-storage==0.34.3
certifi==2017.7.27.1
cffi==1.11.2
chardet==3.0.4
cryptography==2.1.1
decorator==4.1.2
Django==1.11.5
django-extensions==1.9.1
-e git+https://github.com/mikebz/django-storages.git@5d073159adc0138f5acef121c2d578f4eba96d7c#egg=django_storages
django-webpack-loader==0.5.0
gunicorn==19.7.1
idna==2.6
ipython==6.2.1
ipython-genutils==0.2.0
isodate==0.6.0
isort==4.2.15
jedi==0.11.0
keyring==10.4.0
lazy-object-proxy==1.3.1
mccabe==0.6.1
msrest==0.4.17
msrestazure==0.4.15
oauthlib==2.0.4
olefile==0.44
parso==0.1.0
pep8==1.7.0
pexpect==4.2.1
pickleshare==0.7.4
Pillow==4.3.0
prompt-toolkit==1.0.15
ptyprocess==0.5.2
pycparser==2.18
Pygments==2.2.0
PyJWT==1.5.3
pylint==1.7.2
python-dateutil==2.6.1
pytz==2017.2
requests==2.18.4
requests-oauthlib==0.8.0
simplegeneric==0.8.1
six==1.10.0
traitlets==4.3.2
urllib3==1.22
wcwidth==0.1.7
whitenoise==3.3.1
wrapt==1.10.11

答案 3 :(得分:1)

当您pip install azure时,您安装了azure-storage 0.34.3(教程1)。当您按照第二个教程进行操作时,您安装了azure-storage-blob 0.37.0。这就是你遇到问题的地方,命名空间中有0.37.0的大量突破性变化:

https://github.com/Azure/azure-storage-python/blob/master/BreakingChanges.md#version-0370

在ChangeLog中看到azure-storage&lt; = 0.36与azure-storage-blob&gt; = 0.37不兼容。你默默地用0.34.0版本替换了一些0.34.3的代码文件。

在你的第二次测试中,你说过你做过:

pip3 install azure-storage-blob
pip3 install azure

包仍然不兼容,但你是以相反的顺序完成的,这次你用0.34.3打破了你的0.37.0版本。这就是它起作用的原因。

TLDR,有人需要更新django-storage以支持azure-storage-blob&gt; = 0.37.0。与此同时,坚持azure-storage&lt; = 0.36并且根本不会安装azure-storage-blob

答案 4 :(得分:0)

我不得不降级到azure-storage-0.20.0以解决问题,新版本无法找到BlobService类。