血的教训
新电脑和当前电脑具有不同的平台和操作系统
- 导出 environment_name.yml 文件:
conda env export > environment.yml - 在新电脑上,利用生成的 environment_name.yml 文件复现环境:
conda env create -f environment.yml
折腾虚拟机(一定要养成创建系统还原点和定期备份注册表的好习惯 T…T)

我一直用的是 VirtualBox-7.1.6-167084-Win 版本的 VirtualBox。但是在其上安装了 ubuntu-24.04.2-desktop-amd64
运行完:
sudo apt install build-essential dkms linux-headers-$(uname -r) |
准备好了安装增强包前的编译环境后,安装了 VirtualBox 的增强包,可还是无法使用双向文件拖拽、无缝模式、共享文件夹这三大功能。

一开始该问题怀疑可能与 Ubuntu 的版本有关,于是又下载了 ubuntu-22.04.5-desktop-amd64 结果该版本安装好后竟然连 Terminal 都打不开,更别提安装增强包了。经过多次反复重装 ubuntu 后还是没解决问题。
于是我怀疑或许是 VBoxGuestAdditions.iso 增强包与 VirtualBox 版本不一致?(可能性极小)于是我抱着试一试的态度便升级了 VirtualBox 到其最新版 VirtualBox-7.1.10-169112-Win 这时还能正常安装 VirtualBox,我将它安装到了上一个版本 VirtualBox 的安装目录下(安装前未卸载上个版本)。结果用新版 VirtualBox 启动虚拟机时出现了以下错误:

我无奈,想着是不是我的 Windows11(我前一天刚从 Windows10 更新到 Windows11)和 VirtualBox 不兼容?而且我用不惯 Windows11,在文件夹中右键居然没有刷新按钮!于是我又利用官方的系统恢复回到了 Windows10。
恢复完运行虚拟机还是报以上的那个相同错误:

我只能怀疑是旧版本的 VB 的残留影响了新的 VB,我于是准备全部卸载掉重装,结果一卸载发现,卸载也报错,卸载不了 VB 了:

根据 Gemini,我怀疑是两个版本的.msi 文件互相干扰,我便尝试了解压旧版本 VB 的安装包,尝试找到.msi 文件替代不知道出了什么问题的.msi 文件,结果一解压完旧 VB 的安装程序在里面根本没找到.msi 文件。我又尝试不卸载了,直接换个安装目录,再装一遍新版,结果安装也是报和卸载同样的错误。
事情到这个地步,我顿感大事不妙,心态开始变化。
我又折腾了一通各种卸载和清理注册表的软件,那些破软件全是广告,要不就是收费太贵。下次还是用 winget 吧。
这时我心态已经爆炸了,抱着明天就去创建完系统还原点后暴力修改注册表的最糟打算,就上床睡觉了,此时已深夜了。
结果第二天又是一顿折腾,都已经创建好系统还原点了,抱着再试试的想法最后还是根据 Gemini 的建议到微软官方下载了 修复无法安装或删除程序的问题 - Microsoft 支持 疑难解答,安装和卸载故障排除程序。结果真的修复成功了,可以正常安装和卸载 VirtualBox 了。如果又天使的话那一定是 安装和卸载故障排除程序 一切又回到了折腾之初,然鹅我的``Ubuntu`还是不能用扩展包的功能…
最后附上和 Gemini 的对话记录:https://g.co/gemini/share/0e98a69490b5(VirtualBox 安装/卸载错误)
2025.11.20 更新
此次参考资料汇总:
VMware下载:https://github.com/yanghao5/VM-download
Ubantu下载:Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
Kali下载:Get Kali | Kali Linux
VirtualBox共享文件夹设置全面解析和实际操作:https://www.bilibili.com/video/BV1Lt4y1x7M4
VMware虚拟机三种网络模式:VMware虚拟机三种网络模式
VMware入门视频:https://www.bilibili.com/video/BV1bU411U7rp/
linux C socket–raw socket:https://www.bilibili.com/video/BV1b94y1W75N
黑马SSH链接虚拟机教学:https://www.bilibili.com/video/BV15N411T7nT/
之前的二手机械革命蛟龙7(1800购入)用了7个月成功报废…无奈只得含泪换了天选6pro ultra7 + 5060版本。因为是新机并恰巧赶上要在Linux环境下用row socket做计网的课程设计,所以就又开始折腾起了虚拟机…(痛苦的回忆开始攻击我了…)
因为之前的Virtual Box实在莫名其妙的Bug太多,故我吸取教训直接下了VMware Workstation Pro。但是VMware也不是什么好鸟,首先在官网下载需要注册账号、注册要填一堆东西、填完下软件还得填一堆、主要是折腾完还不立马给你下验证个账号pending了整整俩天还没结束…我忍不了——上Github!
我先下的Kali的VMware & VirtualBox pre-built版本。下好了一顿折腾结果不仅连客机增强功能都没debug完、网也连不上…于是又换Ubuntu_24.04.3一顿折腾还是一个鬼样子(我的半下午+一晚上啊啊啊啊啊啊啊)。得,还是换VirtualBox吧。VirtualBox比VMware不稳定很多,经常在启动Ubuntu时卡住。但好在它的NAT模式不用自己设置,安好了系统直接就能联网、甚至在主机软路由时可以科学上网。但是还是之前那个问题:扩展功能不太行…又折腾了一个下午除了拖拽文件的问题还是没解决,其它的问题都边查资料边解决了。
以下为具体步骤:
安装 Guest Additions:
适用版本: Ubuntu 18.04 / 20.04 / 22.04 / 24.04 都可以
功能: 全屏、自适应分辨率、共享剪贴板、拖拽文件、共享文件夹等
在 Ubuntu 终端输入:
sudo apt update |
Guest Additions 需要编译内核模块,因此必须装这些依赖(这一步是最常见的坑)。
在虚拟机窗口的菜单中:
设备(Devices) |
或者中文版:
设备 |
📌 如果提示下载 ISO,点“下载”即可。
你会看到桌面出现一个类似 VBox_GAs_7.x.x 的 CD 图标。
安装完后运行 Guest Additions 安装脚本:
方式 A(最简单)
在 CD 图标上右键 → Run Software 或 运行软件
方式 B(终端运行脚本)
打开终端,执行:
cd /media/$USER/VBox_GAs_*/ |
运行几分钟后若显示:
Installing the Window System drivers ... |
然后没有报红色大错误 → 就成功。
重启系统:
sudo reboot |
五、验证是否安装成功
1.分辨率是否能自动拉伸?
拖动虚拟机窗口 → 分辨率是否自动变化?
2.查看内核模块是否已加载:
lsmod | grep vboxguest |
如果有类似:
vboxguest xxxx ... |
就是成功。
常见错误与解决
❌ 1. 运行脚本时报错:
Building kernel modules ...failed原因:没装 build-essential / headers
解决:回到第一步重新安装依赖
❌ 2. 没看到 VBox_GAs 镜像
按:
设备 → Insert Guest Additions CD Image...若仍没有,说明 ISO 下载失败 → 重新下载。
❌ 3. Wayland 桌面导致拖拽失效(Ubuntu 22.04+ 常见)
改回 Xorg:
登录界面左下角选择:
Ubuntu on Xorg
我之前怎么弄都不能自动随窗口变化调整分辨率大小就是没用Xorg版的Ubuntu
Ubuntu 中的 Wayland 和 Xorg 是两套 图形显示系统(Display Server),负责处理键鼠输入、窗口显示、绘图等。
它们的关系可以理解为:
Xorg = 老、但兼容性最好
Wayland = 新、更安全、更流畅,但兼容性不够
可以自动调整分辨率后在VirtualBox的相关设置中开启双向共享文件夹、双向剪贴板共享后双向剪贴板共享应该可以直接用了,而双向共享文件夹需要再配置一下。具体的内容看视频,这里把用到的命令和注意点总结一下:
命令:
sudo su |
视频中打开fstab文件并修改后的例子:

至此共享文件夹便已大功告成。
注意:1.临时共享文件夹在虚拟机关闭或重启后会消失;2.固定(permanent)共享文件不会消失;3.要用哪个文件夹就挂载哪个文件夹
2025.11.21更新:
今天在VMware中安装了Ubuntu并配置了VScode和row socket开发环境。
bash中输入以安装VMtools:
sudo apt update |
安装完成后在虚拟机中设置开启拖放和复制黏贴后便可正常使用,但是和VirtualBox相比拖放只能从主机到虚拟机中反过来却不行(但VMware各方面的稳定性真是比VirtualBox强太多了)。

接着开启共享文件夹,和在VirtualBox中一样开启后需要挂载:
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=$(id -u),gid=$(id -g) |
若要开机自动挂载,同样要在/etc/fstab,添加一行:.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other,uid=1000,gid=1000 0 0
然后执行:
sudo systemctl daemon-reload |
注意:uid=1000,gid=1000 替换为你当前用户的 UID 和 GID(id 命令可以查看)。 现代 VMware + Ubuntu 22.04+ 时,有时 fstab 挂载会报 hint,这是正常的,只要 vmhgfs-fuse 命令能挂载即可。
太棒了!很高兴看到 (zato_env) 终于出现了!🎉
这次你遇到的问题非常经典,涉及到 Scoop(包管理器)、Anaconda(虚拟环境工具) 和 PowerShell(终端 Shell) 三者之间的“爱恨情仇”。
为了让你下次遇到类似情况能从容应对,我为你整理了一份技术总结。你可以把它保存在你的笔记里(比如 Obsidian 或 Notion)。
📝 问题排查总结:Scoop 安装 Anaconda 导致无法激活环境
1. 问题描述 (Symptom)
在 Windows 的 PowerShell (VS Code) 中,尝试使用 conda activate <env_name> 激活虚拟环境时失败。
- 现象 A:运行
conda init powershell显示配置已修改,但重启终端后依然无效。 - 现象 B:报错信息包含
usage: conda-script.py ...和Invoke-Expression: Cannot bind argument to parameter 'Command' because it is an empty string.。 - 现象 C:
conda命令本身可以用(比如conda list),但涉及环境切换的activate命令失效。
2. 原因解释 (Root Cause)
这是典型的 “环境变量优先级冲突” (Path Precedence Conflict) 问题。
Scoop 的垫片机制 (Shims):
Scoop 为了让你在任何地方都能用软件,会在系统
PATH环境变量中放入“垫片文件”(Shims)。对于 Anaconda,它放了一个conda.ps1或conda.exe的快捷方式。Conda 的激活机制:
标准的
conda activate需要修改当前 Shell 会话的环境变量(比如改变PATH指向虚拟环境的 Python)。这需要加载 Conda 自带的 Shell 函数(Function),而不是简单的运行一个 exe。冲突点:
当你输入
conda时,PowerShell 优先 找到了 Scoop 的垫片(因为 Scoop 把它的路径加在了最前面)。这个垫片只是简单地转发命令,它没有权限也没有能力去修改父进程(PowerShell)的环境变量。因此,Conda 试图执行激活操作时,被 Scoop 的垫片拦截并转发成了一个错误的脚本调用(
conda-script.py),导致报错。
3. 解决方案 (Solutions)
针对这种情况,按推荐程度排序:
方案 A:暴力直连法(最稳妥,本次成功方案)
直接绕过 PowerShell 的函数机制,调用 Windows CMD 层的底层激活脚本。
命令:
cmd /k "C:\Users\你的用户名\scoop\apps\anaconda3\current\App\Scripts\activate.bat <环境名>"
cmd /k "C:\Users\jh\scoop\apps\anaconda3\current\App\Scripts\activate.bat zato_env"(注意:路径中的
App目录是 Scoop 安装版的特有结构)原理:
cmd /k表示启动一个 CMD 子进程并保留窗口,直接运行批处理文件完成激活。
方案 B:不激活,直接调用(最硬核)
不切换环境,直接指定绝对路径来运行程序。
查找路径:
conda env list找到环境路径(如C:\...\envs\zato_env)。命令:
# 安装库
C:\...\envs\zato_env\python.exe -m pip install xxx
# 运行代码
C:\...\envs\zato_env\python.exe my_script.py原理:直接使用目标环境的二进制文件,完全规避了环境变量配置问题。
方案 C:修正 PowerShell Profile(一劳永逸但易出错)
强制 PowerShell 加载 Conda 的钩子,覆盖 Scoop 的垫片。
操作:在 PowerShell 配置文件 (
$PROFILE) 的末尾添加:# 路径可能因版本而异,需自行核对
& "C:\Users\jh\scoop\apps\anaconda3\current\App\shell\condabin\conda-hook.ps1"原理:在终端启动时强制注册 Conda 的 Shell 函数,使其优先级高于 Scoop 的垫片。
💡 学弟/学妹的经验卡
以后如果在 Windows 上用 Scoop 管理开发环境,遇到类似 “命令能用,但涉及环境切换/状态改变的命令失效” 的情况,通常都是 Scoop 的 Shim 拦截了 Shell 原生函数 导致的。
解决思路永远是: 既然快捷方式(Shim)不好用,那就找到它原本的安装位置,直接运行本体!

