“许可Denied"试图在Windows 10上运行Python

似乎一夜之间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,但也没有帮助。还有什么我该看的吗?

294101 次浏览

也许您可以尝试使用管理员权限打开命令提示符。(以管理员身份运行)。大部分时间对我都管用。

据我所知,这是由最近添加到Windows商店的Python 3.7版本冲突引起的。这看起来像是在%USERPROFILE%\AppData\Local\Microsoft\WindowsApps文件夹中添加了两个名为Python .exe和python3.exe的“存根”,在我的例子中,这被插入了之前我现有的Python可执行文件的之前条目。

将这个条目移到正确的Python文件夹下面(部分地)纠正了这个问题。

纠正它的第二部分是在Windows搜索提示符中输入manage app execution aliases,并完全禁用Python的存储版本。

管理应用程序执行别名

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

研究

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

看来我在这个问题的副本中所做的陈述是正确的:

“似乎他们并没有真正考虑到分发方法会影响权限!”

来源:无法在Git Bash中安装pylint (Windows Store)

由于WindowsApps的分发方法,权限被搞砸了:

enter image description here enter image description here enter image description here 有趣的是,它说“用户”组可以读取和执行文件,以及我的特定用户,但管理员组只能列出文件夹内容,这是出于一些可笑的无法理解的原因。当试图在文件资源管理器中访问文件夹时,它甚至拒绝显示文件夹内容,所以这也有一些可疑的地方

有趣的是,即使在CMD中执行python工作正常,“WindowsApps”文件夹在列出其所在目录中的文件时不会显示,并且试图导航到该文件夹会生成“权限拒绝”错误:

enter image description here

尝试更改权限需要首先更改所有者,因此我将所有者更改为Administrators组。在那之后,我试图改变管理员组的权限,以包括完全控制,但它无法改变这一点,因为“访问被拒绝”(duh, Micro$ucks,这就是我们试图改变的!)

enter image description here

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

enter image description here

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

enter image description here

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

解决方案

没有解决办法。基本上,我们完全完蛋了。漂亮的举动,微软。

这似乎是git-bash的一个限制。使用winpty python.exe的建议对我有用。更多信息请参见git bash命令行中Python无法工作

节省你的时间: 使用wsl and vscode remote extension来正确地使用python,即使是在win10中 别忘了virtualenv! 有用https://linuxize.com/post/how-to-install-visual-studio-code-on-ubuntu-18-04/ < / p >

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

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

环境变量>路径 < / >

Bash Python——Version

这个问题太常见了,不可能一直存在。大多数答案和说明都未能解决这个问题。下面是在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. 重新启动终端并尝试输入pypythonpython3python.exe

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

步骤1:卸载python

步骤2:安装python并选中下面屏幕截图(黄色)中突出显示的python路径复选框。

这就解决了我的问题。

enter image description here

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

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

作为一个变通办法,你可以用别名表示在底层使用cmd.exe的函数调用。

在你的~/.bashrc文件中添加以下内容:

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

对于python,我建议关闭应用程序执行别名,就像接受的答案一样,但对于专门通过windows商店分发的库,如winget,这是最好的选择。

进一步的阅读

对我来说,我尝试了manage app execution aliases,得到了一个python3不是命令的错误,因此,我使用py而不是python3,它工作了

我不知道为什么会这样,但这对我很有效

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

我终于发现这是我的反病毒(Avast),因为某些原因,它在一夜之间决定阻止所有编译的python脚本。

幸运的是,修复方法很简单:只需将整个Python目录列入白名单。完整的解释见在这里

在环境变量中添加python文件夹的路径,就可以工作了

1.搜索环境变量

2.寻找系统变量section,并在其中找到名为path的变量

3.双击path并添加指向python文件夹的新路径,就是这样。

python文件夹通常在 用户C: \[“用户name"] \ AppData \本地Python \程序\ \ Python39 < / p >

简单的答案:将python替换为PY,一切都将按预期工作

我有这个运行/执行,但没有工作

python3 -m http.server 8080

在阅读并尝试了上面的一些解决方案之后,对我来说有用的是

python -m http.server 8080

对于遇到这个问题的人,想要使用微软商店版本的Python,以及相关的 "管理应用程序执行别名"修复@Zooba可能发生,并且正在使用Git for Windows git-bash(也称为BASH通过msys2 mintty),解决方案可能只是记住使用winpty进行调用。

winpty python3

但是,如果系统有其他版本的Python,请确保这些副本已被删除(例如从python.org安装的副本)或包含到其特定的捆绑应用程序(例如OSGeo4W)(可能需要重新排序环境变量)。

为什么,如果winpty被遗忘,它是一个权限错误?当它第一次运行时,Microsoft Store存根与msys可用的权限发生冲突。很多其他答案会详细说明发生了什么以及为什么感觉很奇怪。简单的回答是,存根试图成为通往微软商店的便捷捷径。如果你用winpty启动它,它可以做到这一点。在第一次之后,由于与Microsoft Store相关或不相关的原因,它继续需要winpty

Windows 10中 . txt

  • 打开控制面板
  • 单击系统
  • 单击高级系统设置链接
  • 单击环境变量按钮
  • 在“系统变量”部分找到路径环境变量并选择它
  • 单击编辑(如果PATH环境变量不存在,则单击新建)
  • 在“编辑环境变量”窗口中指定PATH环境变量的值
  • 单击OK
  • 单击OK关闭所有剩余窗口
  • 重新打开命令提示符窗口并运行python --version

确保C:\Python39\C:\Python39\Scripts\被添加到系统路径变量和用户路径变量中