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.
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)
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
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.
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