"Permiso denegado" al intentar ejecutar Python en Windows 10

107

Parece que una actualización de Windows 10 rompió Python de la noche a la mañana. Intentar ejecutar python --versionarrojó un error de "Permiso denegado". Ninguna de las tres actualizaciones; KB4507453, KB4506991 o KB4509096 parecen ser los culpables, pero el momento del problema es sospechoso. En lugar de jugar con retroceder, espero que haya una solución más simple que me falta.

Los permisos en Python son "-rwxr-xr-x" y no he cambiado nada más que dejar que la actualización de Windows reinicie la máquina después de instalar los parches de anoche.

Según la información del sistema, estoy ejecutando 10.0.18362

También debería tener en cuenta que esto está sucediendo si (intento) ejecutar Python desde git-bash usando "ejecutar como administrador" o no, y si intento usar PowerShell, simplemente abre la tienda de Windows como si la aplicación no estuviera instalada, así que Estoy pensando que no puede ver el contenido de mi /c/Users/david/AppData/Local/Microsoft/WindowsApps/ carpeta por alguna razón.

También intenté reinstalar Python 3.7.4, pero eso tampoco ayudó. ¿Hay algo más que deba mirar?

no un número
fuente
Probablemente valga la pena visitar el sitio web de Microsoft. Leí en alguna parte, lo siento, no recuerdo dónde, que otras personas estaban teniendo problemas con esta actualización, creo que pantalla en blanco. De todos modos, esperar hasta que lo solucionen en uno o dos días podría resultar ser la respuesta.
Ant
Por cierto, "los permisos en Python son '-rwxr-xr-x'" probablemente no tenga sentido en Windows. Eso es algo falso informado por un entorno similar a Unix como MSYS2 o git-bash.
Eryk Sun
No Este es el paquete de Python de python.org. Lo mismo que ha estado funcionando durante años sin ningún problema y acaba de comenzar a actuar con el último parche de Windows.
notanumber
¿Encontraste una solución? Tengo el mismo problema.
Shanks
Lamentablemente no. He estado viviendo con él, ya que hago la mayor parte de mi trabajo en Docker. Si lo hago, ¡me aseguraré de publicar mis hallazgos!
notanumber

Respuestas:

178

Por lo que puedo decir, esto fue causado por un conflicto con la versión de Python 3.7 que se agregó recientemente a la Tienda Windows. Parece que esto agregó dos "stubs" llamados python.exe y python3.exe en la %USERPROFILE%\AppData\Local\Microsoft\WindowsAppscarpeta, y en mi caso, esto se insertó antes de la entrada del ejecutable de Python existente en el archivo PATH.

Mover esta entrada debajo de la carpeta correcta de Python (parcialmente) corrigió el problema.

La segunda parte de corregirlo es escribir manage app execution aliasesen el indicador de búsqueda de Windows y deshabilitar las versiones de la tienda de Python por completo.

administrar alias de ejecución de aplicaciones

Es posible que solo necesite hacer la segunda parte, pero en mi sistema hice ambos cambios y ahora todo ha vuelto a la normalidad.

no un número
fuente
46
(Empleado de Microsoft y desarrollador principal de CPython aquí) Definitivamente solo necesita hacer la segunda parte. Ha habido un par de errores relacionados con la actualización de aplicaciones que restablecen los alias que se solucionarán en la próxima actualización estable, por lo que debería ser una solución única para entonces. Mientras recibe actualizaciones de Insiders, es posible que deba hacerlo un par de veces más.
Zooba
7
Además, el problema de "Acceso denegado" es un error de Git Bash (o quien mantiene su puerto Bash ... no estoy seguro de quién es). Y el lanzamiento de la Tienda es una nueva característica para ayudar a las personas a instalar Python; si lo ha agregado a PATH usando el instalador normal, debería tener prioridad sobre el nuevo redirector, pero si no, ha descubierto anteriormente cómo deshabilitarlo.
Zooba
4
Solo tuve que ir a la segunda parte para solucionar este problema por mí.
kennyB
5
Para mí, también tuve que agregar Python a mi ruta (C: \ Users \ YourUsernameHere \ AppData \ Local \ Programs \ Python \ Python37) para que git bash encontrara Python
Niels
1
Agregarlo a mi camino y moverlo a la parte superior fue mi solución, al igual que lo hizo Neils. El hecho de que no pueda simplemente cambiar el nombre del código auxiliar de la tienda de Windows es bastante molesto.
John W. Clark
23

Investigación

Todos los archivos %USERPROFILE%\AppData\Local\Microsoft\WindowsAppsson marcadores de posición que apuntan a archivos que se encuentran en algún lugar C:\Program Files\WindowsApps, a los que se les niegan los permisos por completo.

Parece que estaba en el camino correcto con mi declaración hecha en mi duplicado de este problema:

"¡Parece que realmente no pensaron en el método de distribución que se enredaba con los permisos!"

Fuente: No se puede instalar pylint en Git Bash en Windows (Tienda Windows)

Los permisos se estropean como la reina debido al método de distribución de WindowsApps:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí Curiosamente, dice que el grupo "Usuarios" puede leer y ejecutar archivos, así como mi usuario específico, pero el grupo Administradores solo puede mostrar el contenido de la carpeta por alguna razón hilarantemente insondable. Y cuando intenta acceder a la carpeta en el Explorador de archivos, se niega incluso a mostrar el contenido de la carpeta, por lo que también hay algo sospechoso en eso.

Curiosamente, aunque la ejecución pythonen CMD funciona bien, la carpeta "WindowsApps" no aparece cuando se enumeran los archivos en el directorio en el que reside, e intentar navegar en la carpeta genera un error de "Permiso denegado":

ingrese la descripción de la imagen aquí

Intentar cambiar los permisos requiere cambiar el propietario primero, así que cambié el propietario al grupo Administradores. Después de eso, intenté cambiar los permisos para que el grupo Administradores incluyera Control total, pero no pude cambiar esto, porque "el acceso fue denegado" (duh, Micro $ ucks, ¡eso es lo que estamos tratando de cambiar!).

ingrese la descripción de la imagen aquí

Este error de permiso ocurrió para tantos archivos que usé Alt + C para hacer clic rápidamente en "Continuar" en los mensajes repetidos, pero esto tomó demasiado tiempo, así que cancelé el proceso, lo que resultó en este mensaje de advertencia emergente:

ingrese la descripción de la imagen aquí

Y ahora no puedo volver a configurar al usuario de TrustedInstaller como propietario de la carpeta WindowsApps, porque no aparece en la lista de Usuarios / Grupos / Principios de seguridad incorporados / Otros objetos. *

ingrese la descripción de la imagen aquí

* En realidad, de acuerdo con este tutorial , puede volver a cambiar el propietario a TrustedInstaller escribiendo NT Service\TrustedInstalleren el cuadro de texto del nombre del objeto.

Solución

No hay solución. Básicamente, estamos completamente jodidos. Movimiento elegante, Microsoft.

Ryan
fuente
11
(Empleado de Microsoft y desarrollador central de CPython aquí) Hay un error en este momento, estoy trabajando para solucionarlo en Windows, donde puede iniciar ejecutables en esta ubicación, pero solo si tiene habilitado el alias global (en Administrar alias de ejecución de aplicaciones). Estoy tratando de cambiarlo para que solo necesite haber instalado la aplicación para el usuario actual.
Zooba
4
Podemos leer los permisos a través de este cuadro de diálogo porque es propiedad de una instancia de dllhost.exe (que aloja la extensión de shell de seguridad, rshx32.dll) que se ejecuta con acceso de administrador y, por lo tanto, tiene acceso a "lista de contenido de carpeta" (es decir, ejecutar, sincronizar y leer datos, atributos y permisos). La entrada para el grupo de usuarios no es para una verificación de acceso normal. Está condicionado a la existencia de un atributo de seguridad WIN: // SYSAPPID, es decir, cualquier aplicación. La subcarpeta de cada aplicación otorga acceso de lectura a los usuarios, pero el acceso de ejecución está condicionado a la ejecución a través del enlace de la aplicación que establece un token de acceso personalizado.
Eryk Sun
@ErykSun Esa es la primera respuesta informada que he visto sobre la ejecución y los permisos de Windows. Gracias.
Ryan
De hecho, todavía estoy lidiando con las consecuencias de intentar cambiar los permisos en la carpeta. Ciertas WinApps dejaron de iniciarse por completo, hasta que seguí estas instrucciones: ( superuser.com/questions/1288014/… ) pero ahora dan mensajes de error al iniciarse. Utilicé una imagen USB Win10 anterior, por lo que probablemente configuró los permisos incorrectamente.
Ryan
1
@MarkSimpson me alegro de que este hilo haya ayudado. No estoy seguro de lo que pude haber escrito. Asegúrese de agradecer a los empleados de Microsoft que publicaron respuestas reales en los comentarios aquí.
Ryan
10

Este problema es demasiado común para ser persistente. Y la mayoría de las respuestas e instrucciones no lo abordan. Esto es lo que debe hacer en Windows 10:

  1. Escriba environment variablesen la barra de búsqueda de inicio y abra Editar las variables de entorno del sistema .

  2. Haga clic en Variables de entorno ...

  3. En la sección Variables del sistema, ubique la variable con la clave Pathy haga doble clic en ella.

  4. Busque rutas que apunten a archivos de Python. Probablemente no hay ninguno. Si los hay, selecciónelos y elimínelos.

  5. Cree una nueva variable establecida en la ruta de su ejecutable de Python. Normalmente esto es C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Python38. Asegúrese de esto comprobando a través de su Explorador de archivos.

    Nota : Si no puede ver AppData, es porque no ha habilitado la visualización de elementos ocultos : haga clic en la pestaña Ver y marque la casilla de verificación Elementos ocultos.

  6. Cree otra variable que apunte al Scriptsdirectorio. Normalmente lo es C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Scripts.

  7. Reiniciar el terminal y escribiendo intentarlo py, python, python3, o python.exe.

Jai
fuente
4

No es una solución con PowerShell, pero tuve el mismo problema excepto con MINGW64. Lo solucioné cambiando al Subsistema de Windows para Linux (que quería hacer de todos modos) como mi terminal, solo en general y en VSCode. Esta publicación lo describe bien:

Cómo configurar VS Code (windows) para usar la aplicación Ubuntu como terminal

En resumen:

1) Instale Ubuntu desde la tienda de aplicaciones de Windows

2) Cambie el bash predeterminado de CMD -> wslconfig / setdefault Ubuntu

--- Para VSCode

3) Reinicie VSCode

4) En VSCode, cambie "terminal.integrated.shell.windows" a "C: \ WINDOWS \ System32 \ bash.exe" (para obtener más detalles, consulte la publicación anterior)

Funcionando sin problemas ahora en VSCode y WSL (Bash en Ubuntu en Windows). Podría ser al menos una solución temporal para ti.

Shanks
fuente
3

Agregar la ruta de Python local antes de que las aplicaciones de Windows resolvieran el problema.

Variables de entorno> Ruta

Bash Python - Versión

Shirish
fuente
1

Lo más sencillo sería modificar sus variables ambientales PATH y PYTHONPATH para asegurarse de que la carpeta que contiene los binarios de Python adecuados se busque antes de la carpeta local de WindowsApp. Puede acceder a las variables ambientales abriendo el panel de control y buscando "env"

Michael Bletzinger
fuente
0

Solución alternativa: si ha instalado Python desde exe, siga los pasos a continuación.

Paso 1: desinstalar Python

Paso 2: Instale Python y marque la casilla de verificación de la ruta de Python como se resalta en la siguiente captura de pantalla (amarillo).

Esto me solucionó el problema.

ingrese la descripción de la imagen aquí

Shakeel
fuente
-1

Puede intentar abrir el símbolo del sistema con privilegios de administrador. (Ejecutar como administrador). Funciona para mí la mayor parte del tiempo.

Imtiyaz Shaikh
fuente
3
El ejecutable de Python funciona en CMD incluso sin privilegios de administrador. El problema es que no funciona en Git Bash, que es una herramienta esencial para los programadores y es la predeterminada, y funciona con cualquier otro método de distribución para Python, lo que significa que debería [estar hecho para] funcionar aquí también.
Ryan