PyCharm终端提示禁止运行脚本?详解PowerShell执行策略与虚拟环境配置 刚配好PyCharm新建项目、选好解释器一鼓作气跑到终端里敲pip install requests屏幕却啪地甩出一行红字“无法加载文件 ...\activate.ps1因为在此系统上禁止运行脚本”。很多朋友第一次遇到这玩意儿都是一脸懵我装的是Python关PowerShell什么事我代码一行没写怎么就被“禁止”了别急这个报错不是你的代码有问题也不是PyCharm坏了而是你的Windows环境里PowerShell的执行策略默认不让你跑.ps1脚本而PyCharm的终端恰恰默认用PowerShell来做事。这篇就从根上把这个“禁止脚本运行”的坑拆清楚顺便把PyCharm的终端、虚拟环境、pip安装这些配套操作一块儿理顺让新电脑到手后能稳稳地写代码、装包、跑脚本不再被这种环境问题打断节奏。这篇内容适合刚接触PyCharm、正在跟着教程配环境的初学者也适合被各种“禁止运行脚本”“pip无法识别”折磨过的老手——你会发现很多报错其实是同一个病根一次处理能解决一串问题。1. 这个报错到底在说什么先弄懂PowerShell的执行策略1.1 一个报错两个常见触发场景先说结论这个报错百分之九十出现在Windows系统的PowerShell环境中而不是cmd或Git Bash。PyCharm默认是在Windows上调用PowerShell作为终端程序的当你做下面这两类操作时很容易撞上脚本运行禁令在PyCharm底部Terminal面板里输入.\venv\Scripts\activate想激活虚拟环境或是运行pip install xxx某些情况下pip本身是个.exe没问题但如果你系统里配置的是“python -m pip”那么执行链会经过Python一般不会触发脚本禁令真正被拦的是各种.ps1文件。在PyCharm里配置了“运行外部工具”、自定义构建脚本或者某些插件会生成PowerShell脚本去执行。最典型的报错原文大概是这样的无法加载文件 D:\myproject\venv\Scripts\Activate.ps1因为在此系统上禁止运行脚本。有关详细信息请参阅 https://go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 CategoryInfo : SecurityError: 具体信息... FullyQualifiedErrorId : UnauthorizedAccess注意关键词禁止运行脚本、SecurityError、UnauthorizedAccess。这就是PowerShell在执行策略层面把文件“拉黑”了。1.2 为什么PyCharm会牵连进来很多人以为PyCharm自己就是一个能跑Python的完整环境其实不是。PyCharm是个图形化外壳它内部的Terminal面板、运行配置、虚拟环境管理等最后都要调用系统里的Python解释器、Shell命令才能完成。在Windows上PyCharm安装后会自动检测到PowerShell作为终端Shell如果你没有改过设置那么Terminal面板打开就是PowerShell。而Python的虚拟环境venv里Scripts目录下会生成好几个激活脚本activatebash、activate.batcmd、Activate.ps1PowerShell。PyCharm如果通过PowerShell去激活虚拟环境自然就执行了Activate.ps1。Windows的PowerShell默认执行策略叫Restricted几乎禁止任何本地脚本文件运行除非你有明确的放行配置。于是就出现了“PyCharm中禁止脚本运行”的怪现象代码本身没问题环境工具之间打架了。2. 最简单的解决方案修改PowerShell执行策略2.1 用管理员权限修改执行策略解决问题的标准办法是修改PowerShell的执行策略把它从Restricted调成RemoteSigned。RemoteSigned的意思是本地创建的脚本可以运行从互联网上下载的脚本必须有数字签名才能运行。操作步骤如下在Windows开始菜单里找到“Windows PowerShell”或“Terminal”右键选择“以管理员身份运行”。执行下面这条命令Set-ExecutionPolicy RemoteSigned系统会问你是否要更改执行策略输入Y回车确认。然后关闭管理员窗口回到PyCharm关掉当前终端再重新打开一个。再试一次激活虚拟环境或运行pip报错就会消失。2.2 不折腾全局只对当前用户生效如果你不想让管理员权限参与也不想影响系统里其他账户可以只对当前用户设置执行策略不用打开管理员PowerShellSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser这个命令在很多情况下也能生效。因为CurrentUser这个作用域只改当前用户相关的注册表项不需要管理员权限。我实测过在新电脑上、标准用户权限下用这条命令一样能把执行策略改过来。关键是-Scope参数一定要写对否则会被系统驳回。2.3 执行策略级别详解新手容易疑惑到底有哪些策略各自有什么差别这里整理一张表方便你根据自己的实际情况选执行策略名称允许运行什么脚本禁止运行什么脚本使用场景建议Restricted不允许任何.ps1脚本运行所有脚本Windows默认配置最安全但最不方便RemoteSigned本地脚本可运行网上下载的脚本须有可信签名无签名的外部下载脚本日常开发推荐兼顾安全与便利AllSigned所有脚本必须签名未签名脚本对安全要求极高的环境Unrestricted所有脚本都可运行但运行外部脚本前会弹出警告无方便但在不可信环境下风险大Bypass所有脚本运行且不发出任何警告无临时测试时用不建议作为长期策略在实际开发中RemoteSigned是平衡得最好的一个。它允许你本地创建的activate.ps1、自己写的自动化脚本正常运行同时又能拦住最明显的无签名外部脚本算是个“够用且不过分”的配置。2.4 修改后验证改完之后最好确认一下当前生效的策略避免改了半天发现其实没改到。在PowerShell里执行Get-ExecutionPolicy -List这个命令会列出各个作用域MachinePolicy、UserPolicy、Process、CurrentUser、LocalMachine的执行策略状态。正常情况下你会看到类似这样的输出Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser RemoteSigned LocalMachine Undefined如果CurrentUser显示RemoteSigned说明你的修改生效了。如果哪一栏显示Restricted就继续排查是不是被组策略或者企业安全软件覆盖。3. 换一条路让PyCharm改用cmd或Git Bash作为终端3.1 修改PyCharm终端设置如果你对PowerShell不熟悉或者公司电脑有安全策略不让你改执行策略还有一个很实用的绕行方案把PyCharm的终端从PowerShell改成cmd命令提示符。cmd不执行.ps1只认.bat和.exe所以不会遇到“禁止运行脚本”这个报错。修改方法很简单打开PyCharm菜单栏选择File SettingsWindows或PyCharm PreferencesmacOS不过macOS不会涉及此文问题。左侧找到Tools Terminal。右侧的Shell path当前应该是powershell.exe把它改成cmd.exe。点击OK保存然后关闭终端面板重新打开。改完之后你会发现终端变成了熟悉的黑底白字命令提示符窗口。这时候激活虚拟环境要用的命令也变了不再用.\venv\Scripts\activate而是用venv\Scripts\activate.bat或者直接执行venv\Scripts\activatecmd会自动找到activate.bat来执行不会触发PowerShell的脚本策略。3.2 cmd下venv激活方式的不同有一个细节很多人会忽略在PowerShell里激活虚拟环境要敲.\venv\Scripts\activate而在cmd里敲同样的路径cmd会优先执行activate.bat。如果你已经把终端改成cmd就不需要加.\前缀直接写相对路径或绝对路径都可以。我自己的习惯是无论是PowerShell还是cmd都直接用venv\Scripts\activate这样在两种Shell里都比较通用。注意前面的.\是PowerShell里表示“当前目录”的写法不加也能激活但容易跟系统PATH里同名命令混淆所以很多人习惯保留。你在cmd里就不要敲.\直接敲venv\Scripts\activate就好否则cmd会提示路径不对。3.3 为什么推荐其中一种既然有两条路可走选哪条更合适我的建议是能改执行策略就优先改执行策略保留PowerShell。原因是PyCharm的Terminal默认就是PowerShell刻意改成cmd虽然能躲开报错但会带来其他小别扭一些现代命令行工具比如oh-my-posh、部分终端的快捷键、脚本、$PROFILE里的自定义别名在cmd里都不生效PyCharm的某些插件比如部分AI插件、Git集成插件也可能隐式调用PowerShell命令改了Shell path后出现一些莫名其妙的行为。而如果公司电脑的组策略真的禁止修改执行策略那你只能改用cmd或者临时使用-ExecutionPolicy Bypass绕过限制不过这个属于临时方案后面会专门说。4. 深入排查还有哪些隐藏因素会导致“禁止运行脚本”4.1 组策略覆盖有时你明明执行了Set-ExecutionPolicy并且命令也没报错但Get-ExecutionPolicy -List里看到的仍然是Restricted。这种多数情况是Windows组策略GPO已经定义了“计算机配置 管理模板 Windows 组件 Windows PowerShell 打开脚本执行”这一项并设置了“已启用”且策略是“只允许运行签名脚本”。如果有组策略接管命令行里的设置会被覆盖没有管理员权限根本改不掉。遇到这种情况先确认自己是不是在公司域环境里。如果是可以联系IT管理员说明你是Python开发需要在本地允许运行项目目录下的脚本请他们调整策略。如果只是一台个人电脑但系统被折腾过可以打开gpedit.msc专业版以上系统才有检查一下本地组策略里有没有相关设置把它改成“未配置”再重启PowerShell试试。4.2 文件是从网络下载的被标记为“来自其他计算机”这个问题特别隐蔽。你从网上下载了一个.ps1脚本甚至是整个zip包解压后得到的脚本Windows会把文件标记上Zone.Identifier即“来自其他计算机”的标记。即使执行策略是RemoteSignedPowerShell依然会拒绝运行这种未签名的外部脚本。解决办法就是对单个文件解除锁定Unblock-File -Path D:\mydownload\setup.ps1或者在文件资源管理器里右键文件属性勾选“解除锁定”。这个操作只针对单个文件比全局关策略安全得多。尤其是你从GitHub上拉下来的一些工具脚本经常会遇到只看报错不知道原因的“禁止运行”其实就是这个Zone.Identifier在作祟。4.3 杀毒软件与企业安全软件干扰一些杀毒软件、EDR端点检测与响应工具会对脚本执行做管控即使Windows系统层面的执行策略已经改成了RemoteSigned安全软件也可能介入拦截脚本运行并给出类似“禁止脚本运行”的提示。这种情况比较难排查因为报错可能来自功率层而不是PowerShell本身。排查思路是先在系统日志里看脚本拦截记录临时暂停杀毒软件的文件实时监控再测试脚本能否运行。如果临时关闭后能运行说明问题在安全软件不建议长期关闭杀毒软件而是去安全软件的白名单里加入你的项目目录或Python虚拟环境目录。另外微软自带的Defender也有“攻击面减少规则”其中的“阻止来自Office应用程序创建的可执行内容运行”等规则有时也会误伤项目生成的脚本可以单独排除。4.4 补充pip识别不了的问题是不是同源很多人把“禁止运行脚本”和“pip无法识别”放在一起搜索这两个问题有时候是同一个根因PATH路径没有配好。报错信息“无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称”跟执行策略没有直接关系它是说pip.exe根本不在系统PATH中。但在PyCharm里如果你用的是虚拟环境pip通常存在于venv\Scripts\pip.exe并不会报找不到。如果你在全局环境里运行pip报这个错优先检查Python安装目录下的Scripts文件夹是否加进了PATH。注意这个报错和“禁止运行脚本”是两个不同的问题分开排查别混为一谈。5. 实践案例新电脑从零配置PyCharmvenvpip的完整流程5.1 安装前准备我们以Windows 11 PyCharm Community Edition 2024.1.4 Python 3.11为例完整走一遍配置流程。首先确保你安装好了Python解释器安装时记得在初始化页面勾选“Add Python to PATH”这是减少后续麻烦的关键一步。确认Python版本和pip是否正常可以打开PowerShell不是PyCharm内部终端执行python --version pip --version如果pip报“无法识别”说明你安装Python时没把Scripts目录加进PATH或是你用了Anaconda但Anaconda没有自动激活base环境。前者直接重新安装Python并勾选Add to PATH后者在开始菜单打开“Anaconda Prompt”用里面的环境或者把conda的Scripts目录手动加入PATH。5.2 创建项目、配置解释器打开PyCharm点击New Project选择Pure Python在Location里指定项目路径。PyCharm默认会为项目自动创建虚拟环境venv解释器路径会指向你安装的Python。这个设计很贴心它省掉了你手动创建虚拟环境的步骤。但要注意如果一个项目里已经有了venvPyCharm会提示你是否用现有的环境选择“Existing interpreter”指定到venv\Scripts\python.exe即可。项目创建完成后先别急着写代码先打开底部Terminal面板确认一下当前环境是不是虚拟环境。正常情况下终端提示符前面会出现(venv)字样。如果没有说明终端没有自动激活虚拟环境或者你用的Shell不支持激活逻辑。5.3 安装依赖包实测pip安装pandas、requests现在来安装最常见的两个包requests和pandas。在Terminal里执行pip install requests pandas如果你之前已经处理好了“禁止运行脚本”问题这里会自动下载、安装并显示成功信息。如果还是报“禁止运行脚本”那就回到第2节把执行策略改好。在安装过程中你可能会遇到PyCharm进度条卡住或下载很慢的情况。多数是网络问题国内用户可以考虑在PyCharm里配置国内镜像源。方法是在File Settings Project Python Interpreter里找到包列表左下角的号在Manage Repositories里添加清华源https://pypi.tuna.tsinghua.edu.cn/simple。添加后下载速度快很多但你也会发现这跟“禁止脚本运行”半毛钱关系没有纯粹是网络优化咱们这里就顺手提一嘴。5.4 补充把Python脚本打包成exe的常见步骤每次配置完环境总有很多人问“怎么把py变成exe”。虽然不是本文重点但既然热搜词里反复出现我就简单带一笔。在PyCharm的Terminal里执行pip install pyinstaller pyinstaller -F -w 你的脚本.py-F是打包成单文件-w是去掉控制台窗口如果你是GUI程序。打包后的exe在dist目录下。这一步里如果PowerShell报“禁止运行脚本”说明你还没解决最前面的问题老话重提先改执行策略再说。另外pyinstaller打包时杀毒软件经常误报如果打包后exe被删最好在杀毒软件里添加排除目录或者在隔离区恢复文件。6. 常见问题速查表与避坑心得6.1 常见问题和解决方案表格把我在多个项目里遇到的同类型问题整理成一个速查表方便你直接对号入座问题现象根本原因快速解决方案终端提示“禁止运行脚本”PowerShell执行策略为RestrictedSet-ExecutionPolicy RemoteSigned -Scope CurrentUser设置了策略但下次打开又失效组策略覆盖检查组策略GPO调整或联系管理员从网上下载的脚本还是无法运行Zone.Identifier文件标记用Unblock-File解除锁定PyCharm终端打开显示(venv)但运行脚本没反应虚拟环境未正确激活运行venv\Scripts\activate后确认命令行提示符有(venv)pip命令无法识别PATH未包含Python Scripts目录重新安装Python并勾选Add to PATH或手动添加环境变量安装包超时网络连接PyPI慢配置国内镜像源PyCharm创建项目后解释器显示“Invalid”虚拟环境损坏或Python路径变更在Interpreter设置中重新选择python.exe路径6.2 独家经验遇到执行策略问题先别急着“-ExecutionPolicy Bypass”网上很多教程会让你用“powershell -ExecutionPolicy Bypass”后缀来启动PyCharm或终端比如修改PyCharm的终端Shell path为powershell.exe -ExecutionPolicy Bypass这样确实能跑但我不推荐把它当作长期方案。原因很简单Bypass意味着完全绕过安全策略你每次开终端都等于在裸奔。一旦你某个目录下混进了一个恶意的.ps1脚本PowerShell会毫不留情地执行它后果可能很严重。所以我把Bypass定位为“调试时临时用”正经做法还是把执行策略改成RemoteSigned。可以说你只要把执行策略问题当成一个一次性的环境配置项目来处理后面一两年都不用再碰这类问题。6.3 给新手的安全底线建议在处理“禁止运行脚本”这类报错时我的原则是“只在必要的时候放开权限且只放开最小必要范围”。具体来说优先使用-Scope CurrentUser不要动LocalMachine除非你知道自己在做什么。修改执行策略后尽快验证并恢复正常状态不要永远停留在Unrestricted或Bypass。从网上下载的脚本、安装包如果来源不是官方或可信的尽量别下载到本地执行。PyCharm里运行Python脚本本身不受PowerShell执行策略影响你只要管好终端里的命令和虚拟环境激活脚本就行。说到底这个“PyCharm中禁止脚本运行”的报错本质上不是PyCharm的锅也不是你代码的锅而是Windows在安全策略上给开发者设的一道门槛。只要理解了PowerShell执行策略是怎么工作的顺手配置一下后面基本就能一路畅通。我每次给新电脑配环境时做完Python和PyCharm安装后第一件事就是顺手执行一次Set-ExecutionPolicy RemoteSigned -Scope CurrentUser从源头上掐掉这类问题。这个小习惯帮我省了不少事在这里也推荐给你。