使用anaconda创建虚拟环境遇到的问题记录

1.用conda安装pyinstaller
使用命令 conda install pyintaller时提示报错
ssl.SSLError: [SSL: DECRYPTION_FAILED_OR_BAD_RECORD_MAC] decryption failed or bad record mac (_ssl.c:2624)
使用anaconda创建虚拟环境遇到的问题记录_第1张图片

解决办法,转自网友,添加以下channels

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
 
conda config --set show_channel_urls yes

在提示当前channels中无包的安装源时也可以采取上述方式添加channels。

如果添加以后,还是报错,参考以下方式:
1).在虚拟环境中,切换到python,使用import ssl命令导入模块,执行完毕即可。
2).找到anaconda安装目录下的openssl目录下的bin目录,D:\Anaconda3\pkgs\openssl-xxxxxx\Library\bin。。。。将动态链接库的bin路径加入到Path路径中。这个路径可以通过conda list来确定包名,进而定位到相应的包。采取第一种直接import最快捷。还有种说法是,因为有多个版本的python,导致动态链接库连接不一致,因此需要确定是哪一个。此外,删除或者修改user文件夹下的.condarc配置文件可以解决找不到安装包源的问题,会自行创建。
参考链接:WIN10 使用Anaconda安装的Python3,使用pip时报没有ssl模块错误

2.打包成功后,运行时命令提示框一闪而过。
建议打包时使用 pyinstaller -F py文件 ,通过命令提示框可以确定是哪里错误。不过出错时,报错提示时间很短,网上有种说法是通过添加os.system(‘pause’).具体用法百度,我使用的录屏。报错如下:
使用anaconda创建虚拟环境遇到的问题记录_第2张图片
在安装虚拟环境后打包文件之前,我已经对pymssql库进行安装,仍然报上述错误。网上的说法是,打包的时候,打包程序无法判断动态调用,_mssql是动态调用的,就是用才调用,不会一开始就调用,于是打包程序就不知道要不要包进exe里面,估计打包的时候也不会去尝试运行pymssql里面的函数,因此也无法得知动态调用的模块,所以须在py文件中手动导入模块,如下:

import decimal
import uuid
import pymssql
from pymssql import _mssql
_mssql.__version__
decimal.__version__
uuid.ctypes.__version__ 

原文说明:Pyinstaller编译包含了pymssql包报错的问题解决方案py3.6
加入上述说明后,打包运行仍报错,报错提示uuid没有ctypes属性,由于找不出原因,我把uuid.ctypes.__version__ 这一句直接注释掉了。
运行成功。

3.总结使用anaconda虚拟环境打包exe文件
1)先安装虚拟环境。

conda create --name spacename python=3.6 

–name 和-n等价,spacename 是要创建的环境名称,环境可以在Anaconda安装目录envs文件下找到。必须要指定python版本,避免挖坑。
查看已安装的环境可以使用

conda info -e
#或者
conda env list

2)安装对应的库

conda install packagesXXXX

创建虚拟环境的目的是为了减少打包后exe文件的大小,因此此处进行安装时,是用到什么库就安装什么库,其他不用安装。有网友说很多报错提示是pyinstaller的版本问题,目前还没搞清楚,也没遇到,先记一笔。
3)安装pyinstaller库,conda install pyinstaller
4)打包成exe文件。
常用的就是,
-F,打包成 一个独立文件
-i 使用图标替换掉默认的程序图标
-w ,运行exe文件时不显示命令提示符窗口(仅windows)

pyinstaller -F -i e3.ico some.py

此处是指使用e3.ico作为exe文件的图标。不想显示命令窗口时就使用 -Fw

5)关闭虚拟环境

conda deactivate

可以参考这篇,更加详细。https://zhuanlan.zhihu.com/p/94744929

你可能感兴趣的:(anaconda虚拟环境,python,学习)