Browse Source

trying new Dockerfile

funding-tag
Holger Frey 4 years ago
parent
commit
a294e8a6a5
  1. 12
      Dockerfile
  2. 51
      flit_freeze.py

12
Dockerfile

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
FROM python:3.8-alpine
# install required packages
RUN apk add --no-cache gcc
RUN apk add --no-cache python3-dev
RUN apk add --no-cache libc-dev
@ -7,7 +8,10 @@ RUN apk add --no-cache libffi-dev @@ -7,7 +8,10 @@ RUN apk add --no-cache libffi-dev
RUN apk add --no-cache openssl
RUN apk add --no-cache openssl-dev
# add user that will be used to install and run the application
RUN adduser -D deploy
# switch to the created user and install the application
USER deploy
ENV PATH "$PATH:/home/deploy/.local/bin"
@ -21,4 +25,12 @@ RUN pip install wheel @@ -21,4 +25,12 @@ RUN pip install wheel
RUN pip install -r requirements.txt
RUN flit install --pth-file
# switch back to root to remove header files
USER root
RUN apk delete python3-dev
RUN apk delete libffi-dev
RUN apk delete openssl-dev
# switch to the created user to run the application
USER deploy
CMD ["gunicorn", "--paster", "/app/production.ini", "-b", "0.0.0.0:8000"]

51
flit_freeze.py

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
import re
import subprocess
import sys
import toml
REGEX_PKG = re.compile("^([\w\.\[\],_-]+)")
REGEX_SINGLE = re.compile("([\w\._-]+)")
def get_pip_freeze_list():
freeze_text = subprocess.check_output(
[sys.executable, '-m', 'pip', 'list', '-l', '--format=freeze']
)
freeze_text = freeze_text.decode("utf-8")
return freeze_text.strip().splitlines()
def get_raw_packages_from_pyproject_file(filename="pyproject.toml"):
pyproject = toml.load(filename)
_flit = pyproject["tool"]["flit"]["metadata"]
pyproject_pkgs = _flit["requires"]
pyproject_pkgs += _flit["requires-extra"]["test"]
pyproject_pkgs += _flit["requires-extra"]["dev"]
return pyproject_pkgs
def _parse_package_names(toml_pkgs):
for pkg in toml_pkgs:
group = REGEX_PKG.match(pkg)[0]
yield from REGEX_SINGLE.finditer(group)
def get_package_names(filename="pyproject.toml"):
toml_pkgs = get_raw_packages_from_pyproject_file(filename)
as_string = (m.group() for m in _parse_package_names(toml_pkgs))
lowercased = (item.lower() for item in as_string)
return {item.replace("_", "-") for item in lowercased}
def filter_toml_pkgs_from_freeze_list(freeze_list, toml_pkgs):
for line in freeze_list:
freeze_pkg, _ = line.split("=", 1)
if freeze_pkg.lower() in toml_pkgs:
yield line
def main(toml_file="pyproject.toml"):
freeze_list = get_pip_freeze_list()
toml_pkgs = get_package_names(toml_file)
return filter_toml_pkgs_from_freeze_list(freeze_list, toml_pkgs)
if __name__ == "__main__":
print("\n".join(sorted(main(), key=lambda x: x.lower())))
Loading…
Cancel
Save