Windows环境下运行pytest出现PermissionError问题求助
问题场景
在Windows环境运行Python项目的pytest时,出现如下权限错误,即使给目标文件/目录赋予完全权限仍无法解决;相同代码在macOS上可正常运行,已查阅相关资料未找到有效方案。
报错详情:
self = WindowsPath('C:/Users/PBC53~1.PAR/AppData/Local/Temp/tmp4jyswr0l'), missing_ok = False def unlink(self, missing_ok=False): """ Remove this file or link. If the path is a directory, use rmdir() instead. """ try: self._accessor.unlink(self)
PermissionError: [WinError 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: 'C:\Users\PBC53~1.PAR\AppData\Local\Temp\tmp4jyswr0l'
C:\Program Files\Python310\lib\pathlib.py:1203: PermissionError
解决办法
定位并结束占用临时文件的进程
打开Windows任务管理器的「详细信息」标签,搜索临时文件名tmp4jyswr0l或完整路径,找到关联进程后结束,再重新运行pytest。也可以用微软Sysinternals的handle.exe工具精准定位:handle.exe C:\Users\PBC53~1.PAR\AppData\Local\Temp\tmp4jyswr0l根据输出的进程ID,执行
taskkill /PID <进程ID>结束占用进程。自定义pytest临时文件目录
避开系统Temp目录的潜在冲突,在项目根目录创建pytest.ini并添加:[pytest] tmp_path = ./tests/pytest_tmp或者直接在命令行指定临时目录:
pytest --tmpdir=./tests/custom_tmp排查测试代码的文件资源泄漏
Windows对文件锁的管控比macOS严格,检查测试用例中是否存在打开文件后未释放的情况,比如使用open()后未调用close(),或未正确使用with open(...) as f:上下文管理器,确保所有文件操作都释放了句柄。以管理员身份运行执行环境
右键点击终端或IDE,选择「以管理员身份运行」,再执行pytest,部分系统级目录的操作需要更高权限才能完成。临时关闭杀毒软件实时保护
部分杀毒软件会实时扫描临时文件并锁定,临时关闭Windows Defender或第三方杀毒软件的实时保护,重试pytest确认是否是拦截导致的问题。
内容的提问来源于stack exchange,提问作者Tech knowledge

