“Дозвіл відмовлено” при спробі запустити Python у Windows 10


126

Здається, оновлення Windows 10 за одну ніч зламало Python. Спроба запуску python --versionповернула помилку "Дозвіл відмовлено". Жодне з трьох оновлень; KB4507453, KB4506991 або KB4509096 виглядають так, ніби вони є винуватцем, але час видачі підозрілий. Замість того, щоб возитися з відкотом, я сподіваюся, що є простіше виправлення, якого я не маю.

Дозволи на python - "-rwxr-xr-x", і я нічого не змінив, крім того, що дозволив перезавантажити машину Windows після встановлення вчорашніх виправлень.

Згідно з інформацією про систему, я працюю 10.0.18362

Слід також зазначити, що це відбувається незалежно від того, чи я (намагаюся) виконати Python з git-bash, використовуючи "запуск від імені адміністратора" чи ні, і якщо я спробую використовувати PowerShell, він просто відкриває магазин Windows, ніби додаток не встановлено так Я думаю, що він /c/Users/david/AppData/Local/Microsoft/WindowsApps/чомусь не бачить вміст моєї папки.

Я також намагався перевстановити Python 3.7.4, але це теж не допомогло. Чи є щось ще, на що я мав би дивитись?


Можливо, варто перевірити веб-сайт Microsoft. Я десь читав, вибачте, не пам’ятаю де, що інші люди мали проблеми з цим оновленням - порожній екран, я думаю. У будь-якому випадку, очікування, поки вони виправлять це через день-два, може виявитись відповіддю.
Мураха

До речі, "дозволи на python є '-rwxr-xr-x'", ймовірно, безглуздо в Windows. Це щось фальшиве, про яке повідомляє Unix-подібне середовище, таке як MSYS2 або git-bash.
Eryk Sun

Ні. Це пакет Python з сайту python.org. Те саме, що працює роками без жодних проблем і щойно розпочав роботу з останньою версією Windows
цифра

Ви знайшли рішення? У мене те саме питання.
Шенкс

На жаль, немає. Я живу з цим, як і роблю більшу частину своєї роботи в Docker. Якщо я це зроблю, я обов’язково опублікую свої висновки!
цифра

Відповіді:


205

Наскільки я можу зрозуміти, це було викликано конфліктом з версією Python 3.7, яка нещодавно була додана до магазину Windows. Схоже, це додало до %USERPROFILE%\AppData\Local\Microsoft\WindowsAppsпапки два "заглушки", які називаються python.exe та python3.exe , і в моєму випадку це було вставлено перед входом мого виконуваного файлу Python у PATH.

Переміщення цього запису нижче правильної папки Python (частково) виправило проблему.

Друга частина виправлення - це ввести manage app execution aliasesв підказку пошуку Windows і взагалі вимкнути сховища версій Python.

керувати псевдонімами виконання додатків

Можливо, вам потрібно буде виконати лише другу частину, але в моїй системі я вніс обидві зміни, і зараз все повертається до норми.


56
(Співробітник Microsoft і розробник ядра CPython тут) Вам точно потрібно виконати лише другу частину. Було кілька помилок, пов’язаних з оновленням програм, що скидають псевдоніми, які будуть виправлені в наступному стабільному оновленні, тому до цього моменту це має бути одноразовим виправленням. Поки ви отримуєте оновлення Інсайдерів, можливо, вам доведеться зробити це ще пару разів.
Zooba

10
Крім того, проблемою "Доступ заборонено" є помилка Git Bash (або хто підтримує свій порт Bash ... Я сам не впевнений, чий це). А запуск Store - це нова функція, яка допомагає людям встановлювати Python - якщо ви додали його до PATH за допомогою звичайного інсталятора, він повинен мати перевагу над новим редиректором, але якщо ні, то вище ви дізналися, як його вимкнути.
Zooba

5
Мені просто довелося перейти до другої частини, щоб вирішити цю проблему для мене.
kennyB

6
Для мене мені також довелося додати python до свого шляху (C: \ Users \ YourUsernameHere \ AppData \ Local \ Programs \ Python \ Python37) для git bash, щоб знайти python
Niels,

2
Додавати його до свого шляху і пересувати на вершину було моїм рішенням, як це робив Нілс. Той факт, що я не можу просто перейменувати заглушку на заглушку магазину Windows, досить дратує.
Джон В. Кларк

26

Дослідження

Всі файли в %USERPROFILE%\AppData\Local\Microsoft\WindowsAppsє заповнювачами, які вказують на файли, які насправді знаходяться десь C:\Program Files\WindowsApps, і їм, як видається, повністю відмовлено у дозволах.

Здається, я пішов правильним шляхом, заявивши в дублікаті цієї проблеми:

"Схоже, вони насправді не замислювались про спосіб розповсюдження з гвинтом з дозволами!"

Джерело: Не вдається встановити pylint у Git Bash у Windows (Магазин Windows)

Завдяки методу розповсюдження WindowsApps дозволи викручуються по-королівськи:

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення Цікаво, що там сказано, що група "Користувачі" може читати та виконувати файли, як і мій конкретний користувач, але група "Адміністратори" може перераховувати вміст папок лише з якоїсь надзвичайно незбагненної причини. І при спробі отримати доступ до папки у Провіднику файлів, він відмовляється навіть показувати вміст папки, тому в цьому також є щось непомітне.

Цікаво, що, хоча виконання pythonв CMD працює нормально, папка "WindowsApps" не відображається при перерахуванні файлів у каталозі, в якому вона знаходиться, а спроба переходу до папки генерує помилку "Дозвіл відхилено":

введіть тут опис зображення

Для спроби змінити дозволи спочатку потрібно змінити власника, тому я змінив власника на групу Адміністратори. Після цього я спробував змінити дозволи для групи Адміністратори, щоб включити Повний контроль, але вона не змогла змінити це, оскільки "доступ заборонено" (duh, Micro $ ucks, це те, що ми намагаємось змінити!).

введіть тут опис зображення

Ця помилка дозволу сталася для такої кількості файлів, що я використав Alt + C, щоб швидко натиснути "Продовжити" у повторних повідомленнях, але це все одно зайняло занадто багато часу, тому я скасував процес, в результаті чого з'явилося це попереджувальне повідомлення:

введіть тут опис зображення

І зараз я не можу повернути користувача TrustedInstaller як власника папки WindowsApps, оскільки він не відображається у списку Користувачі / Групи / Вбудовані принципи безпеки / Інші об'єкти. *

введіть тут опис зображення

* Насправді, згідно з цим посібником , ви можете повернути власника до TrustedInstaller, набравшиNT Service\TrustedInstaller в текстове поле імені об'єкта.

Рішення

Рішення не існує. В основному, ми повністю обернуті. Стильний хід, Microsoft.


12
(Працівник Microsoft та основний розробник CPython тут) Зараз є помилка, я працюю над виправленням у Windows, де ви можете запускати виконувані файли в цьому місці, але лише якщо у вас увімкнено глобальний псевдонім (в Manage App Execution aliases). Я намагаюся змінити його так, щоб вам потрібно було встановити програму лише для поточного користувача.
Zooba,

4
Ми можемо прочитати дозволи через це діалогове вікно, оскільки воно належить екземпляру dllhost.exe (розміщує розширення оболонки безпеки, rshx32.dll), яке працює з доступом адміністратора і, отже, має доступ до вмісту папки зі списком (тобто виконувати; синхронізувати; і читати дані, атрибути та дозволи). Запис для групи користувачів не стосується звичайної перевірки доступу. Це залежить від існування атрибута безпеки WIN: // SYSAPPID, тобто будь-якої програми. Вкладена папка для кожної програми надає користувачам доступ для читання, але доступ до виконання залежить від запуску за посиланням програми, яке встановлює власний маркер доступу.
Eryk Sun

@ErykSun Це перша інформаційна відповідь, яку я коли-небудь бачив про виконання та дозволи Windows. Дякую.
Райан,

Я насправді все ще маю справу з наслідками спроби змінити дозволи на папку. Деякі WinApps взагалі припинили запуск, поки я не дотримувався наступних вказівок: ( superuser.com/questions/1288014/… ), але тепер вони видають повідомлення про помилки при запуску. Я використовував старіший образ Win10 USB, тому, ймовірно, неправильно встановив дозволи.
Райан

1
@MarkSimpson рада, що ця тема допомогла. Не знаю, що я, можливо, написав. Обов’язково подякуйте співробітникам Microsoft, які розмістили реальні відповіді в коментарях тут.
Райан


12

Це питання є надто поширеним, щоб все ще залишатися наполегливим. І більшість відповідей та інструкцій не відповідають на це. Ось що потрібно робити в 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. Перезавантажте термінал і спробуйте надрукувати py, python, python3або python.exe.


5

Це не рішення з PowerShell, але у мене була та ж проблема, за винятком MINGW64. Я обійшов це, переключившись на підсистему Windows для Linux (що я хотів зробити в будь-якому випадку) як мій термінал, як правило, і у VSCode. Цей пост це добре описує:

Як налаштувати код VS (Windows) для використання програми Ubuntu як терміналу

Підсумовуючи:

1) Встановіть Ubuntu з магазину Windows App Store

2) Змініть типовий bash з CMD -> wslconfig / setdefault Ubuntu

--- Для VSCode

3) Перезапустіть VSCode

4) У VSCode змініть "terminal.integrated.shell.windows" на "C: \ WINDOWS \ System32 \ bash.exe" (для отримання додаткової інформації див. Пост вище)

Зараз плавно працює у VSCode та WSL (Bash на Ubuntu у Windows). Це може бути як мінімум тимчасовим рішенням для вас.


5

Додавання локального шляху Python до того, як WindowsApps вирішив проблему.

Змінні середовища> Шлях

Bash Python - версія


2

Вирішення: Якщо ви встановили python з exe, виконайте наведені нижче дії.

Крок 1: Видаліть python

Крок 2: Встановіть python і поставте прапорець біля шляху Python, як це виділено нижче на знімку екрана (жовтий).

Це вирішило мене проблему.

введіть тут опис зображення


2

Для мене я спробував manage app execution aliasesі отримав помилку, що python3 не є командою, тому для цього я використав pyзамістьpython3 і це спрацювало

Я не знаю, чому це відбувається, але це спрацювало для мене


1

Найпростішим способом було б змінити свої змінні середовища PATH та PYTHONPATH, щоб переконатися, що папку, що містить належні двійкові файли python, шукають для локальної папки WindowsApp. Ви можете отримати доступ до змінних середовища, відкривши панель керування та шукаючи "env"


1

Це пов’язано з тим, як псевдоніми виконання програми Windows працюють у Git-Bash.

Це відома проблема в MSYS2, через яку неможливо отримати доступ до точок переробки Windows ізIO_REPARSE_TAG_APPEXECLINK

Як обхідне рішення ви можете створити псевдонім для виклику функції, яка використовується cmd.exeпід капотом.

Додайте у свій ~/.bashrcфайл наступне :

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

Для python я б рекомендував просто відключити псевдоніми виконання програми, як у прийнятій відповіді, але для бібліотек, які розповсюджуються виключно через Windows store, наприклад winget, це ваш найкращий варіант.

Подальше читання


0

У мене виникла та сама проблема, але окрім того, що Python був заблокований, усі програми в Scriptsпапці теж були. Інші відповіді про псевдоніми, шлях таwinpty не допомогли.

Нарешті я виявив, що це мій антивірус (Avast), який чомусь вирішив за одну ніч просто заблокувати всі скомпільовані скрипти python з якихось причин.

Виправити це на щастя легко: просто введіть у білий список весь каталог Python. Дивіться тут для повного пояснення.


-1

Можливо, ви можете спробувати відкрити командний рядок із правами адміністратора. (Запустити від імені адміністратора). Працює у мене більшу частину часу.


3
Виконуваний файл python працює в CMD навіть без прав адміністратора. Проблема полягає в тому, що він не працює в Git Bash, який є важливим інструментом для програмістів і є типовим, і він працює з усіма іншими методами розподілу для Python, а це означає, що він повинен [бути змушений] працювати і тут.
Райан,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.