Win10 -> Win11 升级机制 导致应用不可用
一、问题我今天刚升级了系统从win10到win11现在的问题是我在vscodekiro等软件想使用anconda环境使用conda init命令显示Unable to create process using H:\myMinAnconda\python.exe H:\myMinAnconda\Scripts\conda-script.py --version二、原因Win10 - Win11 升级机制升级过程中系统会迁移用户文件但有时会破坏可执行文件的数字签名关联或者改变了对非系统盘如 H 盘程序的执行策略。Conda 的硬编码Conda 的激活脚本 (conda.ps1,activate.bat) 内部硬编码了 Python 的绝对路径。当底层的python.exe因为系统升级变得“不可执行”时脚本调用它就会报Unable to create process。三、解决1、现在的解决思路是直接下载最新的 Miniconda 安装包覆盖安装到H:\myMinAnconda。这不会删除我们之前安装的库如 pymilvus, pandas 等只会替换核心的执行文件python.exe, conda.exe和脚本这是解决“此应用无法运行”最彻底的方法。另外》1因为我原本就在用 Miniconda为了保持环境一致性特别是为了保留你现有的包和环境必须使用相同的发行版进行覆盖安装。所以我选择的是右侧的 Miniconda2Miniconda (右侧)只包含 Python、Conda 和少量核心依赖。安装包小约 80MB下载快安装快。它遵循“按需安装”原则。2、做法访问 Miniconda 官网下载页https://docs.anaconda.com/miniconda/下载 Windows PowerShell 64-bit 的最新安装包文件名类似 Miniconda3-latest-Windows-x86_64.exe。四、再问题1、问题执行上面的操作之后使用 conda --version 之后发现覆盖安装失败了或者你运行的安装程序并没有真正覆盖掉损坏的文件。既然“覆盖安装”没有自动替换掉坏文件可能是因为文件被占用、权限锁定或安装包逻辑判断失误我们需要手动强制清理后再安装。2、做法1改名旧的myMinAnconda文件夹既然旧的python.exe已经坏了且删不掉或者不敢删我们把它改名让系统彻底忘掉它然后让新安装程序以为这是一个全新目录。打开文件资源管理器进入H:盘。找到myMinAnconda文件夹。右键点击myMinAnconda-重命名。将其改名为myMinAnconda_OLD(或者myMinAnconda_Bak)。2重新安装 Miniconda再次运行你刚才下载的 Miniconda 安装程序 (Miniconda3-latest-Windows-x86_64.exe)。一路点击 Next直到Installation Type(选择路径) 界面。关键操作在路径框中手动输入原来的路径名H:\myMinAnconda注意因为你刚才把旧文件夹改名了所以H:\myMinAnconda现在是一个不存在的路径。安装程序会提示“该文件夹不存在是否创建” - 点击是 (Yes)。继续安装选项保持之前的建议不勾选Add to PATH。等待安装完成。验证方式如下(base) PS C:\WINDOWS\system32 H:\myMinAnconda\python.exe --version Python 3.13.123迁移site-packages(你的库) 你需要把旧文件夹里的第三方库复制到新文件夹。源路径H:\myMinAnconda_OLD\Lib\site-packages目标路径H:\myMinAnconda\Lib\site-packages操作方法打开H:\myMinAnconda_OLD\Lib\site-packages。全选所有文件和文件夹 (Ctrl A)。复制 (Ctrl C)。打开H:\myMinAnconda\Lib\site-packages。粘贴 (Ctrl V)。如果有提示文件冲突比如pip,setuptools等核心库选择跳过 (Skip)或保留目标文件不要覆盖新安装的核心库。只覆盖那些你后来安装的库如pymilvus,numpy等。五、重新初始化关闭所有终端。以管理员身份打开新的 PowerShell。运行conda init powershell(此时应该能正常运行了因为 python.exe 已经是新的了)关闭终端重新打开。测试你的项目cd H:\mypythoncode\milvus_test # 如果你之前有特定环境尝试激活 conda activate 你的环境名 # 或者直接测试 python python -c import pymilvus; print(Milvus OK)六、又一问题刚才咱把把旧环境假设是 Python 3.11 或 3.12的 site-packages 直接复制到了新环境Python 3.13。pymilvus 的纯 Python 代码.py 文件复制过去后正常工作了因为 Python 代码是通用的。但是orjson、grpcio、numpy 这些库的核心部分是二进制包.pyd 文件。这些 .pyd 文件是在旧 Python 版本下编译的。它们的内部结构ABI - 应用程序二进制接口与新 Python 3.13不匹配。当 Python 3.13 试图加载这些为旧版本编译的 .pyd 文件时发现“接口对不上”或者“找不到符号”于是抛出 ModuleNotFoundError 或 ImportError。》解决方案是重装这些wheel文件python -m pip install --upgrade --force-reinstall --no-cache-dir numpy scipy pandas orjson grpcio grpcio-tools protobuf导出环境列表为了避免下次换电脑或重装系统时再经历这种“复制粘贴修 bug”的痛苦请养成导出环境列表的习惯。在项目目录 H:\mypythoncode\milvus_test 下运行以下命令生成一个“配方文件”pip freeze requirements.txt这个 requirements.txt 记录了当前所有库的确切版本。下次无论在哪台电脑只要运行 pip install -r requirements.txt就能瞬间还原一个一模一样的环境完全不需要手动复制文件夹。在新机器/新路径安装一个新的 Miniconda/Anaconda。创建新环境conda create -n myenv python3.13激活环境conda activate myenv安装包pip install -r requirements.txt(或者conda install 包名)Python 包管理中“源码”与“二进制”的区别大多数流行的科学计算库NumPy, Pandas, TensorFlow, PyTorch, Milvus 客户端等为了性能底层都用 C/C/Rust 重写过所以它们必须使用二进制包。怎么区分一个库是源码还是二进制库呢看文件后缀如果你在site-packages里看到.pyd(Windows) 或.so(Linux/Mac) 文件那就是二进制组件。如果只有.py文件那通常是纯 Python 库如requests,flask的核心部分这种库通常可以直接复制而不报错。看 Pip 安装时的输出如果看到Downloading xxx.whl并瞬间完成安装 →→二进制包。如果看到Building wheel for xxx...或者Running setup.py install并且转圈圈很久 →→正在从源码编译。总结本文介绍了升级系统之后原先的anconda环境不可用从而引发的深度的解决。1、首先重新下了最新的 Miniconda 安装包覆盖到原来的 Miniconda 路径。后来发现覆盖无效于是便将旧的路径文件夹重命名然后再重新下以及将原来旧文件夹的第三方库都复制到新的文件夹中2、又因为其中的wheel文件的编译器不一样导致无法用从而只能手动的去重装wheel文件。进而提出可以用pip freeze requirements.txt生成配置文件来避免下次同样的问题。、3、又讨论了 Python 包管理中“源码”与“二进制”的区别 以及怎么区分一个库是源码还是二进制库。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416572.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!