Automatisches Update des Python-Moduls

Vorwort

Wenn Sie das Python-Modul so lassen, wie es zum Zeitpunkt der Lieferung war, kann die Lieferung hängen bleiben.

Dieses Mal verwenden wir als Beispiel ein Modul namens chromedriver-binary. Die Rolle von chromedriver-binary besteht darin, dass Sie den Chrome-Browser über Python bedienen können. Die Chromedriver-Binärdatei muss für den Chrome-Browser installiert sein. Der Chrome-Browser wird ohne Erlaubnis aktualisiert, sodass Sie nichts tun müssen Schließlich wird chromedriver-binary nicht mehr unterstützt und die Lieferungen werden eingestellt. Sie können das automatische Update des Moduls an einem solchen Ort verwenden.

Gerät ①

Zuvor konnte ich die Methode zum Umleiten des Codes von \ _ \ _ init \ _ \ _. Py von pip verwenden. Es wurde nach der neuen Version von pip unbrauchbar. Wenn Sie sich die Pycharm-Konsole usw. ansehen, finden Sie Anleitungen zur neuen Methode.

Übersetzt "Bitte führen Sie den Befehl pip direkt aus" Ich denke, es war eine solche Geschichte.

Wenn Sie den Mechanismus leicht zusammenfassen können Dies bedeutet, dass Sie "pip install ***" um den Unterprozess herum ausführen sollten. Es wurde bestätigt, dass es auf diese Weise verwendet werden kann, auch wenn Sie venv verwenden.

Wenn das Obige in einer Funktion zusammengefasst ist, sieht es so aus.

installer.py


import sys
import subprocess

    def install_module(module: str, ver: str = None):
        """
Installieren Sie das angegebene Modul (Version kann angegeben werden)
        :param module:Modulname
        :param ver:Modulversion
        :return:
        """
        #Fügen Sie Optionen hinzu, wenn die Version angegeben ist
        if ver is not None:
            ver = f"=={ver}"
        else:
            ver = ""

        #Installationsarbeiten durchführen
        try:
            command = f"pip install {module}{ver}"
            subprocess.call(command, shell=True)
        except Exception:
            sys.exit(-1)

Gerät ②

Geben Sie den obigen Code in das Programm ein und Sie sind fertig! !! Es ist nicht so einfach wie ... Da die Überschrift "Mechanismus ①" lautet, gibt es immer noch ② und ③.

Verwenden Sie es wie folgt.

sample_1.py


try:
  driver = webdriver.Chrome()
except:
  install_module("chromedriver-binary", "86.0.4240.22.0")

Das angegebene Modul wird installiert, wenn es außer ... Der Inhalt der Treibervariablen ist noch nicht festgelegt.

sample_2.py


try:
  driver = webdriver.Chrome()
except:
  install_module("chromedriver-binary", "86.0.4240.22.0")
  driver = webdriver.Chrome()

Wenn ja, scheint es kein Problem im Code zu geben, aber ... driver = webdriver.Chrome () Dieser Code lautet Auf welcher Chromedriver-Binärdatei basiert sie? -Ist es die Chromedriver-Binärdatei zum Zeitpunkt der Deklaration des Imports der Chromedriver-Binärdatei? -Ist es eine neu installierte Chromedriver-Binärdatei? Es hängt von der Implementierungsmethode ab, aber soweit ich überprüft habe, scheint es mit der ersteren zu funktionieren.

Sie können es mithilfe von importlib.reload (Modulname) usw. neu laden. Es gibt auch eine Möglichkeit, die py-Datei selbst neu zu starten. Der Teil, der nicht mit der Hauptzeile des Programms zusammenhängt, wird problematisch. Durch einen Neustart der py-Datei wird der Vorgang der py-Datei einmal beendet. Wenn sich etwas im System befindet, das auf das Ende des Prozesses wartet Es gibt viele problematische Dinge, wie das Starten des nächsten Prozesses, obwohl der Py-Datei-Prozess noch nicht abgeschlossen ist.

Das Einfachste, woran ich dachte, war, die folgende Charge herzustellen.

run.bat


Zur Überprüfung des py-Moduls.py
py für die Hauptverarbeitung.py

Wenn Sie eine Batchdatei verwenden ① Wenn Sie auf das Ende der Verarbeitung warten und mit dem nächsten Schritt fortfahren, warten Sie auf das Ende der Batchdatei, bevor Sie mit dem nächsten Schritt fortfahren. (2) Der Hauptprozess kann optimiert werden, indem die Modulprüfung und der Hauptprozess separate Py-Dateien durchführen. ③ Wenn Sie die Installation mit .py ausführen, um das Modul zu überprüfen Sie können das Modul auf dem neuesten Stand halten, wenn Sie die Hauptverarbeitungs-.py ausführen

Gerät ③

Wenn Sie das Gerät ① und das Gerät ② üben können, können Sie es zum Installieren / Aktualisieren des Moduls verwenden. Leider reicht es immer noch nicht aus, um die Chromedriver-Binärdatei zu aktualisieren. Soweit ich um 2018 überprüft habe, funktioniert chromedriver-binary nicht mit der neuesten Installation. Sie müssen herausfinden, welche Version Sie installieren möchten, und sie als Argument angeben.

So finden Sie die entsprechende Chromedriver-Binärversion heraus

Sie können es sehen, indem Sie der URL von ↓ die Hauptversion des Chrome-Browsers geben und die URL öffnen https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{chromeブラウザのメジャーバージョン} Beispiel: https://chromedriver.storage.googleapis.com/LATEST_RELEASE_86

Wie finden Sie die Version des Chrome-Browsers heraus? C:\Program Files (x86)\Google\Chrome\Application Oder C:\Program Files\Google\Chrome\Application Wenn Sie nachsehen, finden Sie den Ordner mit der Versionsnummer. Sie können die Versionsnummer erhalten, indem Sie diese gut ausschneiden.

Da Sie jedoch nur die Hauptversion benötigen, müssen Sie nur die Hauptversion abrufen, was für Zeichenfolgenoperationen gut ist. Zusammenfassend sieht es so aus.

installer.py


import sys
import re
import requests
import subprocess


   def get_lastrelease_chromedriver():
        """
Holen Sie sich die neueste Version von chromedriver für Ihren Chrome-Browser
        :return:
        """
        #Holen Sie sich die Version des installierten Chrome-Browsers
        try:
            res = subprocess.Popen('dir /B /O-N "C:\Program Files (x86)\Google\Chrome\Application" | findstr "^[0-9].*\>"', stdout=subprocess.PIPE, shell=True).communicate()
            target = str(res[0])
            pattern = r'[0-9]+\.'
            match = re.search(pattern, target)
            if match is None:
                # [Für 32bit]
		res = subprocess.Popen('dir /B /O-N "C:\Program Files\Google\Chrome\Application" | findstr "^[0-9].*\>"', stdout=subprocess.PIPE, shell=True).communicate()

            if len(res) < 1:
                raise Exception("Befehl zur Überprüfung der Chrome-Browserversion fehlgeschlagen")
            target = str(res[0])
            pattern = r'[0-9]+\.'
            match = re.search(pattern, target)
            if match is None:
                sys.exit(-1)
            chrome_ver = match.group(0).replace('.', '')
        except:
            return None

        #Fragen Sie den WEB-Service nach der Chrome-Treiberversion
        try:
            api = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{}"
            ver = requests.get(api.format(chrome_ver)).text
        except:
            return None

        return ver

Wenn Sie es in die Modulbestätigung .py aufnehmen, sieht es wie ↓ aus

Zur Überprüfung des Moduls.py


try:
  driver = webdriver.Chrome()
except:
  ver = get_lastrelease_chromedriver()
  install_module("chromedriver-binary", ver)

Sie sollten nun in der Lage sein, die Chromedriver-Binärdatei automatisch zu aktualisieren.

Recommended Posts

Automatisches Update des Python-Moduls
Python-Update (2.6-> 2.7)
Automatische Erfassung von Aktienkursen mit Python
Python-Modul importieren
Übergeben Sie den Pfad des importierten Python-Moduls
Automatische Update-Methode von Python Pyinstaller exe
Erstellen Sie ein Beziehungsdiagramm von Python-Modulen
Verstopft mit Python-Update der GCP-Konsole ①
Python-Grundlagen ①
Grundlagen von Python ①
Überprüfen Sie den Pfad des importierten Python-Moduls
Kopie von Python
Python-Sammlungsmodul
Einführung von Python
Verstopft mit Python-Update der GCP-Konsole ② (Lösung)
[Python] [chardet] Automatische Erkennung von Zeichencode in Dateien
[Hikari-Python] Kapitel 08-04 Modul (Installation einer externen Bibliothek)
Zeichenkodierung bei Verwendung des CSV-Moduls von Python 2.7.3
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Versuchen Sie es mit dem Sammlungsmodul (ChainMap) von python3
Zum Zeitpunkt des Python-Updates mit Ubuntu
[Python] Klassentyp und Verwendung des datetime-Moduls
Python / Automatic Low Wrench, nicht für experimentelle Daten geeignet
Rufen Sie das Aktualisierungsdatum der Python-Memorandum-Datei ab.
[Python] Operation der Aufzählung
Python-Modul (Python-Lernnotiz ④)
Python Memorandum (sequentielle Aktualisierung)
Erstellen Sie ein Python-Modul
Vereinheitlichung der Python-Umgebung
Kopie der Python-Einstellungen
Grundlagen der Python-Scraping-Grundlagen
Import des Python-Originalmoduls
[Python] Verhalten von Argmax
Verwendung von Python-Einheimischen ()
der Zen von Python
Installieren von Python 3.3 rc1
# 4 [Python] Grundlagen der Funktionen
Grundkenntnisse in Python
Nüchterne Trivia von Python3
Zusammenfassung der Python-Argumente
Grundlagen von Python: Ausgabe
Installation von matplotlib (Python 3.3.2)
Anwendung von Python 3 vars
Verschiedene Verarbeitung von Python
[Python] Ruft die Liste der im Modul definierten Klassen ab
Verwenden wir die Python-Version des Confluence-API-Moduls.
Die Geschichte der automatischen Sprachkonvertierung von TypeScript / JavaScript / Python
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python
[Python of Hikari-] Kapitel 08-03 Modul (Import und Verwendung der Standardbibliothek)
Python-Modul-Importe alphabetisch sortieren
So funktioniert der Import von Python-Modulen
Auf dem Weg zum Ruhestand von Python2
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
Python - Schneller Start der Protokollierung
Empfehlung der binpacking Bibliothek von Python
[Python] ModuleNotFoundError: Kein Modul mit dem Namen 'urlparse'
Führen Sie automatisierte Jobs in Python aus
[Python] Wert des Funktionsobjekts (?)