试图在Windows 10上运行Python的“权限被拒绝”


122

Windows 10上的更新似乎在一夜之间破坏了Python。仅尝试运行会python --version返回“权限被拒绝”错误。三个更新都没有;KB4507453,KB4506991或KB4509096看起来是罪魁祸首,但问题的时机令人怀疑。我希望不再缺少回滚,而是希望有一个更简单的修复程序丢失。

python上的权限是“ -rwxr-xr-x”,除了安装昨晚的补丁程序后让Windows更新重启计算机之外,我没有做任何更改。

根据系统信息,我正在运行10.0.18362

还应该注意,无论我是否(尝试)使用“以管理员身份运行”从git-bash执行Python,并且如果我尝试使用PowerShell,它只会打开Windows存储,就像未安装该应用程序一样,这正在发生。我以为/c/Users/david/AppData/Local/Microsoft/WindowsApps/由于某种原因它看不到文件夹的内容。

我也尝试过重新安装Python 3.7.4,但这也无济于事。还有什么我应该看的吗?


可能值得检查Microsoft网站。我在某处阅读,很抱歉不记得在哪里,其他人对此更新有问题-我认为是黑屏。无论如何,等待直到一两天之内修复它,才可能是答案。
蚂蚁

顺便说一句,“在python上的权限是'-rwxr-xr-x'”在Windows中可能毫无意义。这是由类似Unix的环境(例如MSYS2或git-bash)报告的虚假信息。
Eryk Sun

不。这是来自python.org的Python软件包。同样,多年来一直没有任何问题,并且只是开始使用最新的Windows补丁。
notanumber

您找到解决方案了吗?我有同样的问题。
Shanks

抱歉不行。我在Docker中从事大部分工作时一直都在使用它。如果这样做,我将确保发布我的发现!
notanumber

Answers:


201

据我所知,这是由于与Windows Store中最近添加的Python 3.7版本发生冲突所致。看起来这像在%USERPROFILE%\AppData\Local\Microsoft\WindowsApps文件夹中添加了两个名为python.exe和python3.exe的“存根” ,在我的情况下,这是在插入现有Python可执行文件之前PATH

将此条目移到正确的Python文件夹下面(部分地)可以解决此问题。

更正它的第二部分是manage app execution aliases在Windows搜索提示中输入内容,并完全禁用Python的商店版本。

管理应用执行别名

您可能只需要做第二部分,但是在我的系统上,我做了两项更改,现在一切都恢复了正常。


56
(这里是Microsoft员工和CPython核心开发人员)您绝对只需要执行第二部分。有一些与升级应用程序重置别名有关的错误,这些错误将在下一个稳定更新中修复,因此届时应该是一次性修复。在获取内部人员更新时,您可能需要再做几次。
Zooba

9
另外,“访问被拒绝”问题是Git Bash错误(或维护其Bash端口的人……我不确定自己是谁)。启动应用商店是一项新功能,可以帮助人们安装Python-如果您已使用常规安装程序将其添加到PATH,则它应优先于新的重定向器,但如果没有,您会发现如何禁用它。
Zooba

5
我只需要第二部分即可为我解决此问题。
kennyB

6
对我来说,我还必须将python添加到我的路径(C:\ Users \ YourUsernameHere \ AppData \ Local \ Programs \ Python \ Python37)中,以便git bash查找python
Niels

2
就像Neils一样,将其添加到我的路径并将其移至顶部是我的解决方案。我不能只为Windows存储区存根重命名存根,这一事实非常令人讨厌。
约翰·克拉克

26

研究

中的所有文件%USERPROFILE%\AppData\Local\Microsoft\WindowsApps都是占位符,它们指向实际位于中的某个位置的文件,而这些文件C:\Program Files\WindowsApps恰好被完全拒绝了权限。

重复出现此问题后,我的陈述似乎正确无误:

“似乎他们没有真正考虑过分配方法会被权限搞砸!”

来源:无法在Windows上的Git Bash中安装pylint(Windows应用商店)

由于WindowsApps的分发方法,权限被滥用了:

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 有趣的是,“用户”组以及我的特定用户都可以读取和执行文件,但是“管理员”组出于某些不可思议的原因只能列出文件夹内容。而且,当尝试在文件资源管理器中访问文件夹时,它甚至拒绝显示文件夹内容,因此也有些麻烦。

有趣的是,即使python在CMD中执行也可以,但在其所在目录中列出文件时,“ WindowsApps”文件夹不会显示,并且尝试导航到该文件夹​​时会产生“权限被拒绝”错误:

在此处输入图片说明

尝试更改权限需要先更改所有者,因此我将所有者更改为Administrators组。此后,我尝试更改Administrators组的权限以包括“完全控制”权限,但由于“拒绝访问”(du,Micro $ ucks,这就是我们要更改的权限),因此无法更改此权限。

在此处输入图片说明

这个权限错误发生在很多文件上,以至于我使用Alt + C在重复的消息上快速单击“继续”,但这仍然花费了太长时间,因此我取消了此过程,导致弹出此警告消息:

在此处输入图片说明

现在,我无法将TrustedInstaller用户重新设置为WindowsApps文件夹的所有者,因为它没有显示在“用户/组/内置安全性原则/其他对象”列表中。*

在此处输入图片说明

*实际上,根据本教程,您可以通过NT Service\TrustedInstaller在对象名称文本框中输入内容来将所有者交换回TrustedInstaller 。

没有解决办法。基本上,我们完全被搞砸了。微软的经典举动。


12
(这里是Microsoft员工和CPython核心开发人员)我现在正在修复Windows中的一个错误,在Windows中,您可以在此位置启动可执行文件,但前提是您启用了全局别名(在“管理应用程序执行”别名中)。我正在尝试更改它,以便您只需要为当前用户安装该应用程序。
Zooba

4
我们可以通过此对话框读取权限,因为它是由dllhost.exe实例(托管安全外壳扩展程序rshx32.dll)拥有的,该实例正在以管理员权限运行,因此具有“列表文件夹内容”访问权限(即执行,同步和读取)数据,属性和权限)。用户组的条目不适用于常规访问检查。这取决于是否存在WIN:// SYSAPPID安全属性,即任何应用程序。每个应用程序的子文件夹都向用户授予读取访问权限,但执行访问权限是通过设置了自定义访问令牌的应用程序链接运行的条件。
Eryk Sun

@ErykSun这是我见过的有关Windows执行和权限的第一个明智的答案。谢谢。
瑞安

实际上,我仍然在尝试更改文件夹的权限以应对后果。某些WinApps完全停止启动,直到我遵循以下指示:(superuser.com/questions/1288014/…),但是现在它们在启动时给出错误消息。我使用了较旧的Win10 USB映像,因此它可能设置了错误的权限。
瑞安

1
@MarkSimpson很高兴此线程有所帮助。不知道我可能写了什么。请务必感谢在此处的评论中张贴了真实答案的Microsoft员工。
瑞安


12

这个问题太普遍了,无法持久解决。而且大多数答案和说明都无法解决。在Windows 10上执行以下操作:

  1. 键入environment variables在开始搜索栏,并打开编辑系统环境变量

  2. 单击环境变量...

  3. 在“系统变量”部分中,使用键找到变量,Path然后双击它。

  4. 寻找指向python文件的路径。可能没有。如果有,请选择并删除它们。

  5. 创建一个新变量,设置为您的python可执行文件的路径。通常是C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Python38。通过您的文件资源管理器进行检查以确保这一点。

    注意:如果看不到AppData,那是因为您尚未启用查看隐藏项的方法:单击“查看”选项卡,然后选中“隐藏项”复选框。

  6. 创建另一个指向Scripts目录的变量。通常是C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Scripts

  7. 重新启动终端,并尝试打字pypythonpython3,或python.exe


5

这不是使用PowerShell的解决方案,但是除了MINGW64之外,我遇到了同样的问题。我通过切换到Linux的Windows子系统(无论如何我还是想这样做)作为终端来解决这个问题,只是在一般情况下和在VSCode中。这篇文章很好地描述了它:

如何配置VS Code(Windows)以将Ubuntu App用作终端

综上所述:

1)从Windows App Store安装Ubuntu

2)从CMD更改默认bash-> wslconfig / setdefault Ubuntu

-对于VSCode

3)重新启动VSCode

4)在VSCode中,将“ terminal.integrated.shell.windows”更改为“ C:\ WINDOWS \ System32 \ bash.exe”(有关更多详细信息,请参见上面的文章)

现在可以在VSCode和WSL(Windows上的Ubuntu上的Bash)中平稳运行。可能至少是您的一个临时解决方案。


5

在WindowsApps解决此问题之前添加本地Python路径。

环境变量>路径

Bash Python-版本


2

解决方法:如果您从exe安装了python,请执行以下步骤。

步骤1:卸载python

步骤2:安装python并选中screentshot(yellow)下方突出显示的Python path复选框。

这解决了我的问题。

在此处输入图片说明


2

对我来说,我尝试manage app execution aliases了一个错误,即python3不是命令,因此,我使用py代替了python3它并且它起作用了

我不知道为什么会这样,但是对我有用


1

最简单的操作是修改PATH和PYTHONPATH环境变量,以确保在本地WindowsApp文件夹中搜索包含正确的python二进制文件的文件夹。您可以通过打开控制面板并搜索“ env”来访问环境变量


1

这是由于Windows App执行别名在Git-Bash中的工作方式所致。

这是MSYS2中 无法通过Windows访问Windows重新解析点的一个已知问题IO_REPARSE_TAG_APPEXECLINK

解决方法是,您可以为在后台使用的函数调用添加别名cmd.exe

将以下内容添加到您的~/.bashrc文件中::

function python { cmd.exe /c "python $1 $2 $3";}

对于python,我建议仅像接受的答案中那样切换应用程序执行别名,但是对于仅通过Windows存储(如)分发的库winget,这是您的最佳选择。

进一步阅读


0

我遇到了同样的问题,但是除了Python被阻止之外,该Scripts文件夹中的所有程序也都被阻止了。关于别名,路径的其他答案winpty并没有帮助。

最终,我发现是我的防病毒软件(Avast)出于某种原因一夜之间决定仅出于某种原因阻止所有已编译的python脚本。

幸运的是,此修复很容易:只需将整个Python目录列入白名单。完整说明请参见此处


-1

可能是您可以尝试使用管理员权限打开命令提示符。(以管理员身份运行)。大多数时候对我有用。


3
即使没有管理员权限,python可执行文件也可以在CMD中运行。问题在于它在Git Bash中不起作用,它是程序员必不可少的工具,并且是默认工具,并且可以与其他所有Python分发方法一起使用,这意味着它也应该在这里工作。
瑞安

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.