110
votes

"Autorisation refusée" essayant d'exécuter Python sur Windows 10

On dirait qu'une mise à jour sur Windows 10 du jour au lendemain a cassé Python. Essayer simplement d'exécuter python --version renvoyé une erreur "Permission Denied". Aucune des trois mises à jour; KB4507453, KB4506991 ou KB4509096 semblent être le coupable, mais le moment du problème est suspect. Plutôt que de jouer avec le retour en arrière, j'espère qu'il me manque une solution plus simple.

Les permissions sur python sont "-rwxr-xr-x" et je n'ai rien changé à part laisser la mise à jour de Windows redémarrer la machine après avoir installé les correctifs de la nuit dernière.

Selon les informations système, j'exécute 10.0.18362

Il faut également noter que cela se produit, que j'essaye d'exécuter Python à partir de git-bash en utilisant "exécuter en tant qu'administrateur" ou non, et si j'essaie d'utiliser PowerShell, cela ouvre simplement le magasin Windows comme si l'application n'était pas installée Je pense qu'il ne peut pas voir le contenu de mon dossier /c/Users/david/AppData/Local/Microsoft/WindowsApps/ pour une raison quelconque.

J'ai également essayé de réinstaller Python 3.7.4, mais cela n'a pas aidé non plus. Y a-t-il autre chose que je devrais regarder?


6 commentaires

Cela vaut probablement la peine de consulter le site Web de Microsoft. J'ai lu quelque part, désolé je ne me souviens plus où, que d'autres personnes avaient des problèmes avec cette mise à jour - écran vide je pense. Quoi qu'il en soit, attendre qu'ils le réparent dans un jour ou deux pourrait s'avérer être la solution.


BTW, "les autorisations sur python sont '-rwxr-xr-x'" n'a probablement pas de sens dans Windows. C'est quelque chose de faux rapporté par un environnement de type Unix tel que MSYS2 ou git-bash.


Nan. Ceci est le package Python de python.org. Même chose qui fonctionne depuis des années sans aucun problème et vient de commencer à agir avec le dernier correctif Windows.


Avez-vous trouvé une solution? J'ai le même problème.


Malheureusement non. Je vis avec cela comme je fais la plupart de mon travail dans Docker. Si je le fais, je ne manquerai pas de publier mes résultats!


Merci! J'en laisserai un ici si je le comprends.


12 Réponses :


4
votes

Ce n'est pas une solution avec PowerShell, mais j'ai eu le même problème sauf avec MINGW64. Je l'ai contourné en passant au sous-système Windows pour Linux (ce que je voulais faire de toute façon) comme terminal, juste en général et en VSCode. Cet article le décrit bien:

Comment configurer VS Code (Windows) pour utiliser l'application Ubuntu comme terminal

En résumé:

1) Installez Ubuntu à partir du Windows App Store

2) Changez le bash par défaut de CMD -> wslconfig / setdefault Ubuntu

--- Pour VSCode

3) Redémarrez VSCode

4) Dans VSCode, remplacez "terminal.integrated.shell.windows" par "C: \ WINDOWS \ System32 \ bash.exe" (pour plus de détails, voir l'article ci-dessus)

Fonctionnement fluide maintenant dans VSCode et WSL (Bash sur Ubuntu sous Windows). Cela pourrait être au moins une solution temporaire pour vous.


0 commentaires

-1
votes

Vous pouvez peut-être essayer d'ouvrir l'invite de commande avec les privilèges d'administrateur. (Exécuter en tant qu'administrateur). Fonctionne pour moi la plupart du temps.


1 commentaires

L'exécutable python fonctionne dans CMD même sans privilèges d'administrateur. Le problème est que cela ne fonctionne pas dans Git Bash, qui est un outil essentiel pour les programmeurs et qui est la valeur par défaut, et qu'il fonctionne avec toutes les autres méthodes de distribution pour Python, ce qui signifie qu'il devrait [être fait pour] fonctionner ici aussi.



184
votes

Pour autant que je sache, cela a été causé par un conflit avec la version de Python 3.7 qui a été récemment ajoutée au Windows Store. On dirait que cela a ajouté deux "stubs" appelés python.exe et python3.exe dans le %USERPROFILE%\AppData\Local\Microsoft\WindowsApps , et dans mon cas, cela a été inséré avant l'entrée de mon exécutable Python existant dans le PATH .

Le déplacement de cette entrée sous le dossier Python correct a corrigé (partiellement) le problème.

La deuxième partie de la correction consiste à taper manage app execution aliases dans l'invite de recherche Windows et à désactiver complètement les versions de magasin de Python.

gérer les alias d'exécution des applications

Il est possible que vous n'ayez besoin que de faire la deuxième partie, mais sur mon système, j'ai effectué les deux modifications et tout est revenu à la normale maintenant.


9 commentaires

J'ai dans la variable de chemin de mon utilisateur local deux références à ce même dossier, une avec un chemin littéral, l'autre avec un chemin relatif: C:\Users\blah\AppData\Local\Microsoft\WindowsApps est la 4ème entrée, et %USERPROFILE%\AppData\Local\Microsoft\WindowsApps est la dernière entrée de la liste. - D'autre part, ma variable de chemin système ne contient aucune référence au dossier WindowsApps. De plus, aucun de ceux-ci ne contient de référence à d'autres chemins Python.


(Employé Microsoft et développeur principal de CPython ici) Vous n'avez certainement besoin que de la deuxième partie. Il y a eu quelques bogues liés à la mise à niveau des applications qui réinitialisent les alias qui seront corrigés dans la prochaine mise à jour stable, donc cela devrait être une solution ponctuelle d'ici là. Pendant que vous recevez des mises à jour Insiders, vous devrez peut-être le faire plusieurs fois.


De plus, le problème "Accès refusé" est un bogue de Git Bash (ou celui qui maintient son port Bash ... je ne suis pas sûr de savoir à qui il appartient). Et le lancement du Store est une nouvelle fonctionnalité pour aider les gens à installer Python - si vous l'avez ajouté à PATH à l'aide du programme d'installation normal, il devrait avoir la priorité sur le nouveau redirecteur, mais sinon, vous avez découvert ci-dessus comment le désactiver.


(Pour clarifier mon propre commentaire - "si vous l'avez ajouté [Python, pas le lanceur de magasin] à PATH en utilisant le programme d'installation normal ...")


Je devais juste passer à la deuxième partie pour résoudre ce problème pour moi.


Pour moi, j'ai dû également ajouter python à mon chemin (C: \ Users \ YourUsernameHere \ AppData \ Local \ Programs \ Python \ Pyt‌ hon37) pour que git bash trouve python


Je n'ai jamais rien fait avec le magasin Winsows concernant Python. Python n'est pas non plus répertorié dans les «alias d'exécution d'application».


L'ajouter à mon chemin et le déplacer vers le haut était ma solution, tout comme Neils l'a fait. Le fait que je ne puisse pas simplement renommer le stub du stub Windows Store est assez ennuyeux.


Merci beaucoup pour cela, aidez-moi à résoudre mon problème d'exécution de flask depuis cmd (python)



23
votes

Recherche

Tous les fichiers de %USERPROFILE%\AppData\Local\Microsoft\WindowsApps sont des espaces réservés qui pointent vers des fichiers qui se trouvent en fait quelque part dans C:\Program Files\WindowsApps , qui se voit refuser complètement les autorisations.

Il semble que j'étais sur la bonne voie avec ma déclaration faite dans mon double de ce problème:

"On dirait qu'ils n'ont pas vraiment pensé à la méthode de distribution qui se foutait des permissions!"

Source: impossible d'installer pylint dans Git Bash sous Windows (Windows Store)

Les autorisations sont gâchées royalement à cause de la méthode de distribution WindowsApps:

entrez la description de l'image ici entrez la description de l'image ici entrez la description de l'image ici Il est intéressant de noter que le groupe "Utilisateurs" peut lire et exécuter des fichiers, ainsi que mon utilisateur spécifique, mais le groupe Administrateurs ne peut répertorier le contenu des dossiers que pour une raison hilarante insondable. Et lorsque vous essayez d'accéder au dossier dans l'Explorateur de fichiers, il refuse même d'afficher le contenu du dossier, il y a donc quelque chose de louche à ce sujet également.

Fait intéressant, même si l'exécution de python dans CMD fonctionne très bien, le dossier «WindowsApps» n'apparaît pas lors de la liste des fichiers dans le répertoire dans lequel il réside, et la tentative de navigation dans le dossier génère une erreur «Autorisation refusée»:

entrez la description de l'image ici

Tenter de modifier les autorisations nécessite d'abord de changer le propriétaire, j'ai donc changé le propriétaire pour le groupe Administrateurs. Après cela, j'ai essayé de modifier les autorisations du groupe Administrateurs pour inclure le contrôle total, mais il n'a pas pu changer cela, car "l'accès a été refusé" (duh, Micro $ ucks, c'est ce que nous essayons de changer!).

entrez la description de l'image ici

Cette erreur d'autorisation s'est produite pour tellement de fichiers que j'ai utilisé Alt + C pour cliquer rapidement sur "Continuer" sur les messages répétés, mais cela a encore pris trop de temps, j'ai donc annulé le processus, ce qui a fait apparaître ce message d'avertissement:

entrez la description de l'image ici

Et maintenant, je ne peux pas redéfinir l'utilisateur TrustedInstaller en tant que propriétaire du dossier WindowsApps, car il n'apparaît pas dans la liste des utilisateurs / groupes / principes de sécurité intégrés / autres objets. *

entrez la description de l'image ici

* En fait, selon ce didacticiel , vous pouvez remplacer le propriétaire par TrustedInstaller en tapant NT Service\TrustedInstaller dans la zone de texte du nom de l'objet.

Solution

Il n'y a pas de solution. En gros, nous sommes complètement foutus. Déménagement chic, Microsoft.


6 commentaires

(Employé de Microsoft et développeur principal de CPython ici) Il y a un bogue en ce moment, je travaille sur la résolution dans Windows où vous pouvez lancer des exécutables à cet emplacement, mais uniquement si vous avez activé l'alias global (dans Gérer les alias d'exécution des applications). J'essaie de le faire changer afin que vous n'ayez besoin que d'avoir installé l'application pour l'utilisateur actuel.


Nous pouvons lire les autorisations via cette boîte de dialogue car elle appartient à une instance dllhost.exe (hébergeant l'extension de shell de sécurité, rshx32.dll) qui s'exécute avec un accès administrateur et a donc un accès "liste du contenu du dossier" (c'est-à-dire exécuter; synchroniser; et lire données, attributs et autorisations). L'entrée pour le groupe d'utilisateurs n'est pas pour un contrôle d'accès normal. Il est conditionnel à l'existence d'un attribut de sécurité WIN: // SYSAPPID, c'est-à-dire n'importe quelle application. Le sous-dossier de chaque application accorde un accès en lecture aux utilisateurs, mais l'accès d'exécution est conditionnel à l'exécution via le lien d'application qui définit un jeton d'accès personnalisé.


@ErykSun C'est la première réponse éclairée que j'ai jamais vue sur l'exécution et les autorisations de Windows. Merci.


En fait, je suis toujours aux prises avec les retombées de la tentative de modification des autorisations sur le dossier. Certaines WinApps ont complètement cessé de se lancer, jusqu'à ce que je suive ces directions: ( superuser.com/questions/1288014/… ) mais maintenant elles donnent des messages d'erreur au lancement. J'ai utilisé une ancienne image USB Win10, donc elle a probablement mal défini les autorisations.


Cela m'a juste surpris, merci pour la bonne explication. Nous utilisons git bash pour exécuter des scripts shell pour invoquer une construction emscripten, et dans le cadre des scripts emscripten standard, il essaie de deviner votre version de python via $ (quel python) ... qui explose immédiatement.


@MarkSimpson heureux que ce fil ait aidé. Je ne sais pas ce que j'ai pu écrire. N'oubliez pas de remercier les employés de Microsoft qui ont publié de vraies réponses dans les commentaires ici.



11
votes

Cela semble être une limitation dans git-bash. La recommandation d'utiliser winpty python.exe fonctionné pour moi. Voir Python ne fonctionne pas dans la ligne de commande de git bash pour plus d'informations.


0 commentaires

-1
votes

vous faire gagner du temps: utilisez wsl and vscode remote extension pour travailler correctement avec python même avec win10 et n'oubliez pas virtualenv ! utile https://linuxize.com/post/how-to-install-visual-studio-code-on-ubuntu-18-04/


0 commentaires

1
votes

La chose la plus simple à faire serait de modifier vos variables d'environnement PATH et PYTHONPATH pour vous assurer que le dossier contenant les binaires python appropriés est recherché avant le dossier WindowsApp local. Vous pouvez accéder aux variables d'environnement en ouvrant le panneau de contrôle et en recherchant "env"


0 commentaires

4
votes

L'ajout du chemin Python local avant que WindowsApps ne résolve le problème.

Variables d'environnement> Chemin

Bash Python --Version


0 commentaires

10
votes

Ce problème est beaucoup trop courant pour être persistant. Et la plupart des réponses et instructions ne parviennent pas à y répondre. Voici ce qu'il faut faire sous Windows 10:

  1. Tapez environment variables dans la barre de recherche de démarrage et ouvrez Modifier les variables d'environnement système .

  2. Cliquez sur Variables d'environnement ...

  3. Dans la section Variables système, recherchez la variable avec la clé Path et double-cliquez dessus.

  4. Recherchez des chemins pointant vers des fichiers python. Il n'y en a probablement pas. S'il y en a, sélectionnez-les et supprimez-les.

  5. Créez un nouveau jeu de variables sur le chemin de votre exécutable python. Normalement, il s'agit de C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Python38 . Assurez-vous cela en vérifiant via votre Explorateur de fichiers.

    Remarque : si vous ne pouvez pas voir AppData , c'est parce que vous n'avez pas activé l'affichage des éléments masqués : cliquez sur l'onglet Affichage et cochez la case Eléments masqués.

  6. Créez une autre variable pointant vers le répertoire Scripts . Il s'agit généralement de C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Scripts .

  7. Redémarrez votre terminal et essayez de taper py , python , python3 ou python.exe .


0 commentaires

1
votes

Solution: si vous avez installé python à partir d'exe, suivez les étapes ci-dessous.

Étape 1: Désinstaller python

Étape 2: Installez python et cochez la case Python path comme surligné ci-dessous screentshot (jaune).

Cela m'a résolu le problème.

entrez la description de l'image ici


0 commentaires

0
votes

Cela est dû à la façon dont les alias d'exécution d'applications Windows fonctionnent dans Git-Bash.

Il s'agit d'un problème connu dans MSYS2 qui ne parvient pas à accéder aux points d'analyse Windows avec IO_REPARSE_TAG_APPEXECLINK

Pour contourner ce problème , vous pouvez créer un alias vers un appel de fonction qui utilise cmd.exe sous le capot.

Ajoutez ce qui suit à votre fichier ~/.bashrc :

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

Pour python, je recommanderais simplement de désactiver les alias d'exécution d'application comme dans la réponse acceptée, mais pour les bibliothèques distribuées exclusivement via le magasin Windows comme winget , c'est votre meilleure option.

Lectures complémentaires


0 commentaires

0
votes

Pour moi, j'ai essayé de manage app execution aliases et j'ai obtenu une erreur indiquant que python3 n'est pas une commande, donc pour cela, j'ai utilisé py au lieu de python3 et cela a fonctionné

Je ne sais pas pourquoi cela se produit mais cela a fonctionné pour moi


0 commentaires