Und mal hier parken
PyPi - Pakete ein Sicherheitsproblem?
-
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-attackIch 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.
#!/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