Beim Lesen diesen Beitrages bekomme ich ein ungutes Gefühl. Da man ja bei Python ständig externe Pakete importiert hier ein Beispiel
###############################################
# Imports
###############################################
import json
import locale
from pathlib import Path
from functools import partial
from dataclasses import dataclass
from pywebio import start_server, config
from pywebio.pin import put_input
from pywebio.session import info as session_info
from pywebio.output import put_text, \
put_table, \
use_scope, \
scroll_to, \
put_markdown, \
put_buttons, \
put_button, \
clear, \
put_info, \
put_error, \
put_html, \
put_tabs, \
toast, \
put_image, \
put_row, \
put_grid, \
put_loading
from pywebio.input import input, \
input_group, \
NUMBER, \
PASSWORD, \
TEXT, \
URL, \
radio
from pywebio_battery import popup_input
import requests as requests # Requests for making network connections.
from bs4 import BeautifulSoup # For extracting data from HTML and XML docs.
Das ist mein Import für ein kleines neues Tool, wo ich mein Portfolio mit anzeigen möchte. Ein wenig Spielerei, aber spannend und ich lerne wieder was dabei.
In diesem Artikel, stehen auch ein paar Pakete, die ich nutze
https://blog.phylum.io/phylum-discovers-revived-crypto-wallet-address-replacement-attack
Ich habe dann mal in der Gruppe PyDDF "Python Meeting Düsseldorf" nachgefragt, wie die Lage ist. Einer der Tipps war dann, VMs bzw. Docker zu benutzen, das ermöglicht ja eine gewisse Trennung vom Haupt-System.
Docker läuft sowieso, dann kann ich das ja mal ausprobieren. Nach vielem Rumprobieren habe ich jetzt aktuelle eine funktionierende Lösung.
Im Projekt gibt es ein dockerfile
FROM python:3.10
# Or any preferred Python version.
ADD main.py .
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales
RUN sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=de_DE.UTF-8
ENV LANG de_DE.UTF-8
RUN pip install requests beautifulsoup4 pywebio pywebio_battery matplotlib
CMD python ./main.py
# Or enter the name of your unique directory and parameter set.
Als nächstes brauchen wir mal folgendes
docker build -t python-imagename .
Danach dann starten mit
docker run -d --rm --publish 7070:7070 --name portfolio python-imagename:latest
Jetzt findet man die Anwendung wie gewohnt unter
http://192.168.3.xxx:7070
Die locales waren eine kleine Herausforderung, ich hoffe das passt jetzt so. Werde ich die Tage noch intensiver beobachten.
Damit das Ganze halbwegs praktikabel ist, habe ich mir ein kleines Script geschrieben.
scraping.sh
#!/bin/bash
### BEGIN INIT INFO
# Provides: scraping
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start:
# Default-Stop:
# Short-Description: scraping
# Description: scraping
### END INIT INFO
case "$1" in
stop)
docker kill portfolio
exit 0
;;
start)
#!/bin/bash
cd /home/frankm/PycharmProjects/scraping/
docker kill portfolio
docker build -t python-portfolio .
docker run -d --rm --publish 7070:7070 --name portfolio python-portfolio:latest
exit 0
;;
*)
echo "Usage: basename $0 {start | stop}" >&2
exit 64
;;
esac
exit 0
Jetzt kann man nach einer Änderung am Code das Script schreiben. Der Docker Container wird gestoppt, falls er läuft. Danach wird das Image neu gebaut und dann gestartet.
Zum Stoppen
./scraping.sh stop
Zum Starten
./scraping.sh start
Das kann man aber, in meinen Augen, nur mit fertigen Anwendungen machen. Wenn man entwickelt, braucht man ständig die Ausgaben auf der Konsole. Das fehlt einem ja dann im Container. Bin gespannt wie sich das weiter entwickelt.
An die Docker Spezialisten draußen im Netz, wenn man das anders bzw. besser macht, bitte ich um einen Kommentar. Danke