„Odmowa uprawnień” przy próbie uruchomienia Pythona w systemie Windows 10

126

Wygląda na to, że aktualizacja systemu Windows 10 z dnia na dzień zepsuła Pythona. Sama próba uruchomienia python --versionzwróciła błąd „Odmowa uprawnień”. Żadna z trzech aktualizacji; KB4507453, KB4506991 lub KB4509096 wyglądają, jakby były winowajcami, ale czas wystąpienia problemu jest podejrzany. Zamiast bawić się wycofywaniem, mam nadzieję, że brakuje mi prostszej poprawki.

Uprawnienia w Pythonie to „-rwxr-xr-x” i nie zmieniłem niczego poza zezwoleniem na ponowne uruchomienie komputera z aktualizacją Windows po zainstalowaniu wczorajszych poprawek.

Zgodnie z informacjami o systemie używam wersji 10.0.18362

Powinienem również zauważyć, że dzieje się tak niezależnie od tego, czy (próbuję) uruchomić Pythona z git-bash używając "uruchom jako administrator", czy nie, a jeśli spróbuję użyć PowerShell, po prostu otworzy sklep Windows tak, jakby aplikacja nie była zainstalowana, więc Myślę, że /c/Users/david/AppData/Local/Microsoft/WindowsApps/z jakiegoś powodu nie widzi zawartości mojego folderu.

Próbowałem również ponownie zainstalować Python 3.7.4, ale to też nie pomogło. Czy jest coś jeszcze, na co powinienem zwrócić uwagę?

notanumber
źródło
Chyba warto zajrzeć na stronę Microsoftu. Czytałem gdzieś, przepraszam nie pamiętam gdzie, że inni ludzie mieli problemy z tą aktualizacją - chyba pusty ekran. W każdym razie, odpowiedź może okazać się odpowiedzią, gdy zaczekanie, aż to naprawią za dzień lub dwa.
Ant,
Przy okazji, „uprawnienia w Pythonie to '-rwxr-xr-x'” jest prawdopodobnie bez znaczenia w systemie Windows. To coś fałszywego zgłoszonego przez środowisko podobne do Uniksa, takie jak MSYS2 lub git-bash.
Eryk Sun,
Nie. To jest pakiet Pythona z python.org. To samo działa od lat bez żadnego problemu i właśnie zaczęło działać z najnowszą łatką do systemu Windows.
notanumber
Znalazłeś rozwiązanie? Mam ten sam problem.
Shanks
Niestety nie. Żyłem z tym, ponieważ wykonuję większość swojej pracy w Dockerze. Jeśli to zrobię, z pewnością opublikuję swoje wyniki!
notanumber

Odpowiedzi:

205

O ile wiem, było to spowodowane konfliktem z wersją Pythona 3.7, która została niedawno dodana do Sklepu Windows. Wygląda na to, że dodało to dwa „stuby” o nazwie python.exe i python3.exe do %USERPROFILE%\AppData\Local\Microsoft\WindowsAppsfolderu, aw moim przypadku zostało to wstawione przed wpisem mojego istniejącego pliku wykonywalnego Pythona w pliku PATH.

Przeniesienie tego wpisu poniżej właściwego folderu Pythona (częściowo) rozwiązało problem.

Drugą częścią poprawiania tego jest wpisanie manage app execution aliasesw polu wyszukiwania systemu Windows i całkowite wyłączenie wersji sklepu Pythona.

zarządzać aliasami wykonywania aplikacji

Możliwe, że będziesz musiał wykonać tylko drugą część, ale w moim systemie wprowadziłem obie zmiany i teraz wszystko wróciło do normy.

notanumber
źródło
56
(Pracownik Microsoftu i główny programista CPython tutaj) Zdecydowanie musisz zrobić tylko drugą część. Pojawiło się kilka błędów związanych z aktualizacją aplikacji resetujących aliasy, które zostaną naprawione w następnej stabilnej aktualizacji, więc do tego czasu powinno to być jednorazowe rozwiązanie. Podczas otrzymywania aktualizacji Insiderów może być konieczne wykonanie tego jeszcze kilka razy.
Zooba
10
Ponadto problem „Odmowa dostępu” to błąd Git Bash (lub ktokolwiek utrzymuje swój port Bash ... Nie jestem pewien, kto to jest). Uruchomienie Sklepu to nowa funkcja, która pomaga ludziom zainstalować Pythona - jeśli dodałeś go do PATH za pomocą zwykłego instalatora, powinno mieć pierwszeństwo przed nowym przekierowaniem, ale jeśli nie odkryłeś powyżej, jak go wyłączyć.
Zooba
5
Musiałem tylko przejść do drugiej części, aby rozwiązać ten problem.
kennyB
6
Dla mnie musiałem również dodać pythona do mojej ścieżki (C: \ Users \ YourUsernameHere \ AppData \ Local \ Programs \ Python \ Python37), aby git bash znalazł pythona
Niels
2
Dodanie tego do mojej ścieżki i przeniesienie na szczyt było moim rozwiązaniem, tak jak zrobił to Neils. Fakt, że nie mogę po prostu zmienić nazwy kodu pośredniego dla kodu sklepu Windows, jest dość denerwujący.
John W. Clark
26

Badania

Wszystkie pliki w programie %USERPROFILE%\AppData\Local\Microsoft\WindowsAppssą symbolami zastępczymi wskazującymi pliki, które faktycznie znajdują się gdzieś w programie C:\Program Files\WindowsApps, któremu odmówiono uprawnień.

Wygląda na to, że byłem na dobrej drodze z moim oświadczeniem złożonym w moim duplikacie tego problemu:

"Wygląda na to, że tak naprawdę nie myśleli o metodzie dystrybucji, która spieprzyłaby uprawnienia!"

Źródło: nie można zainstalować pylinta w Git Bash w systemie Windows (Sklep Windows)

Uprawnienia są po królewsku spieprzone z powodu metody dystrybucji WindowsApps:

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj Co ciekawe, jest tam napisane, że grupa „Użytkownicy” może odczytywać i uruchamiać pliki, a także mój określony użytkownik, ale grupa Administratorzy może wyświetlać zawartość folderu tylko z jakiegoś przezabawnie niezrozumiałego powodu. A kiedy próbuje uzyskać dostęp do folderu w Eksploratorze plików, odmawia nawet wyświetlenia zawartości folderu, więc jest też coś podejrzanego.

Co ciekawe, nawet jeśli wykonywanie pythonw CMD działa dobrze, folder „WindowsApps” nie pojawia się podczas wyświetlania listy plików w katalogu, w którym się znajduje, a próba przejścia do folderu generuje błąd „Odmowa uprawnień”:

wprowadź opis obrazu tutaj

Próba zmiany uprawnień wymaga najpierw zmiany właściciela, więc zmieniłem właściciela na grupę Administratorzy. Następnie próbowałem zmienić uprawnienia grupy Administratorzy, aby zawierała Pełna kontrola, ale nie mogłem tego zmienić, ponieważ „odmówiono dostępu” (prawda, Micro $ ucks, właśnie to próbujemy zmienić!).

wprowadź opis obrazu tutaj

Ten błąd uprawnień wystąpił dla tak wielu plików, że użyłem Alt + C do szybkiego kliknięcia „Kontynuuj” w powtarzających się wiadomościach, ale nadal trwało to zbyt długo, więc anulowałem proces, w wyniku czego pojawił się komunikat ostrzegawczy:

wprowadź opis obrazu tutaj

A teraz nie mogę ustawić użytkownika TrustedInstaller z powrotem jako właściciela folderu WindowsApps, ponieważ nie pojawia się on na liście Użytkownicy / Grupy / Wbudowane zasady bezpieczeństwa / Inne obiekty. *

wprowadź opis obrazu tutaj

* Właściwie, zgodnie z tym samouczkiem , możesz zamienić właściciela z powrotem na TrustedInstaller, wpisując NT Service\TrustedInstallerw polu tekstowym nazwy obiektu.

Rozwiązanie

Nie ma rozwiązania. Zasadniczo mamy kompletnie przerąbane. Ruch z klasą, Microsoft.

Ryan
źródło
12
(Pracownik firmy Microsoft i główny programista CPython tutaj). W tej chwili pracuję nad naprawieniem go w systemie Windows, w którym można uruchamiać pliki wykonywalne w tej lokalizacji, ale tylko wtedy, gdy masz włączony alias globalny (w Zarządzaj aliasami wykonywania aplikacji). Próbuję to zmienić, abyś musiał zainstalować aplikację tylko dla bieżącego użytkownika.
Zooba
4
Możemy odczytać uprawnienia za pomocą tego okna dialogowego, ponieważ jest ono własnością instancji dllhost.exe (hostującej rozszerzenie powłoki zabezpieczeń, rshx32.dll), która działa z dostępem administratora i dzięki temu ma dostęp do „listy zawartości folderu” (tj. Wykonanie; synchronizacja; i odczyt dane, atrybuty i uprawnienia). Wpis dotyczący grupy użytkowników nie służy do normalnego sprawdzania dostępu. Jest to uzależnione od istnienia atrybutu bezpieczeństwa WIN: // SYSAPPID, czyli dowolnej aplikacji. Podfolder dla każdej aplikacji przyznaje użytkownikom dostęp do odczytu, ale dostęp do wykonywania jest uzależniony od uruchomienia za pośrednictwem linku do aplikacji, który ustawia niestandardowy token dostępu.
Eryk Sun
@ErykSun To pierwsza świadoma odpowiedź, jaką kiedykolwiek widziałem na temat wykonywania i uprawnień w systemie Windows. Dzięki.
Ryan
Właściwie nadal mam do czynienia z opadem spowodowanym próbą zmiany uprawnień do folderu. Niektóre aplikacje WinApps całkowicie przestały się uruchamiać, dopóki nie zastosowałem się do tych wskazówek: ( superuser.com/questions/1288014/ ... ), ale teraz wyświetlają komunikaty o błędach podczas uruchamiania. Użyłem starszego obrazu USB Win10, więc prawdopodobnie ustawił uprawnienia nieprawidłowo.
Ryan
1
@MarkSimpson cieszę się, że ten wątek pomógł. Nie wiem, co mogłem napisać. Nie zapomnij podziękować pracownikom Microsoft, którzy zamieścili prawdziwe odpowiedzi w komentarzach tutaj.
Ryan
12

Ten problem jest zbyt powszechny, aby nadal był trwały. Większość odpowiedzi i instrukcji nie dotyczy tego problemu. Oto, co należy zrobić w systemie Windows 10:

  1. Wpisz environment variablespoczątkowy pasek wyszukiwania i otwórz Edytuj zmienne środowiskowe systemu .

  2. Kliknij Zmienne środowiskowe ...

  3. W sekcji Zmienne systemowe znajdź zmienną za pomocą klucza Pathi kliknij ją dwukrotnie.

  4. Poszukaj ścieżek wskazujących na pliki Pythona. Prawdopodobnie nie ma. Jeśli tak, zaznacz je i usuń.

  5. Utwórz nową zmienną ustawioną na ścieżkę do pliku wykonywalnego Pythona. Zwykle tak jest C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Python38. Zapewnij to, sprawdzając za pomocą Eksploratora plików.

    Uwaga : jeśli nie widzisz AppData, oznacza to, że nie włączyłeś wyświetlania ukrytych elementów : kliknij kartę Widok i zaznacz pole wyboru Ukryte elementy.

  6. Utwórz kolejną zmienną wskazującą na Scriptskatalog. Zazwyczaj tak jest C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Scripts.

  7. Ponowne uruchomienie terminala i spróbuj wpisać py, python, python3, lub python.exe.

Jai
źródło
5

To nie jest rozwiązanie z PowerShell, ale miałem ten sam problem, z wyjątkiem MINGW64. Poradziłem sobie z tym, przełączając się na podsystem Windows dla systemu Linux (co i tak chciałem zrobić) jako mój terminal, tylko ogólnie iw VSCode. Ten post dobrze to opisuje:

Jak skonfigurować VS Code (Windows), aby używać aplikacji Ubuntu jako terminala

W podsumowaniu:

1) Zainstaluj Ubuntu ze sklepu Windows App Store

2) Zmień domyślny bash z CMD -> wslconfig / setdefault Ubuntu

--- Dla VSCode

3) Uruchom ponownie VSCode

4) W VSCode zmień „terminal.integrated.shell.windows” na „C: \ WINDOWS \ System32 \ bash.exe” (więcej szczegółów w poście powyżej)

Działa płynnie teraz w VSCode i WSL (Bash w systemie Ubuntu w systemie Windows). Może być dla ciebie przynajmniej tymczasowym rozwiązaniem.

Shanks
źródło
5

Dodanie lokalnej ścieżki języka Python przed rozwiązaniem problemu przez aplikacje WindowsApps.

Zmienne środowiskowe> Ścieżka

Bash Python - wersja

Shirish
źródło
2

Obejście problemu: Jeśli zainstalowałeś Pythona z exe, wykonaj poniższe kroki.

Krok 1: Odinstaluj python

Krok 2: Zainstaluj Pythona i zaznacz pole wyboru Python path, jak zaznaczono na poniższym screentshot (żółty).

To rozwiązało problem.

wprowadź opis obrazu tutaj

Shakeel
źródło
2

U mnie próbowałem manage app execution aliasesi wyskoczył błąd że python3 nie jest poleceniem więc do tego użyłem pyzamiast python3i zadziałało

Nie wiem, dlaczego tak się dzieje, ale dla mnie zadziałało

Bieg
źródło
1

Najprościej byłoby zmodyfikować zmienne środowiskowe PATH i PYTHONPATH, aby upewnić się, że folder zawierający odpowiednie pliki binarne języka Python jest przeszukiwany przed lokalnym folderem WindowsApp. Dostęp do zmiennych środowiskowych można uzyskać, otwierając panel sterowania i wyszukując „env”

Michael Bletzinger
źródło
1

Wynika to ze sposobu, w jaki aliasy wykonywania aplikacji systemu Windows działają w Git-Bash.

Jest to znany problem w MSYS2, w którym nie można uzyskać dostępu do punktów ponownej analizy systemu Windows za pomocą plikówIO_REPARSE_TAG_APPEXECLINK

Aby obejść ten problem , możesz użyć aliasu do wywołania funkcji, który jest używany cmd.exepod maską.

Dodaj do swojego ~/.bashrcpliku:

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

W przypadku Pythona zalecałbym po prostu wyłączenie aliasów wykonywania aplikacji, tak jak w zaakceptowanej odpowiedzi, ale w przypadku bibliotek, które są dystrybuowane wyłącznie za pośrednictwem sklepu Windows, takich jak winget , jest to najlepsza opcja.

Dalsze czytanie

KyleMit
źródło
0

Doświadczyłem tego samego problemu, ale oprócz zablokowania Pythona, wszystkie programy w Scriptsfolderze również były. Pozostałe odpowiedzi o aliasach, ścieżce i winptynie pomogły.

W końcu odkryłem, że to mój program antywirusowy (Avast) postanowił z jakiegoś powodu z jakiegoś powodu po prostu zablokować wszystkie skompilowane skrypty Pythona.

Poprawka jest na szczęście łatwa: po prostu dodaj cały katalog Pythona do białej listy. Zobacz tutaj, aby uzyskać pełne wyjaśnienie.

wytworny
źródło
-1

Może możesz spróbować otworzyć wiersz polecenia z uprawnieniami administratora. (Uruchom jako administrator). U mnie działa przez większość czasu.

Imtiyaz Shaikh
źródło
3
Plik wykonywalny Pythona działa w CMD nawet bez uprawnień administratora. Problem polega na tym, że nie działa w Git Bash, który jest podstawowym narzędziem dla programistów i jest domyślny, i działa z każdą inną metodą dystrybucji dla Pythona, co oznacza, że ​​powinien również działać tutaj.
Ryan,