如何在组策略限制执行的网络驱动器上使用Python虚拟环境
问题背景
- 个人文档存储在受组策略限制的网络驱动器上,组策略禁止直接从该驱动器运行.exe格式可执行文件
- 原生venv创建虚拟环境的默认逻辑是将python.exe复制到虚拟环境目录内,启动时调用该副本,不会直接调用
Program Files目录下安装的Python主程序 - 此前尝试添加
--symlinks、--system-site-packages参数创建虚拟环境,未实现调用主目录Python解释器的预期效果
复现命令与报错
执行创建命令:
python -m venv env
返回报错:
Error: [WinError 1260] This program is blocked by group policy. For more information, contact your system administrator
报错翻译:错误:[WinError 1260] 该程序被组策略阻止,更多信息请联系系统管理员。
原因说明
Windows系统默认要求管理员权限才能创建符号链接,普通用户权限下执行带--symlinks参数的venv创建命令时,参数会静默失效,自动回退到复制可执行文件的逻辑,最终在网络驱动器上生成python.exe副本,触发组策略拦截。--system-site-packages参数仅控制虚拟环境是否继承全局安装的第三方包,不会改变解释器可执行文件的存放/调用逻辑,因此无法解决该问题。
可行解决方案
- 方案1(优先推荐):将虚拟环境创建在本地磁盘不受组策略限制的路径下(例如
C:\dev\envs\project_env),项目代码本身仍可存放在网络驱动器。创建时以管理员身份打开终端,执行命令强制使用符号链接:
创建完成后正常激活虚拟环境即可,此时虚拟环境内的解释器为指向python -m venv --symlinks C:\dev\envs\project_envProgram Files下主程序的符号链接,不会触发拦截。 - 方案2:若没有本地磁盘写入权限,创建虚拟环境后手动替换可执行文件为符号链接:
- 先在目标路径创建虚拟环境,遇到报错时忽略,检查虚拟环境目录下的
Scripts文件夹是否生成 - 删除
Scripts目录下的python.exe、pythonw.exe两个可执行文件 - 以管理员身份打开终端,执行以下命令创建符号链接,将路径替换为你本地Python的实际安装路径:
mklink "X:\你的虚拟环境路径\Scripts\python.exe" "C:\Program Files\Python311\python.exe" mklink "X:\你的虚拟环境路径\Scripts\pythonw.exe" "C:\Program Files\Python311\pythonw.exe" - 后续正常激活虚拟环境使用即可,调用的解释器为Program Files下的主程序。
- 先在目标路径创建虚拟环境,遇到报错时忽略,检查虚拟环境目录下的
- 方案3:替换虚拟环境工具,使用支持解释器重定向的virtualenv替代原生venv,安装后创建虚拟环境时指定
--symlink-app-data参数即可,同样需要管理员权限执行。
验证方式
激活虚拟环境后执行where python,确认返回的虚拟环境内python.exe路径的类型为符号链接,指向Program Files下的主解释器路径;执行python -c "print('hello')"无组策略报错即为配置成功。
内容的提问来源于stack exchange,提问作者Jean-Michel Bouchard
相关产品推荐
相关产品推荐

