web-dev-qa-db-ja.com

ImportError:Azureバックエンドを使用している場合、名前 'BlobService'をインポートできません

次の手順に従って、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
7
mikebz

pip install Azureを実行すると、Azure-storage 0.34.3がインストールされます(チュートリアル1)。 2番目のチュートリアルに従ったときに、Azure-storage-blob 0.37.0をインストールしました。ここで問題が発生しました。名前空間の0.37.0で大幅な重大な変更があります。

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

ChangeLogで、Azure-storage <= 0.36がAzure-storage-blob> = 0.37と互換性がないことを確認してください。 0.34.3のコードファイルを0.37.0バージョンにサイレントに置き換えました。

2回目のテストで、次のように述べました。

pip3 install Azure-storage-blob
pip3 install Azure

パッケージにはまだ互換性がありませんが、逆の順序で実行しました。今回は、0.37.0バージョンを0.34.3バージョンでクラッシュさせました。それが機能する理由です。

TLDR、誰かがAzure-storage-blob> = 0.37.0をサポートするようにDjango-storagesを更新する必要があります。それまでの間、Azure-storage <= 0.36に固執し、Azure-storage-blobをまったくインストールしないでください。

4
Laurent Mazuel

Azure-storage-blobの新しいバージョンでは、インポートBlockBlobServiceの名前がBlobServiceClientに変更されました。

インポートステートメントを以下に更新すると、問題が解決するはずです。

from Azure.storage.blob import BlobServiceClient

この例は、ドキュメント ここ で見ることができます。

1
Adam T

問題を修正したAzure-storage-0.20.0にダウングレードする必要がありましたが、新しいバージョンではBlobServiceクラスが見つかりませんでした。

1
StackEdd

マージする前は、現在の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ライブラリとAzureSDKをインストールします。

pip3 install Azure
pip3 install Azure-storages==0.34.3

その後、構成は機能しているように見えました。 Azureからの最終的な要件ドキュメントは次のとおりです。(venv)Mikes-MacBook:drhazelapp mikebz $ pip3freeze

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
1
mikebz

奇妙な... Azureの公式ドキュメントでは、from Azure.storage.blob import BlockBlobService、しかしあなたがしたことはfrom Azure.storage.blob.blobservice import BlobServiceおよびfrom Azure.storage import BlobService

では、公式ドキュメントに従わないのはなぜですか?

0
Sraw