“ การอนุญาตถูกปฏิเสธ” พยายามเรียกใช้ Python บน Windows 10


125

ดูเหมือนว่าการอัปเดตบน Windows 10 ในชั่วข้ามคืนทำให้ Python เสียหาย เพียงแค่พยายามเรียกใช้python --versionกลับพบข้อผิดพลาด "ปฏิเสธการอนุญาต" ไม่มีการอัปเดตสามรายการ KB4507453, KB4506991 หรือ KB4509096 ดูเหมือนว่าพวกเขาจะเป็นผู้ร้าย แต่ระยะเวลาของปัญหานั้นน่าสงสัย แทนที่จะยุ่งกับการย้อนกลับฉันหวังว่าจะมีวิธีแก้ไขที่ง่ายกว่านี้ที่หายไป

สิทธิ์ใน python คือ "-rwxr-xr-x" และฉันไม่ได้เปลี่ยนแปลงอะไรเลยนอกจากปล่อยให้เครื่องรีบูตการอัปเดต Windows หลังจากติดตั้งแพทช์เมื่อคืน

ตามข้อมูลระบบฉันใช้ 10.0.18362

ควรสังเกตด้วยว่าสิ่งนี้เกิดขึ้นไม่ว่าฉันจะ (พยายาม) เรียกใช้ Python จาก git-bash โดยใช้ "run as administrator" หรือไม่และถ้าฉันลองใช้ PowerShell มันก็เปิด Windows store ราวกับว่าแอพไม่ได้ติดตั้ง ฉันคิดว่ามันไม่เห็นเนื้อหาใน/c/Users/david/AppData/Local/Microsoft/WindowsApps/โฟลเดอร์ของฉันด้วยเหตุผลบางประการ

ฉันได้ลองติดตั้ง Python 3.7.4 ใหม่แล้ว แต่ก็ไม่ได้ช่วยอะไรเช่นกัน มีอย่างอื่นที่ฉันควรดูไหม?


ควรตรวจสอบเว็บไซต์ของ Microsoft ฉันอ่านที่ไหนขออภัยจำไม่ได้ว่าคนอื่นมีปัญหากับการอัปเดตนี้ - ฉันคิดว่าหน้าจอว่างเปล่า อย่างไรก็ตามการรอจนกว่าพวกเขาจะแก้ไขในวันหรือสองวันอาจเป็นคำตอบ
มด

BTW "สิทธิ์บน python คือ" -rwxr-xr-x "อาจไม่มีความหมายใน Windows นั่นเป็นของปลอมที่รายงานโดยสภาพแวดล้อมที่เหมือน Unix เช่น MSYS2 หรือ git-bash
Eryk Sun

ไม่ นี่คือแพ็คเกจ Python จาก python.org เช่นเดียวกันกับที่ใช้งานได้เป็นเวลาหลายปีโดยไม่มีปัญหาใด ๆ และเพิ่งเริ่มใช้งานโปรแกรมแก้ไข Windows ล่าสุด
notanumber

คุณพบวิธีแก้ปัญหาหรือไม่? ฉันมีปัญหาเดียวกัน
Shanks

น่าเสียดายที่ไม่มี ฉันใช้ชีวิตอยู่กับมันเพราะทำงานส่วนใหญ่ใน Docker ถ้าฉันทำฉันจะโพสต์สิ่งที่ค้นพบอย่างแน่นอน!
notanumber

คำตอบ:


204

เท่าที่ฉันสามารถบอกได้สิ่งนี้เกิดจากความขัดแย้งกับเวอร์ชันของ Python 3.7 ที่เพิ่งเพิ่มลงใน Windows Store ดูเหมือนว่าสิ่งนี้จะเพิ่ม "ต้นขั้ว" สองรายการที่เรียกว่า python.exe และ python3.exe เข้าไปใน%USERPROFILE%\AppData\Local\Microsoft\WindowsAppsโฟลเดอร์และในกรณีของฉันสิ่งนี้ถูกแทรกก่อนรายการปฏิบัติการ Python ที่มีอยู่ในไฟล์PATH.

การย้ายรายการนี้ด้านล่างโฟลเดอร์ Python ที่ถูกต้อง (บางส่วน) ช่วยแก้ไขปัญหา

ส่วนที่สองของการแก้ไขคือพิมพ์manage app execution aliasesลงในพรอมต์การค้นหาของ Windows และปิดการใช้งาน Python เวอร์ชันร้านค้าทั้งหมด

จัดการนามแฝงการเรียกใช้แอป

เป็นไปได้ว่าคุณจะต้องทำในส่วนที่สองเท่านั้น แต่ในระบบของฉันฉันได้ทำการเปลี่ยนแปลงทั้งสองอย่างและทุกอย่างก็กลับมาเป็นปกติแล้ว


56
(พนักงาน Microsoft และผู้พัฒนาหลัก CPython ที่นี่) คุณต้องทำส่วนที่สองเท่านั้น มีข้อบกพร่องบางประการที่เกี่ยวข้องกับการอัปเกรดแอปที่รีเซ็ตนามแฝงซึ่งจะได้รับการแก้ไขในการอัปเดตที่เสถียรครั้งต่อไปดังนั้นจึงควรแก้ไขเพียงครั้งเดียวในตอนนั้น ในขณะที่คุณได้รับการอัปเดต Insiders คุณอาจต้องทำอีกสองสามครั้ง
Zooba

10
นอกจากนี้ปัญหา "Access Denied" คือบั๊ก 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 ได้นั้นค่อนข้างน่ารำคาญ
John W. Clark

26

การวิจัย

ไฟล์ทั้งหมดใน%USERPROFILE%\AppData\Local\Microsoft\WindowsAppsเป็นตัวยึดตำแหน่งที่ชี้ไปยังไฟล์ที่อยู่ที่ไหนสักแห่งC:\Program Files\WindowsAppsซึ่งเกิดขึ้นโดยถูกปฏิเสธสิทธิ์โดยสิ้นเชิง

ดูเหมือนว่าฉันมาถูกทางแล้วกับคำแถลงของฉันที่ทำซ้ำกับปัญหานี้:

"ดูเหมือนว่าพวกเขาไม่ได้คิดเกี่ยวกับวิธีการแจกจ่ายที่มีสิทธิ์!"

ที่มา: ไม่สามารถติดตั้ง pylint ใน Git Bash บน Windows (Windows Store)

สิทธิ์ถูกทำให้เมาขึ้นอย่างรวดเร็วเนื่องจากวิธีการแจกจ่าย WindowsApps:

ป้อนคำอธิบายภาพที่นี่ ป้อนคำอธิบายภาพที่นี่ ป้อนคำอธิบายภาพที่นี่ สิ่งที่น่าสนใจกล่าวว่ากลุ่ม "ผู้ใช้" สามารถอ่านและเรียกใช้ไฟล์ได้เช่นเดียวกับผู้ใช้เฉพาะของฉัน แต่กลุ่มผู้ดูแลระบบสามารถแสดงรายการเนื้อหาของโฟลเดอร์ได้ด้วยเหตุผลที่เข้าใจไม่ได้ และเมื่อพยายามเข้าถึงโฟลเดอร์ใน File Explorer มันปฏิเสธที่จะแสดงเนื้อหาของโฟลเดอร์ด้วยซ้ำดังนั้นจึงมีบางอย่างที่น่ารังเกียจเช่นกัน

สิ่งที่น่าสนใจคือแม้ว่าการเรียกใช้งานpythonใน CMD จะทำงานได้ดี แต่โฟลเดอร์ "WindowsApps" จะไม่ปรากฏขึ้นเมื่อแสดงรายการไฟล์ในไดเรกทอรีที่อยู่และการพยายามเข้าไปในโฟลเดอร์จะทำให้เกิดข้อผิดพลาด "ปฏิเสธการอนุญาต":

ป้อนคำอธิบายภาพที่นี่

การพยายามเปลี่ยนสิทธิ์จำเป็นต้องเปลี่ยนเจ้าของก่อนดังนั้นฉันจึงเปลี่ยนเจ้าของเป็นกลุ่มผู้ดูแลระบบ หลังจากนั้นฉันพยายามเปลี่ยนสิทธิ์สำหรับกลุ่มผู้ดูแลระบบเพื่อรวมการควบคุมทั้งหมด แต่ไม่สามารถเปลี่ยนแปลงได้เนื่องจาก "การเข้าถึงถูกปฏิเสธ" (duh, Micro $ ucks นั่นคือสิ่งที่เรากำลังพยายามเปลี่ยนแปลง!)

ป้อนคำอธิบายภาพที่นี่

ข้อผิดพลาดการอนุญาตนี้เกิดขึ้นกับไฟล์จำนวนมากที่ฉันใช้ Alt + C เพื่อคลิก "ดำเนินการต่อ" อย่างรวดเร็วในข้อความซ้ำ แต่ยังใช้เวลานานเกินไปฉันจึงยกเลิกกระบวนการส่งผลให้ข้อความเตือนนี้ปรากฏขึ้น:

ป้อนคำอธิบายภาพที่นี่

และตอนนี้ฉันไม่สามารถตั้งค่าผู้ใช้ TrustedInstaller กลับมาเป็นเจ้าของโฟลเดอร์ WindowsApps ได้เนื่องจากไม่ปรากฏในรายการผู้ใช้ / กลุ่ม / หลักการรักษาความปลอดภัยในตัว / วัตถุอื่น ๆ *

ป้อนคำอธิบายภาพที่นี่

* ตามบทช่วยสอนนี้คุณสามารถเปลี่ยนเจ้าของกลับเป็น TrustedInstaller ได้โดยพิมพ์NT Service\TrustedInstallerลงในกล่องข้อความชื่อวัตถุ

วิธีการแก้

ไม่มีทางแก้ไขได้ โดยพื้นฐานแล้วเราเมาหมดแล้ว การย้ายที่ดีงาม Microsoft


12
(พนักงานของ Microsoft และผู้พัฒนาหลักของ CPython ที่นี่) มีข้อผิดพลาดในขณะนี้ฉันกำลังดำเนินการแก้ไขใน Windows ซึ่งคุณสามารถเรียกใช้ไฟล์ปฏิบัติการได้ในตำแหน่งนี้ แต่เฉพาะในกรณีที่คุณเปิดใช้นามแฝงส่วนกลาง (ในชื่อแทนการจัดการแอป) ฉันกำลังพยายามเปลี่ยนแปลงเพื่อให้คุณต้องติดตั้งแอปสำหรับผู้ใช้ปัจจุบันเท่านั้น
Zooba

4
เราสามารถอ่านสิทธิ์ผ่านกล่องโต้ตอบนี้ได้เนื่องจากอินสแตนซ์ dllhost.exe เป็นเจ้าของ (โฮสต์ส่วนขยายเชลล์ความปลอดภัย rshx32.dll) ที่ทำงานด้วยการเข้าถึงของผู้ดูแลระบบจึงมีการเข้าถึง "รายการโฟลเดอร์เนื้อหา" (เช่นดำเนินการซิงค์และอ่าน ข้อมูลคุณลักษณะและสิทธิ์) รายการสำหรับกลุ่มผู้ใช้ไม่ใช่สำหรับการตรวจสอบการเข้าถึงตามปกติ เป็นเงื่อนไขเกี่ยวกับการมีอยู่ของแอตทริบิวต์ความปลอดภัย WIN: // SYSAPPID นั่นคือแอปใด ๆ โฟลเดอร์ย่อยสำหรับแต่ละแอปจะให้สิทธิ์การเข้าถึงแบบอ่านแก่ผู้ใช้ แต่การเข้าถึงการดำเนินการมีเงื่อนไขในการเรียกใช้ผ่านลิงก์แอปที่ตั้งค่าโทเค็นการเข้าถึงที่กำหนดเอง
Eryk Sun

@ErykSun นั่นคือคำตอบแรกที่ได้รับข้อมูลที่ฉันเคยเห็นเกี่ยวกับการทำงานและสิทธิ์ของ windows ขอบคุณ.
Ryan

ฉันยังคงจัดการกับผลเสียจากการพยายามเปลี่ยนสิทธิ์ในโฟลเดอร์ WinApps บางตัวหยุดการเปิดตัวโดยสิ้นเชิงจนกว่าฉันจะทำตามคำแนะนำเหล่านี้: ( superuser.com/questions/1288014/… ) แต่ตอนนี้พวกเขาให้ข้อความแสดงข้อผิดพลาดในการเปิดตัว ฉันใช้อิมเมจ Win10 USB รุ่นเก่าดังนั้นอาจตั้งค่าการอนุญาตไม่ถูกต้อง
Ryan

1
@MarkSimpson ดีใจที่กระทู้นี้ช่วยได้ ไม่แน่ใจว่าฉันเขียนอะไรไว้ อย่าลืมขอบคุณพนักงานของ Microsoft ที่โพสต์คำตอบที่แท้จริงในความคิดเห็นที่นี่
Ryan


12

ปัญหานี้เป็นเรื่องธรรมดาเกินไปที่จะยังคงมีอยู่ และคำตอบและคำแนะนำส่วนใหญ่ไม่สามารถระบุได้ นี่คือสิ่งที่ต้องทำบน Windows 10:

  1. พิมพ์environment variablesในแถบการค้นหาเริ่มต้นและเปิดแก้ไขตัวแปรของระบบสิ่งแวดล้อม

  2. คลิกตัวแปรสภาพแวดล้อม ...

  3. ในส่วน System Variables ให้ค้นหาตัวแปรด้วยคีย์Pathและดับเบิลคลิก

  4. มองหาเส้นทางที่ชี้ไปยังไฟล์ python ไม่น่าจะมีเลย หากมีให้เลือกและลบออก

  5. สร้างชุดตัวแปรใหม่สำหรับพา ธ ไปยังไฟล์ปฏิบัติการ python ของคุณ C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Python38ปกตินี้คือ ตรวจสอบให้แน่ใจโดยตรวจสอบผ่าน File Explorer ของคุณ

    หมายเหตุ : หากคุณมองไม่เห็นAppDataอาจเป็นเพราะคุณไม่ได้เปิดใช้งานการดูรายการที่ซ่อนอยู่ : คลิกแท็บมุมมองและเลือกช่องทำเครื่องหมายรายการที่ซ่อนอยู่

  6. สร้างตัวแปรอื่นที่ชี้ไปที่Scriptsไดเร็กทอรี C:\Users\[YOUR USERNAME HERE]\AppData\Local\Programs\Python\Scriptsโดยปกติจะเป็น

  7. รีสตาร์ทเครื่องของคุณและพยายามพิมพ์py, python, หรือpython3python.exe


5

ไม่ใช่วิธีแก้ปัญหาด้วย PowerShell แต่ฉันมีปัญหาเดียวกันยกเว้น MINGW64 ฉันสามารถแก้ไขได้โดยเปลี่ยนไปใช้ Windows Subsystem สำหรับ Linux (ซึ่งฉันต้องการทำต่อไป) เป็นเทอร์มินัลของฉันโดยทั่วไปและใน VSCode โพสต์นี้อธิบายได้ดี:

วิธีกำหนดค่า VS Code (windows) เพื่อใช้ Ubuntu App เป็น Terminal

สรุป:

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) อย่างน้อยอาจเป็นวิธีแก้ปัญหาชั่วคราวสำหรับคุณ



2

วิธีแก้ปัญหา: หากคุณติดตั้ง python จาก exe ให้ทำตามขั้นตอนด้านล่าง

ขั้นตอนที่ 1: ถอนการติดตั้ง python

ขั้นตอนที่ 2: ติดตั้ง python และทำเครื่องหมายที่ช่องทำเครื่องหมาย Python path ตามที่ไฮไลต์ไว้ด้านล่าง screentshot (สีเหลือง)

สิ่งนี้ช่วยแก้ปัญหาให้ฉันได้

ป้อนคำอธิบายภาพที่นี่


2

สำหรับฉันฉันลองmanage app execution aliasesและได้รับข้อผิดพลาดว่า python3 ไม่ใช่คำสั่งดังนั้นฉันจึงใช้pyแทนpython3และใช้งานได้

ฉันไม่รู้ว่าทำไมสิ่งนี้จึงเกิดขึ้น แต่มันได้ผลสำหรับฉัน


1

สิ่งที่ง่ายที่สุดที่ต้องทำคือแก้ไขตัวแปรสภาพแวดล้อม PATH และ PYTHONPATH ของคุณเพื่อให้แน่ใจว่ามีการค้นหาโฟลเดอร์ที่มีไบนารี python ที่เหมาะสมสำหรับโฟลเดอร์ WindowsApp คุณสามารถเข้าถึงตัวแปรสภาพแวดล้อมได้โดยเปิดแผงควบคุมและค้นหา "env"


1

นี่เป็นเพราะวิธีที่ Windows App Execution Aliasesทำงานใน 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

คุณอาจลองเปิด command prompt ด้วยสิทธิ์ของผู้ดูแลระบบ (เรียกใช้ในฐานะผู้ดูแลระบบ) ใช้ได้ผลกับฉันเกือบตลอดเวลา


3
ไฟล์ปฏิบัติการ python ทำงานใน CMD แม้ไม่มีสิทธิ์ของผู้ดูแลระบบ ปัญหาคือมันใช้ไม่ได้ใน Git Bash ซึ่งเป็นเครื่องมือที่จำเป็นสำหรับโปรแกรมเมอร์และเป็นค่าเริ่มต้นและทำงานร่วมกับวิธีการแจกจ่ายอื่น ๆ สำหรับ Python ซึ่งหมายความว่ามันควร [ถูกสร้างขึ้นมาเพื่อ] ที่นี่เช่นกัน
Ryan

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.