Um nicht ständig einzelne Python Pakete nachzuinstallieren, bietet sich an in Python eine Setup Datei zu schreiben. Hier in diesem Beispiel habe ich einen Python Skript geschrieben, das mir es ermöglicht, die Pakete, die ich ständig benötige nach Ausführung zu installieren oder zu updaten.

Was macht dieses Skript?

  1. Es überprüft das jeweilige Betriebssystem mit dem Modul platform und legt die erforderliche Python-Version basierend auf dem System fest. Wenn das System nicht erkannt wird, gibt das Skript eine Fehlermeldung aus und beendet sich.
  2. Es überprüft die auf dem System installierte Python-Version mit dem sys-Modul. Wenn die installierte Version niedriger als 3.9 ist, gibt das Skript eine Fehlermeldung aus und beendet sich.
  3. Das Skript erstellt eine Liste von benötigten Paketen mit ihren Versionen.
  4. Für jedes Paket in der Liste überprüft das Skript, ob es bereits installiert und auf dem neuesten Stand ist. Wenn es nicht installiert ist, installiert das Skript es mit pip. Wenn es installiert ist, aber veraltet ist, aktualisiert das Skript es mit pip.
  5. Nachdem das Hauptpaket installiert oder aktualisiert wurde, überprüft das Skript, ob es Unterpakete hat, und installiert oder aktualisiert sie auf die gleiche Weise.
#!/usr/bin/env python

import subprocess
import pkg_resources
from setuptools import find_namespace_packages
import platform
import sys

if platform.system() == 'Windows':
    required_python_version = '3.10.6'
elif platform.system() == 'Linux':
    required_python_version = '3.10.6'
else:
    print(f"Unsupported system: {platform.system()}")
    sys.exit(1)

if sys.version_info < (3, 9):
    print(f"This script requires Python {required_python_version} or later")
    sys.exit(1)

# List of required packages with versions
packages = [
    'beautifulsoup4==4.11.2',
    'selenium==4.8.2',
    'gherkin-official==24.1.0',
    'html-testRunner==1.2.1 ',
    'pytest==7.2.2',
    'pymeter==1.1.0 ',
    'robotframework==6.0.2 ',
    'robotframework-seleniumlibrary==6.0.0 ',
    'robotframework-requests==0.9.0 ',
    'robotframework-sshlibrary==3.7.0 ',
    'splinter==0.19.0 ',
    'behave==1.2.6 ',
    'nose2==0.12.0',
    'Appium-Python-Client==2.8.1 ',
    'requests==2.28.2 ',
    'pyppeteer==1.0.2',
    'Scrapy==2.8.0',
    'python-owasp-zap-v2.4==0.0.21',
    'testify==0.11.0 ',
    'requests-mock==1.10.0',
    'selenium-chrome==0.0.29',
    'selenium-firefox==2.0.7',
    'lettuce==0.2.23 ',
    'docker==6.0.1',
    
    
]

# Loop through each package and check if it is installed and up-to-date
for package in packages:
    try:
        pkg_resources.require(package)
        print(f"{package} is already installed.")
    except pkg_resources.DistributionNotFound:
        print(f"{package} is not installed. Installing...")
        subprocess.check_call(['sudo', 'pip', 'install', '--no-cache-dir', package])
    except pkg_resources.VersionConflict:
        print(f"{package} is installed but outdated. Upgrading...")
        subprocess.check_call(['sudo', 'pip', 'install', '--no-cache-dir', '-U', package])

    # Install all subpackages of the main package
    main_package_name = package.split('==')[0]
    subpackages = find_namespace_packages(include=[f"{main_package_name}.*"])
    for subpackage in subpackages:
        try:
            pkg_resources.require(subpackage)
            print(f"{subpackage} is already installed.")
        except pkg_resources.DistributionNotFound:
            print(f"{subpackage} is not installed. Installing...")
            subprocess.check_call(['sudo', 'pip', 'install', '--no-cache-dir', subpackage])

ich hoffe, dieses Skript hilft euch so wie mir.