双Python环境下如何让PyInstaller调用Anaconda依赖打包exe?
这问题我碰到过好几次,核心就是系统优先调用了32位Python里的PyInstaller,而不是你需要的Anaconda环境版本。给你几个靠谱的解决办法,按便捷性排序:
1. 直接指定Anaconda下PyInstaller的完整路径执行
不用折腾环境变量,直接在命令行里敲Anaconda环境中PyInstaller的绝对路径,强制使用它来打包:
C:\Anaconda3\Scripts\pyinstaller.exe file.py
这个方法最直接,适合临时打包需求。
2. 激活Anaconda环境后再执行
如果你的Anaconda已经配置了环境变量,先激活你生成.py文件的那个Anaconda环境(默认是base环境):
conda activate base
激活成功后,命令行提示符会变成(base)开头,这时候再执行打包命令:
pyinstaller file.py
系统会自动使用当前激活环境中的PyInstaller和依赖库。(老版本Anaconda可能需要用activate base命令)
3. 调整PATH环境变量的顺序
你之前把Anaconda的Scripts目录放在了32位Python的Scripts后面,系统查找可执行文件是按PATH的顺序来的,所以会优先找到32位版本的PyInstaller。把顺序调换过来:
PATH=C:\Anaconda3\Scripts;C:\Python35-32\Scripts;%PATH%
这个修改只在当前命令行窗口生效;如果要永久生效,去「系统属性-环境变量」里调整PATH的顺序,把C:\Anaconda3\Scripts移到最前面。
4. 在Anaconda环境中重新安装PyInstaller
有时候可能你是用32位Python的pip安装的PyInstaller,Anaconda环境里反而没有这个工具。先激活Anaconda环境,然后用conda或pip重新安装:
conda activate base # 用conda安装(推荐,更适配Anaconda环境) conda install -c conda-forge pyinstaller # 或者用pip安装 pip install pyinstaller
安装完成后,激活环境执行打包命令就会自动使用Anaconda版本的PyInstaller了。
额外提醒:如果你的.py文件是基于Anaconda的某个虚拟环境开发的,一定要激活对应的虚拟环境再打包,这样能保证依赖库的版本完全匹配,避免打包后出现运行错误。
内容的提问来源于stack exchange,提问作者YQ.Wang

