You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Python脚本持续触发WinError 32,创建临时目录仍无法解决

ArcGIS Online图层备份脚本WinError 32文件占用问题

问题概述

编写Python脚本备份ArcGIS Online图层时,持续触发WinError 32文件占用错误,尝试创建临时目录等方法无效。

使用的代码

# 创建临时目录,因为我一直遇到文件占用错误,但这也没用 lol
import tempfile
 
with tempfile.TemporaryDirectory() as tmpdir:
     print('created temporary directory', tmpdir)
 
# 导入必要模块
import arcgis
from arcgis.gis import GIS
 
# 创建GIS对象
gis = GIS("insert_link", "username", "password")
 
# 获取要复制的图层对应的项
layer_item = gis.content.get("layer_ID")
 
# 创建图层副本
copy_item = layer_item.copy()
 
# 查找并删除该图层的旧副本
for item in gis.content.search(query="title:'Copy of {}'".format(layer_item.title)):
    if item.type == "Feature Layer":
        item.delete()
 
# 保存新的图层副本
copy_item.save()
# 总有一天我会看到这句话
print("File Downloaded")

报错信息

C:\Users\SeanW\anaconda3\envs\MeganScriptTests\python.exe C:\Users\SeanW\PycharmProjects\AGOLBackup3\main.py 
created temporary directory C:\Users\SeanW\AppData\Local\Temp\tmpj0yvbg64
Traceback (most recent call last):
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\importlib\_common.py", line 92, in _tempfile
    os.write(fd, reader())
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\importlib\abc.py", line 371, in read_bytes
    with self.open('rb') as strm:
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\importlib\_adapters.py", line 54, in open
    raise ValueError()
ValueError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\SeanW\PycharmProjects\AGOLBackup3\main.py", line 7, in <module>
    import arcgis
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\arcgis\__init__.py", line 3, in <module>
    from arcgis.auth.tools import LazyLoader
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\arcgis\auth\__init__.py", line 1, in <module>
    from .api import EsriSession
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\arcgis\auth\api.py", line 11, in <module>
    certifi_win32.wincerts.verify_combined_pem()
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\certifi_win32\wincerts.py", line 65, in verify_combined_pem
    with open(certifi_pem()) as certifi_pem_handle:
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\certifi_win32\wincerts.py", line 52, in certifi_pem
    import certifi
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\wrapt\importer.py", line 177, in _exec_module
    notify_module_loaded(module)
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\wrapt\decorators.py", line 470, in _synchronized
    return wrapped(*args, **kwargs)
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\wrapt\importer.py", line 136, in notify_module_loaded
    hook(module)
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\certifi_win32\wrapt_certifi.py", line 20, in apply_patches
    certifi_win32.wincerts.CERTIFI_PEM = certifi.where()
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\site-packages\certifi\core.py", line 72, in where
    _CACERT_PATH = str(_CACERT_CTX.__enter__())
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\contextlib.py", line 135, in __enter__
    return next(self.gen)
  File "C:\Users\SeanW\anaconda3\envs\MeganScriptTests\lib\importlib\_common.py", line 98, in _tempfile
    _os_remove(raw_path)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\SeanW\\AppData\\Local\\Temp\\tmpx9og0v3t'

Process finished with exit code 1

已尝试的解决方案

  • 切换至Python 3.11,出现无法打开孤立路径错误,无解决思路
  • 在其他电脑运行脚本,仍出现相同问题
  • 卸载python-certifi-win32包,错误依旧
  • 将临时目录后的代码缩进,未解决WinError 32问题

解决方案建议

1. 清理certifi依赖冲突

从报错栈看,问题根源在certifi和certifi_win32的文件操作冲突。彻底卸载这两个包后重新安装纯净版certifi:

pip uninstall -y certifi certifi-win32
pip install certifi

ArcGIS API for Python本身不需要certifi_win32,无需重新安装。

2. 调整脚本导入与执行顺序

把模块导入放在最开头,临时目录和业务逻辑放在同一代码块内,避免导入阶段的资源占用冲突:

# 先导入所有必要模块
import arcgis
from arcgis.gis import GIS
import tempfile
 
# 统一在临时目录上下文内执行备份逻辑
with tempfile.TemporaryDirectory() as tmpdir:
    print('created temporary directory', tmpdir)
    # 创建GIS对象
    gis = GIS("insert_link", "username", "password")
    # 获取目标图层
    layer_item = gis.content.get("layer_ID")
    # 创建副本
    copy_item = layer_item.copy()
    # 删除旧副本
    for item in gis.content.search(query="title:'Copy of {}'".format(layer_item.title)):
        if item.type == "Feature Layer":
            item.delete()
    # 保存新副本
    copy_item.save()
    print("File Downloaded")

3. 指定自定义临时目录

如果系统默认临时目录存在权限或占用问题,手动指定一个非系统默认的临时目录:

import os
import tempfile
import arcgis
from arcgis.gis import GIS

# 自定义临时目录路径
custom_tmp_dir = r"C:\MyCustomTempDir"
os.makedirs(custom_tmp_dir, exist_ok=True)

# 使用自定义目录执行逻辑
with tempfile.TemporaryDirectory(dir=custom_tmp_dir) as tmpdir:
    print('created temporary directory', tmpdir)
    # 后续备份逻辑...

4. 安装兼容版本的ArcGIS API

当前ArcGIS API版本可能与Python环境不兼容,尝试安装稳定兼容版(Python 3.9-3.10推荐2.2.x系列):

pip install arcgis==2.2.0

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:50:25