Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Thumbor 7 #103

Merged
merged 86 commits into from
May 6, 2023
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
51000af
refs #67 Thumbor 7.0.0a2
Feb 29, 2020
87ba78c
fixing procs to 1, to bypass circus issue... tests might pass?
Feb 29, 2020
354a14f
updated semaphore vars
Feb 29, 2020
701c060
Revert "updated semaphore vars"
Feb 29, 2020
f5d9b72
kk-multiprocess build
Mar 7, 2020
2c08977
updating benchmarks
Mar 7, 2020
531483d
merging multiproc + 7a2 => 7a5
May 10, 2020
d0e0935
fallback values
May 10, 2020
bd0a981
allowing custom commands in entrypoint
May 10, 2020
f8d4f41
fixed command
May 10, 2020
0f4f151
empty commit
May 10, 2020
0eb9938
Restore OS packages
gingerlime Aug 22, 2021
2ddabaf
Currently working without using tc-aws
heynemann Jan 7, 2022
0c65988
Merge branch 'heynemann-thumbor-7a5' into thumbor-7a5
Jan 8, 2022
5654566
preparing for thumbor 7.0
Jan 8, 2022
117f688
removed proc-requirements copy
Jan 8, 2022
4f5ed01
I think we still need envtpl for the config
Jan 8, 2022
c241912
moving lib-requirements to requirements
Jan 8, 2022
1e6bf20
using python 3.9
Jan 8, 2022
6819c56
Merge branch 'master' into thumbor-7
gingerlime Jan 9, 2022
c7d48f0
cleanup; switching to nginx-proxy/nginx-proxy (github project moved)
Jan 9, 2022
d29863c
removed build for deprecated nginx-proxy
Jan 9, 2022
209ebe0
apparently, the docker hub image still uses jwilder...
Jan 9, 2022
6a2a3b0
Merge branch 'master' of github.com:MinimalCompact/thumbor into thumb…
Jan 9, 2022
c1801a2
update cairosvg
Jan 21, 2022
813cee4
envtpl version to 0.7.2 to fix AttributeError: module 'jinja2' has no…
mbarouski Jun 28, 2022
d337145
Merge pull request #106 from maximka777/thumbor-7
gingerlime Jun 28, 2022
c1dd14e
Create GHA for building
danquack Apr 25, 2023
338f36a
bump to thumbor 7.4.7 (latest)
danquack Apr 25, 2023
13384d6
Merge pull request #118 from danquack/gha
gingerlime Apr 25, 2023
a1bc573
Merge branch 'thumbor-7' into deps
gingerlime Apr 25, 2023
e0cb21e
Merge pull request #119 from danquack/deps
gingerlime Apr 25, 2023
7d244c9
moved requirements to txt ; updated community versions to latest with…
Apr 26, 2023
b57595c
fixed typos
Apr 26, 2023
e520fa5
added bats tests to github actions
Apr 26, 2023
319e988
split bats install and run
Apr 26, 2023
2dbff17
nginx-proxy-cache image might be required for testing
Apr 26, 2023
d2a44f7
fixes bats tests (#120)
gingerlime Apr 26, 2023
971699d
refactor github action to run sequentially (#121)
gingerlime Apr 28, 2023
da93faf
testing thumbor-7 push
Apr 28, 2023
fe1fd8e
removed semaphore ; update push for thumbor-7
Apr 28, 2023
d334975
explicit branch names
Apr 28, 2023
d461962
adding gha caching
Apr 28, 2023
8a6381d
switching to ghcr.io
Apr 28, 2023
1196f56
login to ghcr.io
Apr 28, 2023
263740c
testing push
Apr 28, 2023
4f63c79
trying explicit username/repo name
Apr 28, 2023
945aba6
Revert "trying explicit username/repo name"
Apr 28, 2023
b6b95b5
Revert "testing push"
Apr 28, 2023
5224474
Revert "Revert "testing push""
Apr 28, 2023
e273779
fix tags
Apr 28, 2023
53f564e
removing local tag for push
Apr 28, 2023
2112da5
change order
Apr 28, 2023
5152050
explicit registry name
Apr 28, 2023
f8610f5
another attempt to push to ghcr (using personal access token)
Apr 28, 2023
a95da14
another attempt with GITHUB_TOKEN
Apr 28, 2023
6e148cd
switching to personal access token
Apr 28, 2023
4a31dc4
docker login
danquack Apr 28, 2023
39fe365
use action
danquack Apr 28, 2023
a54933e
Merge pull request #123 from danquack/patch-1
gingerlime Apr 28, 2023
f40ef14
One more pass at trying to get this to work
danquack Apr 28, 2023
5f59538
Merge pull request #125 from MinimalCompact/danquack-patch-2
gingerlime Apr 28, 2023
de1c5b4
Revert "One more pass at trying to get this to work"
Apr 28, 2023
5efb523
Revert "use action"
Apr 28, 2023
2e691f4
Revert "docker login"
Apr 28, 2023
b1bba12
Remove Multi Arch support from SIMD (#126)
danquack Apr 28, 2023
b5b0fe7
updated docs + recipes for GHCR
Apr 28, 2023
82ab38a
adding retry to tests (setup using docker-compose can be unpredictable)
Apr 28, 2023
354ad6c
local tags for testing
Apr 28, 2023
3e573cc
base tag for testing
Apr 28, 2023
3247b6d
explicitly using :test tags
Apr 28, 2023
b402d76
improve workflow to login to ghcr only when pushing
Apr 29, 2023
ad2d62d
showing available images
Apr 29, 2023
94715bc
better caching?
Apr 29, 2023
1b5a064
adding more info before running tests about images
Apr 29, 2023
4ec37b5
switched from imgur (returns 429) to freeimage.host
Apr 29, 2023
79441f1
fixes tests with new cached data
Apr 29, 2023
35570f2
updated docs to remove imgur and use freeimage.host
Apr 29, 2023
2a4b61b
Overwrite host address 0.0.0.0 with THUMBOR_HOST (#129)
gingerlime Apr 29, 2023
10a70ac
refs ghcr.io
Apr 29, 2023
9da0893
typo
Apr 29, 2023
4e06a62
cleanup circus
Apr 29, 2023
1cafbfd
syncing remotecv with explicit thumbor version
Apr 29, 2023
8478102
tweak build script to add pull and adjust platform for remotecv
Apr 29, 2023
5171f81
should fix remotecv problem
Apr 29, 2023
6987d1d
getting ready to merge to master
May 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 5 additions & 1 deletion .semaphore/semaphore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,12 @@ blocks:
- echo "Docker build ..."
- "./build && echo Build done"
- bash -c "for filename in tests/*.bats; do sudo bats --tap \$filename || exit 1; done"
- >-
( [ "$SEMAPHORE_GIT_BRANCH" == "thumbor-7" ] && \
[ "${SEMAPHORE_GIT_REF_TYPE}" != "pull-request" ] && \
./push $SEMAPHORE_GIT_BRANCH && echo Push $SEMAPHORE_GIT_BRANCH done ) || echo "Not pushed $SEMAPHORE_GIT_BRANCH"
- echo "Docker push (only master)..."
- >-
( [ "$SEMAPHORE_GIT_BRANCH" == "master" ] && \
[ "${SEMAPHORE_GIT_REF_TYPE}" != "pull-request" ] && \
./push && echo Push done ) || echo "Not pushed"
./push $SEMAPHORE_GIT_BRANCH && echo Push $SEMAPHORE_GIT_BRANCH done ) || echo "Not pushed $SEMAPHORE_GIT_BRANCH"
4 changes: 2 additions & 2 deletions benchmarks/locust/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM python:3.6
FROM python:3.8

RUN python3.6 -m pip install locustio==0.11.0
RUN python3.8 -m pip install locustio==0.14.5

EXPOSE 8089
EXPOSE 5557
Expand Down
6 changes: 2 additions & 4 deletions benchmarks/locust/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
version: "3"
services:
thumbor:
image: minimalcompact/thumbor
image: minimalcompact/thumbor:7
environment:
# we can control the number of processes and threads via ENV
- THUMBOR_NUM_PROCESSES=${THUMBOR_NUM_PROCESSES:-1}
- ENGINE_THREADPOOL_SIZE=${ENGINE_THREADPOOL_SIZE:-0}
# this would allow CORS from any origin (you can restrict to specific origins if you want)
- CORS_ALLOW_ORIGIN=*
# returns a webp image if browser Accept headers match
Expand All @@ -27,7 +26,6 @@ services:
environment:
- THUMBOR_DOCKER_PROCS=${THUMBOR_DOCKER_PROCS:-1}
- THUMBOR_NUM_PROCESSES=${THUMBOR_NUM_PROCESSES:-1}
- ENGINE_THREADPOOL_SIZE=${ENGINE_THREADPOOL_SIZE:-0}
volumes:
- ./scripts:/opt/scripts
- ./reports:/opt/reports
Expand All @@ -41,7 +39,7 @@ services:
--master
--expect-slaves 3
--only-summary
--csv=/opt/reports/${THUMBOR_DOCKER_PROCS}-${THUMBOR_NUM_PROCESSES}-${ENGINE_THREADPOOL_SIZE}"
--csv=/opt/reports/${THUMBOR_DOCKER_PROCS}-${THUMBOR_NUM_PROCESSES}"
# this is the locust slave. We can control the number of slaves using docker-compose scale
locust-slave:
build:
Expand Down
27 changes: 4 additions & 23 deletions benchmarks/locust/run_benchmark
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,18 @@ docker-compose build
docker-compose down

for procs in 1 3 6 9; do
for threads in 0 3 6; do
export THUMBOR_DOCKER_PROCS=1
for docker_procs in 1 3 6 9; do
export THUMBOR_DOCKER_PROCS=$docker_procs
export THUMBOR_NUM_PROCESSES=$procs
export ENGINE_THREADPOOL_SIZE=$threads

echo
echo "***************** BEGIN BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo "***************** BEGIN BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes ********************"
echo
docker-compose up -d --scale locust-slave=3 --scale thumbor=${THUMBOR_DOCKER_PROCS} --force-recreate --always-recreate-deps --renew-anon-volumes
docker-compose logs -f locust
docker-compose down
echo
echo "***************** END BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo
done
done

for procs in 3 6 9; do
for threads in 0 3 6; do
export THUMBOR_DOCKER_PROCS=$procs
export THUMBOR_NUM_PROCESSES=1
export ENGINE_THREADPOOL_SIZE=$threads

echo
echo "***************** BEGIN BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo
docker-compose up -d --scale locust-slave=3 --scale thumbor=${THUMBOR_DOCKER_PROCS} --force-recreate --always-recreate-deps --renew-anon-volumes
docker-compose logs -f locust
docker-compose down
echo
echo "***************** END BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes and ${ENGINE_THREADPOOL_SIZE} threads ********************"
echo "***************** END BENCHMARK WITH ${THUMBOR_DOCKER_PROCS} Docker processes, ${THUMBOR_NUM_PROCESSES} thumbor processes ********************"
echo
done
done
Expand Down
3 changes: 2 additions & 1 deletion benchmarks/locust/scripts/benchmark.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from locust import HttpLocust, TaskSet, task
from locust import HttpLocust, TaskSet, task, between


class HealthTaskSet(TaskSet):
Expand All @@ -17,3 +17,4 @@ def fit_in(self):

class Benchmark(HttpLocust):
task_set = SimpleTaskSet
wait_time = between(0, 0.1)
13 changes: 7 additions & 6 deletions push
Original file line number Diff line number Diff line change
@@ -1,29 +1,30 @@
#!/bin/bash

BRANCH=$1
# introspecting version by running the built image
THUMBOR_VERSION=`docker run --rm minimalcompact/thumbor bash -c "pip freeze |grep ^thumbor== | cut -d= -f 3"`
echo "THUMBOR VERSION: $THUMBOR_VERSION"

echo "--> pushing minimalcompact/thumbor:simdsse4"
docker push minimalcompact/thumbor:latest-simd-sse4
[ "$BRANCH" == "master" ] && docker push minimalcompact/thumbor:latest-simd-sse4
docker push minimalcompact/thumbor:$THUMBOR_VERSION-simd-sse4

echo "--> pushing minimalcompact/thumbor:simdavx2"
docker push minimalcompact/thumbor:latest-simd-avx2
[ "$BRANCH" == "master" ] && docker push minimalcompact/thumbor:latest-simd-avx2
docker push minimalcompact/thumbor:$THUMBOR_VERSION-simd-avx2

echo "--> pushing minimalcompact/thumbor-nginx-proxy (DEPRECATED)"
docker push minimalcompact/thumbor-nginx-proxy:latest
[ "$BRANCH" == "master" ] && docker push minimalcompact/thumbor-nginx-proxy:latest
docker push minimalcompact/thumbor-nginx-proxy:$THUMBOR_VERSION

echo "--> pushing minimalcompact/thumbor-nginx-proxy-cache"
docker push minimalcompact/thumbor-nginx-proxy-cache:latest
[ "$BRANCH" == "master" ] && docker push minimalcompact/thumbor-nginx-proxy-cache:latest
docker push minimalcompact/thumbor-nginx-proxy-cache:$THUMBOR_VERSION

echo "--> pushing minimalcompact/remotecv"
docker push minimalcompact/remotecv:latest
[ "$BRANCH" == "master" ] && docker push minimalcompact/remotecv:latest
docker push minimalcompact/remotecv:$THUMBOR_VERSION

echo "--> pushing minimalcompact/thumbor"
docker push minimalcompact/thumbor:latest
[ "$BRANCH" == "master" ] && docker push minimalcompact/thumbor:latest
docker push minimalcompact/thumbor:$THUMBOR_VERSION
49 changes: 17 additions & 32 deletions thumbor/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM python:2
FROM python:3.8
gingerlime marked this conversation as resolved.
Show resolved Hide resolved

LABEL maintainer="MinimalCompact"

Expand Down Expand Up @@ -30,46 +30,31 @@ ENV SHELL bash
ENV WORKON_HOME /app
WORKDIR /app

RUN pip install thumbor==7.0.0
COPY requirements.txt /app/requirements.txt
RUN pip install --trusted-host None --no-cache-dir \
-r /app/requirements.txt
RUN pip install --trusted-host None --no-cache-dir -r /app/requirements.txt
RUN pip install --no-dependencies tc-aws==6.2.15
RUN pip install --no-dependencies tc-core==0.4.1
RUN pip install --no-dependencies tc-shortener==0.2.2

COPY conf/thumbor.conf.tpl /app/thumbor.conf.tpl

ADD conf/circus.ini.tpl /etc/
RUN mkdir /etc/circus.d /etc/setup.d
ADD conf/thumbor-circus.ini.tpl /etc/circus.d/

ARG SIMD_LEVEL
# workaround for https://github.com/python-pillow/Pillow/issues/3441
# https://github.com/thumbor/thumbor/issues/1102
RUN PILLOW_VERSION=$(python -c 'import PIL; print(PIL.__version__)') ; \
if [ -z "$SIMD_LEVEL" ]; then \
CC="cc" && PILLOW_PACKET="pillow" && PILLOW_VERSION_SUFFIX="" ;\
else \
CC="cc -m$SIMD_LEVEL" && PILLOW_PACKET="pillow-SIMD" && PILLOW_VERSION_SUFFIX=".post99" ;\
# hardcoding to overcome https://github.com/MinimalCompact/thumbor/pull/37#issuecomment-514771902
PILLOW_VERSION="5.2.0" ; \
fi ; \

pip uninstall -y pillow || true && \
CC=$CC \
# https://github.com/python-pillow/Pillow/pull/3241
LIB=/usr/lib/x86_64-linux-gnu/ \
# https://github.com/python-pillow/Pillow/pull/3237 or https://github.com/python-pillow/Pillow/pull/3245
INCLUDE=/usr/include/x86_64-linux-gnu/ \
pip install --no-cache-dir -U --force-reinstall --no-binary=:all: "${PILLOW_PACKET}<=${PILLOW_VERSION}${PILLOW_VERSION_SUFFIX}" \
# --global-option="build_ext" --global-option="--debug" \
--global-option="build_ext" --global-option="--enable-lcms" \
--global-option="build_ext" --global-option="--enable-zlib" \
--global-option="build_ext" --global-option="--enable-jpeg" \
--global-option="build_ext" --global-option="--enable-tiff"
RUN PILLOW_VERSION=$(python -c 'import PIL; print(PIL.__version__)') ; \
if [ "$SIMD_LEVEL" ]; then \
pip uninstall -y pillow || true && \
CC="cc -m$SIMD_LEVEL" pip install --no-cache-dir -U --force-reinstall --no-binary=:all: "pillow-SIMD<=${PILLOW_VERSION}.post99" \
# --global-option="build_ext" --global-option="--debug" \
--global-option="build_ext" --global-option="--enable-lcms" \
--global-option="build_ext" --global-option="--enable-zlib" \
--global-option="build_ext" --global-option="--enable-jpeg" \
--global-option="build_ext" --global-option="--enable-tiff" ; \
fi ;

COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]

# running thumbor multiprocess via circus by default
# to override and run thumbor solo, set THUMBOR_NUM_PROCESSES=1 or unset it
CMD ["circus"]
CMD ["thumbor", "--port=$THUMBOR_PORT", "-l ${LOG_LEVEL:-debug}", "--processes=${THUMBOR_NUM_PROCESSES:-1}"]

EXPOSE 80 8888
2 changes: 2 additions & 0 deletions thumbor/conf/thumbor.conf.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,8 @@ STORES_CRYPTO_KEY_FOR_EACH_IMAGE = {{ STORES_CRYPTO_KEY_FOR_EACH_IMAGE | default
## Defaults to: /tmp/thumbor/storage
FILE_STORAGE_ROOT_PATH = '{{ FILE_STORAGE_ROOT_PATH | default('/data/storage') }}'

RESULT_STORAGE_FILE_STORAGE_ROOT_PATH = '{{ RESULT_STORAGE_FILE_STORAGE_ROOT_PATH | default('/data/result-storage') }}'

################################################################################


Expand Down
14 changes: 3 additions & 11 deletions thumbor/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
# To disable warning libdc1394 error: Failed to initialize libdc1394
ln -s /dev/null /dev/raw1394

envtpl /etc/circus.ini.tpl --allow-missing --keep-template
envtpl /etc/circus.d/thumbor-circus.ini.tpl --allow-missing --keep-template

if [ ! -f /app/thumbor.conf ]; then
envtpl /app/thumbor.conf.tpl --allow-missing --keep-template
fi
Expand All @@ -20,14 +17,9 @@ if [ -z ${THUMBOR_PORT+x} ]; then
THUMBOR_PORT=80
fi

if [ "$1" = 'thumbor' ] || [ "$1" = 'circus' ]; then
if [ "${THUMBOR_NUM_PROCESSES:-1}" -gt "1" ]; then
echo "---> Starting thumbor circus with ${THUMBOR_NUM_PROCESSES} processes..."
exec /usr/local/bin/circusd /etc/circus.ini
else
echo "---> Starting thumbor solo..."
exec python -m thumbor/server --port=$THUMBOR_PORT --conf=/app/thumbor.conf $LOG_PARAMETER
fi
if [ "$1" = 'thumbor' ]; then
echo "---> Starting thumbor with ${THUMBOR_NUM_PROCESSES:-1} processes..."
exec thumbor --port=$THUMBOR_PORT --conf=/app/thumbor.conf $LOG_PARAMETER --processes=${THUMBOR_NUM_PROCESSES:-1}
fi

exec "$@"
29 changes: 8 additions & 21 deletions thumbor/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,24 +1,11 @@
envtpl==0.6.0
circus==0.15.0
circus-web==1.0.0
boto==2.48.0
botocore==1.12.253
dateutils==0.6.6
numpy==1.14.3
remotecv==2.2.2
opencv-engine==1.0.1
thumbor==6.7.0
remotecv==3.0.0
boto==2.49.0
tornado-botocore==1.5.0
tc-aws==6.2.10
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@heynemann I guess we still need some of the libraries here with thumbor 7 ? which ones? and which versions?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created a new library called thumbor-aws we can use until tc-aws gets updated to python3. https://github.com/thumbor/thumbor-aws

The problem with urllib2 is that tc-aws is not python3 compliant. https://stackoverflow.com/questions/2792650/import-error-no-module-name-urllib2

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so should we add thumbor-aws to requirements.txt ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also, correct me if I'm wrong, but wouldn't this require a change to the configs? e.g. if someone uses LOADER=tc_aws.loaders.s3_loaders they would need to change it? if so, is there a way to make thumbor-aws backwards compatible, so it accepts the "old" config directives?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep, I meant as an additional lib to the docker image :) That way people who want can use it while tc-aws is not compatible.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is :) will work on making it more compatible later...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great. What's the next step here then? I'm not sure I completely follow :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@heynemann is all this resolved since tc_aws 7.0.2 works with Thumbor 7?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I updated tc-aws to 7.0.2. There's a new thumbor 7.4.7 image on docker hub. Can you test it? ideally with tc-aws. I think this should solve the urllib2 issue.

tc-core==0.4.0
tc-shortener==0.2.2
raven==6.7.0
thumbor-memcached==5.1.0
tc-mongodb==5.1.0
tc-redis==1.0.1
thumbor-cloud-storage==3.0.0
pgmagick==0.7.4
graphicsmagick-engine==0.1.1
python-dateutil
dateutils==0.6.12
shortuuid==1.0.8
redis==3.5.3
raven==6.10.0
cairosvg==1.0.22
gingerlime marked this conversation as resolved.
Show resolved Hide resolved
opencv-python==4.1.0.25
tc_prometheus
pycurl==7.44.1