From 554bb0bbd57e49dda5763a15886b5b23541fac49 Mon Sep 17 00:00:00 2001 From: c00lerxo Date: Tue, 11 Dec 2018 12:18:25 +0100 Subject: [PATCH] Add requirements.txt --- __pycache__/config.cpython-36.pyc | Bin 363 -> 363 bytes .../cat_recognition.cpython-36.pyc | Bin 706 -> 649 bytes pic.jpg | Bin 6741 -> 5714 bytes requirements.txt | 26 ++++++++++++++++++ 4 files changed, 26 insertions(+) create mode 100644 requirements.txt diff --git a/__pycache__/config.cpython-36.pyc b/__pycache__/config.cpython-36.pyc index 9d1452d770a41b564e973b0ef30a03ba4674f292..442ed48a0410cbcaa4af20afd642d1b704688d6f 100644 GIT binary patch delta 15 WcmaFO^qPsyn3tDJ@cTx#R7LQ*(M)kw3z&lQOpS>ev2(RCo?s#q=*N^ z;V4QiF38U-PA%dDav=m4h{XydKq`vC7BX=#@c>~F>*NR~6Ekj@0whgf?I4}EIBatB VQ%ZAE?U+E?*?xwGTQ(E delta 341 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 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..6424acf --- /dev/null +++ b/requirements.txt @@ -0,0 +1,26 @@ +cachetools==3.0.0 +certifi==2018.11.29 +chardet==3.0.4 +Click==7.0 +Flask==1.0.2 +Flask-WTF==0.14.2 +google-api-core==1.6.0 +google-auth==1.6.1 +google-cloud-vision==0.35.1 +googleapis-common-protos==1.5.5 +grpcio==1.17.0 +idna==2.8 +itsdangerous==1.1.0 +Jinja2==2.10 +MarkupSafe==1.1.0 +pkg-resources==0.0.0 +protobuf==3.6.1 +pyasn1==0.4.4 +pyasn1-modules==0.2.2 +pytz==2018.7 +requests==2.21.0 +rsa==4.0 +six==1.12.0 +urllib3==1.24.1 +Werkzeug==0.14.1 +WTForms==2.2.1