環境
- Language Server version: 2021.2.3
- OS : Windows
- Python version 3.9
内容
インポートは正常に機能しますがfrom requests.packages.urllib3.util.retry import Retry
に対して「reportMissingModuleSource」の警告が出てしまう
解決方法
from requests.packages.urllib3.util.retry import Retry
を
from urllib3.util.retry import Retry
に修正するだけ
再現方法
仮想環境を作成 requestsモジュールをインポート
python -m venv venv
.\venv\Scripts\activate.bat
pip install requests
コード
from requests.packages.urllib3.util.retry import Retry
r = Retry
print(r)
実行
>python test.py
<class 'urllib3.util.retry.Retry'>
インポートは正常にできていることがわかる
「reportMissingModuleSource」の警告
pylance(pyright)では以下のような警告が出てしまう
原因調査
ソースを見てみると
requests/packages/urllib3/util/retry.pyがあると期待してたが
実際にはrequests/packages.pyのみで以下の記述があった
import sys
# This code exists for backwards compatibility reasons.
# I don't like it either. Just look the other way. :)
for package in ('urllib3', 'idna', 'chardet'):
locals()[package] = __import__(package)
# This traversal is apparently necessary such that the identities are
# preserved (requests.packages.urllib3.* is urllib3.*)
for mod in list(sys.modules):
if mod == package or mod.startswith(package + '.'):
sys.modules['requests.packages.' + mod] = sys.modules[mod]
# Kinda cool, though, right?
これでrequests.packages.urllib3.
を urllib3.
に読み替えているのでimportは正常におこなえてpylanceがrequests.packages.urllib3.util.retryの実際のソースを見つけることはが出来きずに警告が出てい理由が分かる
なので解決方法としてはどうせ読み替えられるのでfrom urllib3.util.retry import Retry
でインポートするのがいいのかもしれません。
ほかに解決策があれば