运行pytest无响应,触发PermissionError权限拒绝问题求助
PermissionError导致pytest执行停滞的解决办法
问题描述
创建了运行pytest的Python文件,但执行pytest命令时无反应、命令提示符停滞,按下Ctrl+C后抛出如下权限错误:
File "C:\ProgramData\Anaconda3\lib\tempfile.py", line 255, in _mkstemp_inner fd = _os.open(file, flags, 0o600) PermissionError: [Errno 13] Permission denied: 'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\anyio\\__pycache__\\tmp7fewgyj8' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\ProgramData\Anaconda3\Scripts\pytest-script.py", line 10, in <module> sys.exit(console_main()) File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\config\__init__.py", line 187, in console_main code = main() File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\config\__init__.py", line 145, in main config = _prepareconfig(args, plugins) File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\config\__init__.py", line 324, in _prepareconfig config = pluginmanager.hook.pytest_cmdline_parse( File "C:\ProgramData\Anaconda3\lib\site-packages\pluggy\_hooks.py", line 265, in __call__ return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult) File "C:\ProgramData\Anaconda3\lib\site-packages\pluggy\_manager.py", line 80, in _hookexec return self._inner_hookexec(hook_name, methods, kwargs, firstresult) File "C:\ProgramData\Anaconda3\lib\site-packages\pluggy\_callers.py", line 55, in _multicall gen.send(outcome) File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\helpconfig.py", line 102, in pytest_cmdline_parse config: Config = outcome.get_result() File "C:\ProgramData\Anaconda3\lib\site-packages\pluggy\_result.py", line 60, in get_result raise ex[1].with_traceback(ex[2]) File "C:\ProgramData\Anaconda3\lib\site-packages\pluggy\_callers.py", line 39, in _multicall res = hook_impl.function(*args) File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\config\__init__.py", line 1016, in pytest_cmdline_parse self.parse(args) File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\config\__init__.py", line 1304, in parse self._preparse(args, addopts=addopts) File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\config\__init__.py", line 1187, in _preparse self.pluginmanager.load_setuptools_entrypoints("pytest11") File "C:\ProgramData\Anaconda3\lib\site-packages\pluggy\_manager.py", line 287, in load_setuptools_entrypoints plugin = ep.load() File "C:\ProgramData\Anaconda3\lib\importlib\metadata.py", line 86, in load module = import_module(match.group('module')) File "C:\ProgramData\Anaconda3\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\assertion\rewrite.py", line 163, in exec_module _write_pyc(state, co, source_stat, pyc) File "C:\ProgramData\Anaconda3\lib\site-packages\_pytest\assertion\rewrite.py", line 315, in _write_pyc with atomic_write(os.fspath(pyc), mode="wb", overwrite=True) as fp: File "C:\ProgramData\Anaconda3\lib\contextlib.py", line 119, in __enter__ return next(self.gen) File "C:\ProgramData\Anaconda3\lib\site-packages\atomicwrites\__init__.py", line 166, in _open with get_fileobject(**self._open_kwargs) as f: File "C:\ProgramData\Anaconda3\lib\site-packages\atomicwrites\__init__.py", line 183, in get_fileobject descriptor, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, File "C:\ProgramData\Anaconda3\lib\tempfile.py", line 336, in mkstemp return _mkstemp_inner(dir, prefix, suffix, flags, output_type) File "C:\ProgramData\Anaconda3\lib\tempfile.py", line 255, in _mkstemp_inner fd = _os.open(file, flags, 0o600)
解决方案
1. 以管理员权限运行命令提示符
ProgramData是系统级目录,普通用户权限无法写入。右键点击命令提示符,选择以管理员身份运行,再执行pytest命令。
2. 修改目标目录的权限
找到路径C:\ProgramData\Anaconda3\lib\site-packages\anyio\__pycache__:
- 右键该文件夹,选择属性 → 安全 → 编辑
- 在弹出的权限窗口中,找到当前登录用户,勾选写入权限,点击确定保存。
3. 使用虚拟环境隔离依赖(推荐长期方案)
系统环境权限问题容易反复,用虚拟环境可以彻底规避:
# 创建虚拟环境(替换3.x为你的Python版本) conda create -n pytest_env python=3.8 # 激活虚拟环境 conda activate pytest_env # 安装依赖 pip install pytest anyio
之后在虚拟环境中执行pytest即可,虚拟环境的文件都在用户目录下,无权限限制。
4. 临时禁用pytest断言重写
如果只是临时测试,可以通过参数跳过pytest的pyc文件写入:
pytest --no-assertion-rewrite
内容的提问来源于stack exchange,提问作者Yiğit Ağalar
相关产品推荐
相关产品推荐

