Goedemiddag allemaal,
Ik zou graag de ‘Install Plugin from -ZIPFILE’ willen aansturen vanuit een PYTHON code, om hiermee een ZIP op het netwerk bij mijn collega’s ‘standaard’ te kunnen instaleren.
Echter kan ik hier niet echt een oplossing voor vinden… heeft iemand suggesties?
Als alternatief heb ik het wel voor elkaar dat de ZIP wordt uitgepakt in de plugins folder. Echter moet ik deze plugin nu handmatig ‘aanvinken’ bij de geinstalleerde plugins… is dat eventueel als alternatief met een python functie te doen?
Hoor graag of iemand daarmee kan helpen.
QGIS heeft hiervoor een speciale submodule, pyplugin_installer
geheten. Je kan een plugin uit zip map installeren met het volgende commando:
pyplugin_installer.instance().installFromZipFile(r'P:\pad\naar\plugin.zip')
De plugin wordt dan geïnstalleerd en geactiveerd (vinkje aan). Je kan op deze manier ook je plugin updaten, gewoon door dit te draaien met een nieuwe zip die dezelfde naam heeft als de bestaande versie. Je kan geloof ik ook opvragen of een plugin reeds geïnstalleerd is en zo ja welke versie.
Het automatisch installeren van plugins kent natuurlijk wel veiligheidsrisico’s. Geen probleem zolang je het binnen het eigen netwerk houdt, maar wees hiervan bewust als je plugins vanaf internetbronnen gaat installeren.
2 likes
Goedemorgen @sriemens ,
Dank voor de functie, werkt super en beter dan wat ik zelf had.
Dit is wat ik had, top dat het nu in 1 regel kan. 
# Install the plugin from the ZIP-file
if os.path.exists(zip_file_path):
try:
if not os.path.exists(plugin_target_dir):
os.makedirs(plugin_target_dir)
with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
zip_ref.extractall(plugin_target_dir)
iface.messageBar().pushMessage("MHT", f"Plugin succesvol geïnstalleerd vanuit: {zip_file_path}", duration=10)
except Exception as e:
iface.messageBar().pushMessage("MHT", f"Fout bij installatie van plugin: {e}", duration=10)
else:
iface.messageBar().pushMessage("MHT", f"ZIP-file niet gevonden op locatie: {zip_file_path}", duration=10)
# Update or add the 'two%20sub%20menu' plugin value to 'true'
qgis_ini_path = app.qgisSettingsDirPath() + "QGIS/QGIS3.ini"
plugin_name = "two sub menu"
new_value = "true"
params = QSettings(qgis_ini_path, QSettings.IniFormat)
params.beginGroup("/PythonPlugins")
if params.contains(plugin_name):
params.setValue(plugin_name, new_value)
iface.messageBar().pushMessage("MHT", f"Plugin '{plugin_name}' succesvol bijgewerkt naar '{new_value}'.", duration=5)
else:
# If the plugin does not exist, create it
params.setValue(plugin_name, new_value)
iface.messageBar().pushMessage("MHT", f"Plugin '{plugin_name}' was niet aanwezig en is toegevoegd met waarde '{new_value}'.", duration=5)
params.sync()