
Image gracieuseté des annotations de type boto3, Allie Fitter
À l'heure actuelle, peu de gens écrivent de grands projets Python sans annotation de type. C'est simple et vous permet de détecter un tas d'erreurs même au stade de l'écriture de code, et cela fonctionne très intelligemment. Mais cela vaut la peine d'ajouter boto3 en tant que dépendance , et mypy commence à être plein de messages indiquant que les annotations de type boto3
n'existent pas dans la nature.
, boto3 botostubs. , mypy
.
boto3-type-annotations, , mypy
.
boto3
, ?
mypy
, boto3 1.11.9
EC2, DynamoDB S3. Python 3.6.9 . , , boto3-stubs 1.11.9.x .
pip install boto3-stubs[s3,ec2,dynamodb]==1.11.9.0
python -m mypy_boto3
… ! mypy
, , , boto3
, .
- !
, .
VSCode , . boto3.client
, boto3_session.client
,boto3.resource
, boto3_session.resource
, client.get_waiter
client.get_paginator
.
PyCharm - , 15 , .
import boto3
from mypy_boto3 import dynamodb
client: dynamodb.DynamoDBClient = boto3.client("dynamodb")
client.query("my_table")
import boto3
from mypy_boto3 import s3
client: s3.S3Client = boto3.client("s3")
client.create_bucket(Bucket="bucket")
client.get_object(Bucket="bucket")
client.get_object(Bucket="bucket", Key=None)
resource: s3.S3ServiceResource = boto3.Session(region_name="us-west-1").resource("s3")
bucket = resource.Bucket("bucket")
bucket.upload_file(Filename="my.txt", key="my-txt")
waiter: s3.BucketExistsWaiter = client.get_waiter("bucket_exists")
paginator: s3.ListMultipartUploadsPaginator = client.get_paginator(
"list_multipart_uploads"
)
mypy-boto3-builder - boto3
. boto3
, .
json
- botocore , boto3
.
, , .
post-install , whl-. ?
Étant donné que de boto3
nombreuses méthodes et classes dans le même fichier sont appelées les mêmes, pour le bon fonctionnement des annotations, le module s'importe lui-même. Cela ne fonctionne pas dans Python 3.6.5 et ne semble pas très bon. Quelles sont les alternatives?
Et enfin, si tout va bien avec C #, vous pouvez ajouter une prise en charge littérale aux fonctions surchargées pour le serveur de langage Python afin que tout fonctionne également en VSCode. Je n'ai pas pu et j'ai abandonné.
Merci à tous!