I want to create a shapefile with a QGIS Python plugin. If the same shapefile is already in QGIS Interface, I need to remove it, delete it from the computer, create the new layer and load it.
When I'm trying to delete the data source with OGR, .shx and .prj are well deleted but .dbf and .shp still exists and I have a permission error:
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process "full/path/to/the/layer.shp"`
I also tried os.remove() and os.path.exists() with the same issue.
import os import osgeo.ogr as ogr from qgis.core import QgsProject # Set up the shapefile driver driver = ogr.GetDriverByName("ESRI Shapefile") # Create the data source myLayer = "full/path/to/the/layer.shp" # Delete layer from QGIS interface for lyr in QgsProject.instance().mapLayers().values(): if lyr.name() == "myLayerName": QgsProject.instance().removeMapLayer(lyr.id()) # Delete file if os.path.isfile(myLayer): driver.DeleteDataSource(myLayer) If I delete the layer from QGIS Interface directly in the Python console, it works fine: layer disappear from the interface and I can overwrite the file. But it doesn't work similar when I execute it from my plugin's script. It seems like some elements are still in QGIS memory.
What the best way to definitely remove a layer and all his dependencies from QGIS in a plugin script?
I'm using QGIS 3.10.2.