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?
- 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.
- 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.
- Das Skript erstellt eine Liste von benötigten Paketen mit ihren Versionen.
- 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.
- 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.
Neueste Kommentare