【问题标题】:"Permission Denied" trying to run Python on Windows 10“权限被拒绝”试图在 Windows 10 上运行 Python
【发布时间】:2019-11-20 07:55:36
【问题描述】:

似乎一夜之间 Windows 10 的更新破坏了 Python。只是尝试运行python --version 返回“权限被拒绝”错误。这三个更新都没有; KB4507453、KB4506991 或 KB4509096 看起来像是罪魁祸首,但问题的发生时间值得怀疑。我希望有一个更简单的修复方法,而不是回滚。

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

根据系统信息,我运行的是 10.0.18362

还应注意,无论我(尝试)是否使用“以管理员身份运行”从 git-bash 执行 Python 都会发生这种情况,如果我尝试使用 PowerShell,它只会像应用程序一样打开 Windows 商店t 已安装,因此我认为由于某种原因它无法看到我的 /c/Users/david/AppData/Local/Microsoft/WindowsApps/ 文件夹的内容。

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

【问题讨论】:

  • 可能值得查看 Microsoft 网站。我在某处读到,抱歉不记得在哪里,其他人在此更新时遇到问题 - 我认为是空白屏幕。无论如何,等到他们在一两天内修复它可能会成为答案。
  • 顺便说一句,“python 上的权限是 '-rwxr-xr-x'”在 Windows 中可能毫无意义。这是由 MSYS2 或 git-bash 等类 Unix 环境报告的虚假内容。
  • 不。这是来自 python.org 的 Python 包。同样的,多年来一直没有任何问题,并且刚刚开始使用最新的 Windows 补丁。
  • 您找到解决方案了吗?我有同样的问题。
  • 不幸的是,没有。我一直在使用它,因为我在 Docker 中完成了大部分工作。如果我这样做了,我一定会发布我的发现!

标签: python python-3.x windows-store-apps file-permissions git-bash


【解决方案1】:

对于提出这个问题的人想要使用 Microsoft Store 版本的 Python,并且在 @Zoobarelated“管理应用程序执行别名”修复可能已经发生并且正在使用之后Git for Windows git-bash(通过 msys2 mintty 也称为 BASH),解决方案很可能只是记住使用 winpty 进行调用。'

winpty python3

但是,如果系统有其他版本的 Python,请确保这些副本已被删除(例如从 python.org 安装的那些)或包含在其特定的捆绑应用程序中(例如 OSGeo4W)(可能需要 re-ordering environment variables) .

为什么,如果winpty 忘记了,是权限错误吗?第一次运行时,Microsoft Store 存根与 msys 可用的权限发生冲突。很多other answers 详细介绍了正在发生的事情以及为什么感觉很奇怪。简短的回答是,存根正试图成为 Microsoft Store 的便捷捷径。如果您使用winpty 启动它,它可以做到这一点。在第一次之后,由于与 Microsoft Store 相关和不相关的原因,它仍然需要 winpty

【讨论】:

  • 还有其他答案暗示winpty,但他们的推理是无关的、错误的或过时的。我觉得 2021 年的更新摘要可能会有用。
【解决方案2】:

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

【讨论】:

  • 这有助于我运行 python,尽管 python 安装在 C:\Program Files\Python36\ 中。确保将其添加到 PATH 的顶​​部(开头),否则 Windows 可能会尝试运行 Python 的 Windows 应用商店版本,而不是您安装的版本。另外,我从来没有让它在 git bash 中运行,但它可以在 cmd 或 powershell 中运行。
【解决方案3】:

在 Windows 10 中

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

【讨论】:

    【解决方案4】:

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

    python3 -m http.server 8080
    

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

    python -m http.server 8080
    

    【讨论】:

    • 嗯,在运行-m venv 时为我工作。看起来我可能在两个位置安装了 python3 导致这种情况。我怀疑一个来自 Windows 商店,一个由 vscode 或类似的东西安装。 ``` $ which python /c/Users/me/AppData/Local/Programs/Python/Python39/python $ which python3 /c/Users/me/AppData/Local/Microsoft/WindowsApps/python3 ```
    【解决方案5】:

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

    【讨论】:

    • 所以这是在 py 3.9.4 中实现的新事物?
    • 任何人都可以添加更多关于PY 的上下文吗?
    • 为我工作,不确定乳清
    【解决方案6】:

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

    1.搜索环境变量

    2.查找系统变量部分并在其中找到名为路径的变量

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

    python 文件夹通常位于 C:\Users["用户名"]\AppData\Local\Programs\Python\Python39

    【讨论】:

      【解决方案7】:

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

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

      幸运的是,修复很简单:只需将整个 Python 目录列入白名单即可。完整说明请参见here

      【讨论】:

        【解决方案8】:

        对我来说,我尝试了 manage app execution aliases 并得到一个错误,即 python3 不是命令,所以我使用 py 而不是 python3 并且它有效

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

        【讨论】:

          【解决方案9】:

          这是由于 Windows App Execution Aliases 在 Git-Bash 中的工作方式。

          这是MSYS2中的一个已知问题failing to access Windows reparse points with IO_REPARSE_TAG_APPEXECLINK

          作为一种解决方法,您可以为在后台使用 cmd.exe 的函数调用设置别名。

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

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

          对于 python,我建议只在接受的答案中关闭应用程序执行别名,但对于通过 Windows 商店(如 winget)专门分发的库,这是您的最佳选择。

          进一步阅读

          【讨论】:

            【解决方案10】:

            解决方法:如果您从 exe 安装了 python,请按照以下步骤操作。

            第一步:卸载python

            第 2 步:安装 python 并选中 Python 路径复选框,如下图所示(黄色)。

            这解决了我的问题。

            【讨论】:

            • 我在安装 Python 之后执行了此操作 - 它最初没有安装,因此出现错误 :)
            • 那么你应该已经看到安装错误了。
            • 这是正确的做法!!谢谢!!
            【解决方案11】:

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

            将此条目移动到正确的 Python 文件夹下方(部分)更正了该问题。

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

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

            【讨论】:

            • (这里是微软员工和 CPython 核心开发人员)你肯定只需要做第二部分。有几个与升级应用程序重置别名相关的错误将在下一次稳定更新中修复,因此到那时应该是一次性修复。在您获得 Insiders 更新时,您可能需要多做几次。
            • 此外,“拒绝访问”问题是 Git Bash 错误(或维护其 Bash 端口的任何人......我不确定自己是谁)。启动 Store 是一项帮助人们安装 Python 的新功能 - 如果您使用常规安装程序将其添加到 PATH,它应该优先于新的重定向器,但如果不是,您已经在上面发现了如何禁用它。跨度>
            • 我只需要第二部分来为我解决这个问题。
            • 对我来说,我还必须将 python 添加到我的路径 (C:\Users\YourUsernameHere\AppData\Local\Programs\Python\Python37) 以便 git bash 找到 python
            • 将它添加到我的路径并将其移动到顶部是我的解决方案,就像 Neils 所做的那样。我不能只重命名 Windows 存储存根的存根这一事实非常烦人。
            【解决方案12】:

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

            【讨论】:

            • 这确实有效,这就像什么鬼情况。大声笑:D
            【解决方案13】:

            这个问题太常见了,以至于无法持续存在。大多数答案和说明都无法解决这个问题。以下是在 Windows 10 上执行的操作:

            1. 在开始搜索栏中输入environment variables,然后打开编辑系统环境变量

            2. 点击环境变量...

            3. 在“系统变量”部分,找到带有键 Path 的变量并双击它。

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

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

              注意:如果您看不到AppData,那是因为您没有看到enabled viewing of hidden items:点击查看标签并勾选隐藏项目复选框。

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

            7. 重新启动终端并尝试输入pypythonpython3python.exe

            【讨论】:

            • 那些通过 Anaconda 安装 Python 的用户呢?我做了所有的每一步,指向我的python安装的系统变量存在于系统变量中,问题仍然存在。
            【解决方案14】:

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

            【讨论】:

              【解决方案15】:

              节省您的时间: 使用wsl and vscode remote extension 可以正常使用python,即使是win10 不要忘记virtualenv! 有用https://linuxize.com/post/how-to-install-visual-studio-code-on-ubuntu-18-04/

              【讨论】:

                【解决方案16】:

                这不是 PowerShell 的解决方案,但我遇到了同样的问题,除了 MINGW64。我通过切换到适用于 Linux 的 Windows 子系统(无论如何我都想做)作为我的终端来解决这个问题,通常是在 VSCode 中。这篇文章描述得很好:

                How to configure VS Code (windows) to use Ubuntu App as terminal

                总结:

                1) 从 Windows 应用商店安装 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)中顺利运行。可能至少是您的临时解决方案。

                【讨论】:

                  【解决方案17】:

                  这似乎是 git-bash 的一个限制。使用winpty python.exe 的建议对我有用。更多信息请参见Python not working in the command line of git bash

                  【讨论】:

                  • 我在从 bash 运行 python 而不是从 powershell 运行 python 肯定有这个问题 - 但是我不认为你链接的错误是问题。更有可能是这样的:github.com/msys2/Msys2-packages/issues/1943
                  • 问题是,微软无权发明新的操作系统特性,因为那些不是标准的,那是只有 linux/posix 可以做的事情。所以 msys2,感谢他们忍受了他们拥有的所有 msft,我相信他们也会解决这个问题,但 msft 不是他们的错
                  【解决方案18】:

                  研究

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

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

                  “似乎他们并没有真正考虑过权限问题的分发方法!”

                  来源:Cannot install pylint in Git Bash on Windows (Windows Store)

                  由于 WindowsApps 分发方法,权限被严重破坏:

                  有趣的是,它说“用户”组可以读取和执行文件,以及我的特定用户,但管理员组只能列出文件夹内容,原因是一些莫名其妙的搞笑。而且当试图在文件资源管理器中访问文件夹时,它甚至拒绝显示文件夹内容,所以这也有问题。

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

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

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

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

                  *实际上,根据this tutorial,您可以在对象名称文本框中输入NT Service\TrustedInstaller,将所有者换回TrustedInstaller。

                  解决方案

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

                  【讨论】:

                  • (此处是 Microsoft 员工和 CPython 核心开发人员)我现在正在努力修复 Windows 中的一个错误,您可以在该位置启动可执行文件,但前提是您启用了全局别名(在管理应用程序执行别名)。我正在尝试对其进行更改,以便您只需要为当前用户安装该应用程序。
                  • 我们可以通过此对话框读取权限,因为它由 dllhost.exe 实例(托管安全外壳扩展程序,rshx32.dll)拥有,该实例以管理员访问权限运行,因此具有“列表文件夹内容”访问权限(即执行;同步;以及读取数据、属性和权限)。用户组的条目不是用于正常访问检查。它的条件是存在 WIN://SYSAPPID 安全属性,即任何应用程序。每个应用程序的子文件夹授予用户读取权限,但执行权限取决于通过设置自定义访问令牌的应用程序链接运行。
                  • @ErykSun 这是我见过的关于 Windows 执行和权限的第一个知情答案。谢谢。
                  • @MarkSimpson 很高兴这个帖子有帮助。不知道我可能写了什么。请务必感谢在此处的 cmets 中发布真实答案的 Microsoft 员工。
                  • 这个 bug 似乎在一年后仍然潜伏着......据我所知,让 GitBash、python 和 windows 10 一起工作仍然是一个死胡同
                  【解决方案19】:

                  也许您可以尝试使用管理员权限打开命令提示符。 (以管理员身份运行)。大多数时候为我工作。

                  【讨论】:

                  • 即使没有管理员权限,python 可执行文件也可以在 CMD 中运行。问题是它在 Git Bash 中不起作用,它是程序员必不可少的工具并且是默认工具,并且它适用于 Python 的所有其他分发方法,这意味着它也应该 [被制作] 在这里工作。
                  猜你喜欢
                  • 1970-01-01
                  • 2022-07-21
                  • 1970-01-01
                  • 2019-03-25
                  • 1970-01-01
                  • 2016-10-11
                  • 2015-12-27
                  • 1970-01-01
                  相关资源
                  最近更新 更多