相信不少用 PyCharm 写 Python 的朋友都遇到过这种尴尬在终端里执行pip install xxx或者运行项目脚本时屏幕上突然弹出一段让人摸不着头脑的红色报错开头往往是这样一句话——无法加载文件 ...因为在此系统上禁止运行脚本。我第一次看到这个错误时第一反应是“我是不是把 Python 装坏了”随后在 PyCharm 里反复折腾解释器路径折腾了好久才搞清楚问题根本不在 Python 环境本身而是 Windows 系统层的执行策略在拦截脚本。这篇文章就从我踩过的坑出发聊清楚 PyCharm 里“禁止脚本运行”到底是什么原因、怎么解决以及如何一劳永逸地避开这类问题。作为一名经常帮同事调试 Python 环境的老手我太清楚这类报错对新手有多劝退了。它不仅会出现在pip install的时候还会出现在激活虚拟环境、执行.ps1脚本、运行 Django 管理命令等场景中。关键是这类问题在不同版本的 PyCharm、不同 Windows 系统版本、不同 Python 安装方式下排查路径还不完全一样。如果你正被这段报错卡住或者想提前给自己打预防针这篇文章应该能帮你省下好几个小时的折腾时间。1. 思路拆解PyCharm 里禁止脚本运行到底是谁在拦路先说结论PyCharm 本身并不会禁止你运行 Python 脚本它是 IDE不是保安。真正拦路的是 Windows 系统的 PowerShell 执行策略Execution Policy。当你点击 PyCharm 底部的 Terminal 按钮或者通过 PyCharm 内置终端执行命令时它默认调用的不是 cmd而是 PowerShell。而 PowerShell 出于安全考虑默认禁止执行任何.ps1脚本文件甚至很多初始化脚本、虚拟环境激活脚本都会被拦下来。但有几点需要区分清楚PyCharm 里的“运行”按钮绿色三角和“终端”里的命令执行走的是两套完全不同的机制。点击绿色三角运行时PyCharm 会直接用你配置的 Python 解释器加载并执行.py文件这个过程中既不经过 PowerShell也不受执行策略影响。所以你有时候会发现“绿色三角能跑但终端里pip install就报错”这不是 Python 代码本身的问题而是命令行环境的差异。再深挖一层PowerShell 执行策略有几种常见状态Restricted完全禁止执行任何.ps1脚本这是 Windows 客户端默认值也是“禁止运行脚本”报错的最大来源。RemoteSigned允许执行本地创建的脚本但来自互联网的脚本必须有数字签名。这是很多教程推荐的折中方案。AllSigned所有脚本都必须签名才能运行。Unrestricted允许所有脚本执行但来自互联网的脚本会先提醒用户确认。在实际操作中我见过大量用户卡在 Restricted 状态下哪怕他们安装的是官方 Python、官方 PyCharm也会因为这个默认策略导致虚拟环境激活脚本跑不起来。另外还有一种常见场景是你在 PyCharm 里新建项目时选择了 Virtualenv 作为解释器类型PyCharm 会自动在项目目录下创建venv文件夹里面有Scripts\Activate.ps1脚本。当你打开 PyCharm 自带终端时它会尝试自动激活这个虚拟环境每逢此时如果执行策略不允许.ps1运行终端就会直接报错甚至导致 PyCharm 的终端标签页无法正常进入。所以搞清楚“谁在拦路”是解决问题的第一步。第二步才是对症下药要么修改 PowerShell 执行策略要么干脆换一种不依赖执行策略的脚本运行方式。接下来我把每一步操作都拆开讲细。2. 解决方案实操从临时绕过到永久修复2.1 临时绕过用 cmd 替代 PowerShell如果你只是想尽快装个包、跑个脚本不想动系统设置最简单的办法是让 PyCharm 的终端从 PowerShell 切换到传统命令提示符cmd。Python 的.py文件本身不需要执行策略cmd 也不会执行.ps1脚本所以用 cmd 跑pip install一般不会遇到“禁止运行脚本”的问题。具体操作打开 PyCharm点击底部 Terminal 标签看终端窗口顶部有没有下拉箭头通常在 号旁边点击它选择“Command Prompt”或“cmd”如果没有这个选项可以在 PyCharm 设置里手动配置终端路径。进入 Settings或 Preferences找到 Tools → Terminal把 Shell path 改为cmd.exe保存后重启终端即可。这个方法的好处是立竿见影坏处是治标不治本。因为 Python 虚拟环境激活脚本通常都是.ps1和.bat两个版本共存当你用 cmd 终端时它会自动执行activate.bat绕过执行策略限制。可如果你后续要用到一些依赖 PowerShell 的 DevOps 脚本、自动化任务又会被卡住。所以这个方法更适合应急不太适合作为长期方案。2.2 永久修复修改 PowerShell 执行策略相比切换终端修改执行策略是更彻底的做法。但这里有一个需要特别注意的点改执行策略必须分两种情况一是当前用户级别二是管理员权限。如果你用普通用户身份执行Set-ExecutionPolicy RemoteSigned可能会遇到“不是管理员”的权限报错而如果你以管理员身份打开 PowerShell执行策略修改又可能影响系统范围带来潜在安全风险。我个人的推荐是“按用户精准修改”。具体步骤先在 Windows 搜索栏输入“PowerShell”右键选择“以管理员身份运行”然后输入以下命令Set-ExecutionPolicy RemoteSigned -Scope CurrentUser这里RemoteSigned的意思是本地创建的脚本可以运行从互联网下载的脚本必须经过签名兼顾了便捷性和安全性。-Scope CurrentUser表示只对当前用户生效不会影响系统其他账户。执行后系统会询问确认输入Y回车即可。修改完之后可以在 PowerShell 里输入Get-ExecutionPolicy验证一下如果输出变成RemoteSigned说明修改成功。这里插一个我曾经踩过的坑如果你事先用管理员身份运行了 PowerShell却忘了加-Scope CurrentUser执行策略会直接写到本机策略上虽然也能用但如果这台电脑属于公司资产管理可能会被 IT 安全策略强制覆盖导致问题反复出现。所以我强烈建议能用用户级就别动本机级除非你明确知道自己要什么。2.3 以管理员身份运行 PyCharm还有一种容易被忽略的情况PyCharm 本身是在普通权限下启动的它的终端进程也是普通权限但某些 Python 包的安装过程需要写系统目录比如C:\Program Files下的 Python 安装目录这时候即使执行策略没问题也会因为权限不足导致脚本中断。此时你需要“以管理员身份运行 PyCharm”——右键 PyCharm 图标选择“以管理员身份运行”然后再试一次。不过说实话这个方法我用的频率并不高因为频繁以管理员身份运行 IDE 其实有副作用一是安装第三方包时它可能更改系统级 Python 环境污染全局二是很多企业开发环境会限制管理员权限。我更倾向的做法是在项目里建虚拟环境把依赖全部装进项目内部既干净又能避免权限问题。2.4 检查虚拟环境激活脚本路径还有一次我遇到一个特别迷惑的场景执行策略已经改成了RemoteSigned终端也换成了 cmdpip install依然报“禁止运行脚本”。后来排查发现项目里存在多个 Python 环境PyCharm 终端自动激活的虚拟环境不是我以为的那一个路径指向了一个旧项目目录下的venv而那个目录根本没有activate.bat只有activate.ps1最终还是被 PowerShell 拦了。排查方法在 PyCharm 终端里输入where pythonWindows或type python查看当前使用的 Python 解释器路径再输入echo $env:VIRTUAL_ENVPowerShell或echo %VIRTUAL_ENV%cmd确认虚拟环境变量是否存在。如果发现激活的路径和项目实际配置对不上到 PyCharm 的设置里检查项目解释器路径重新选择或重建虚拟环境即可。3. 深入排查脚本运行受阻的其他隐藏原因3.1 Python 解释器配置错误有时候“禁止脚本运行”不是 PowerShell 的问题而是 PyCharm 里配置的 Python 解释器本身出了问题。比如你明明安装了 AnacondaPyCharm 却默认使用了系统自带的 Python或者你手动指定了某个路径但路径里的python.exe根本不存在。这种情况下点击绿色三角运行脚本时PyCharm 会直接报“Python 解释器不存在”或“无法运行脚本”。检查方法很简单打开 File → Settings → Project → Python Interpreter看当前选择的解释器路径是否真实存在。如果你使用的是 Anaconda最好选择conda环境里的python.exe不要选 base 环境之外的孤立路径。这里顺便提一句热词里很多人搜“Anaconda 安装 PyCharm”“Anaconda 和 PyCharm 安装”其实 Anaconda 和 PyCharm 是两个独立软件前者负责 Python 环境和包管理后者负责代码编辑和运行两者通过解释器关联起来。装了 Anaconda 不代表 PyCharm 会自动指向它你必须在 PyCharm 里手动添加解释器。3.2 pip 命令识别异常热词里有一类提问是“pip : 无法将‘pip’项识别为 cmdlet、函数、脚本文件或可运行程序的名称”这个报错和“禁止运行脚本”表面不同本质是同一个层级的问题——Python 的可执行文件路径没进入系统 PATH 环境变量。当你在 PowerShell 里输入pip系统找不到对应的pip.exe就会报“无法识别”。解决办法之一是在 PyCharm 终端里使用python -m pip install xxx代替pip install xxx因为这种调用方式不需要 PATH 里单独存在pip.exe它会直接通过当前 Python 解释器加载pip模块。如果你想让pip命令全局可用就需要把 Python 安装目录下的Scripts文件夹比如C:\Python312\Scripts添加到系统 PATH 中。还有一个小技巧如果你已经安装了 Anaconda直接在 Anaconda Prompt 里执行conda install pip也可以解决部分环境里 pip 缺失的问题。3.3 文件路径带空格或特殊字符再分享一个非常容易踩的坑项目目录如果包含中文、空格、特殊字符比如D:\tombraidervr-0.1.1这种带数字和短横线的目录还好但如果是我的项目或者New Project (2)这样的目录在执行脚本时可能因为路径解析问题导致运行失败。这不是“禁止脚本运行”本身但报错信息长得非常像——脚本明明在却提示“无法加载文件”或“找不到指定路径”。解决办法有两个一是创建项目时尽量使用纯英文路径不要带空格二是如果路径已经定型可以在 PyCharm 的 Run/Debug Configurations 里手动指定工作目录Working Directory和脚本参数避免 PyCharm 自动拼接路径时出错。以下是一个简单的推荐配置示例配置项推荐值Script path项目下具体脚本的完整路径Working directory项目根目录Python interpreter项目虚拟环境或 Anaconda 环境Parameters按需填写如--port 80804. 常见问题速查表与避坑技巧根据这几年的实际经验我把 PyCharm 里遇到“禁止脚本运行”或相关报错的高频场景整理成一张速查表方便大家对照排查。报错场景典型报错信息核心原因推荐解决动作终端激活虚拟环境失败无法加载文件 ...Activate.ps1PowerShell 执行策略限制修改执行策略或换用 cmdpip 命令找不到无法将“pip”项识别为 ...系统 PATH 未配置使用python -m pip脚本运行弹窗禁止请求的操作需要提升用户权限不足以管理员身份运行 PyCharmPyCharm 终端自动退出终端进程已完成退出代码 1激活脚本执行被拦截切换终端类型编译器路径失效Invalid Python interpreter解释器路径不存在重新配置解释器接下来是我特别想强调的几个避坑技巧。第一个是改执行策略前先确认自己到底用的哪个终端。有些教程一上来就让你改 PowerShell 执行策略但如果你平时用的是 cmd那改了也没意义。第二个是尽量在 PyCharm 项目里使用虚拟环境不要直接装在全局 Anaconda base 环境因为不同项目的依赖冲突一旦出现排查成本远高于虚拟环境的一点维护成本。第三个是遇到报错先看报错的具体路径很多“禁止运行脚本”的报错会明确告诉你卡在哪个文件上这时候去检查那个文件是否存在、是否有签名限制远比反复切换环境有效。另外如果你看到终端里出现“未签名脚本在当前系统上禁止运行”的提醒还有一个顺手的临时做法在 PowerShell 中执行Set-ExecutionPolicy -Scope Process Bypass这个命令只对当前会话生效关闭 PowerShell 后自动失效不改变系统策略。适合你只是临时想让某个脚本跑一次的情况。5. 我的实操心得稳定复现与彻底规避的思考在排查这么多起“PyCharm 禁止脚本运行”的问题之后我的体会是这个报错本身不难解决难的是很多人被它绕进去了来回折腾环境最后也没搞明白原理。如果你和我一样遇到报错先习惯性问“为什么”这里再分享两个从全局视角总结的小规律。第一Windows 系统权限模型和 Python 生态之间存在天然摩擦。Python 的包管理工具pip、conda在 Unix 系系统里跑得“理所当然”但 Windows 上有用户账户控制、执行策略、文件系统权限多层关卡。明白这一点遇到类似问题就不会慌。第二大多数“脚本禁止运行”其实和你的代码没有关系代码再正确终端环境不配合也白搭。所以排查时优先看工具链层面而不是翻项目代码。如果你正处在被这类报错折磨的阶段建议按这个顺序处理先看报错的脚本路径 → 确认终端类型 → 检查 PowerShell 执行策略 → 检查 Python 解释器配置 → 检查目录权限。这套顺序是从大量案例里总结出来的逻辑上覆盖了“环境不运行脚本”的绝大多数原因。最后说一个我后期常用的“偷懒”方案既然 PowerShell 执行策略这么爱拦事我在 Windows 上的 PyCharm Terminal 直接改成了 Git Bash。Git Bash 不采用 PowerShell 执行策略所有 Python 虚拟环境激活、pip 安装都顺畅运行还兼容 Linux 命令习惯。你如果日常用 Linux 比较多也可以试试这个组合——但要注意 Git Bash 下activate要用source venv/Scripts/activate或source venv/bin/activate语法和 PowerShell、cmd 都不一样习惯之后反而更顺手。这个方案不一定适合所有人但对我来说确实大大减少了被“禁止运行脚本”这类问题打断思路的频率。
阅读完成 · 觉得有帮助?