TensorFlow环境下Jupyter Notebook启动内核遭遇PermissionError权限问题
解决Jupyter Notebook内核权限错误(TensorFlow环境验证场景)
我之前也碰到过一模一样的情况——搭好TensorFlow环境想通过Jupyter Notebook验证,结果创建新文件直接弹出内核错误,看报错信息是权限拒绝,没法写入runtime目录下的kernel配置文件。你的具体报错如下:
Traceback (most recent call last): File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\web.py", line 1699, in _execute result = await result File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\gen.py", line 742, in run yielded = self.gen.throw(*exc_info) # type: ignore File "D:\Anaconda3\envs\tensor36\lib\site-packages\notebook\services\sessions\handlers.py", line 72, in post type=mtype)) File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\gen.py", line 735, in run value = future.result() File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\gen.py", line 742, in run yielded = self.gen.throw(*exc_info) # type: ignore File "D:\Anaconda3\envs\tensor36\lib\site-packages\notebook\services\sessions\sessionmanager.py", line 88, in create_session kernel_id = yield self.start_kernel_for_session(session_id, path, name, type, kernel_name) File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\gen.py", line 735, in run value = future.result() File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\gen.py", line 742, in run yielded = self.gen.throw(*exc_info) # type: ignore File "D:\Anaconda3\envs\tensor36\lib\site-packages\notebook\services\sessions\sessionmanager.py", line 101, in start_kernel_for_session self.kernel_manager.start_kernel(path=kernel_path, kernel_name=kernel_name) File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\gen.py", line 735, in run value = future.result() File "D:\Anaconda3\envs\tensor36\lib\site-packages\tornado\gen.py", line 209, in wrapper yielded = next(result) File "D:\Anaconda3\envs\tensor36\lib\site-packages\notebook\services\kernels\kernelmanager.py", line 168, in start_kernel super(MappingKernelManager, self).start_kernel(**kwargs) File "D:\Anaconda3\envs\tensor36\lib\site-packages\jupyter_client\multikernelmanager.py", line 110, in start_kernel km.start_kernel(**kwargs) File "D:\Anaconda3\envs\tensor36\lib\site-packages\jupyter_client\manager.py", line 240, in start_kernel self.write_connection_file() File "D:\Anaconda3\envs\tensor36\lib\site-packages\jupyter_client\connect.py", line 547, in write_connection_file kernel_name=self.kernel_name File "D:\Anaconda3\envs\tensor36\lib\site-packages\jupyter_client\connect.py", line 212, in write_connection_file with secure_write(fname) as f: File "D:\Anaconda3\envs\tensor36\lib\contextlib.py", line 81, in __enter__ return next(self.gen) File "D:\Anaconda3\envs\tensor36\lib\site-packages\jupyter_client\connect.py", line 102, in secure_write with os.fdopen(os.open(fname, open_flag, 0o600), mode) as f: PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Huazhi\\AppData\\Roaming\\jupyter\\runtime\\kernel-c1e93dc8-b336-4fdd-a028-7c001460bc4f.json'
这本质是Windows的UAC权限限制导致的,Jupyter没有权限往默认的系统runtime目录写文件,给你几个实用的解决办法:
临时快速解决:以管理员身份运行终端
右键点击你用来启动Jupyter的终端(比如Anaconda Prompt),选择以管理员身份运行,先激活你的TensorFlow环境:conda activate tensor36,再输入jupyter notebook启动,基本能立刻解决问题。永久解决:修改runtime目录权限
找到C:\\Users\\Huazhi\\AppData\\Roaming\\jupyter\\runtime文件夹,右键→属性→安全选项卡,找到你当前的用户账号,点击编辑,给它添加完全控制的权限,应用设置后重启Jupyter,以后就不会再碰到这个权限问题了。备选方案:指定自定义runtime目录
如果不想修改系统目录权限,可以自己在TensorFlow环境文件夹里新建一个目录,比如D:\Anaconda3\envs\tensor36\jupyter_runtime,然后启动Jupyter时加上参数:jupyter notebook --runtime-dir D:\Anaconda3\envs\tensor36\jupyter_runtime这样Jupyter会把内核配置文件写到你指定的目录里,完全避开系统权限限制。
内容的提问来源于stack exchange,提问作者Antonin_zhz




