1,ModuleNotFoundError:No module named 'tensorflow.python._pywrap_tensorflow_internal.pyd'
参考:https://stackoverflow.com/questions/49620638/tensorflow-gpu-with-pyinstaller
修改dist下文件名:_pywrap_tensorflow_internal.pyd为tensorflow.python._pywrap_tensorflow_internal.pyd
(执行pyinstaller命令去掉 -F)若是生成一个文件
请参考:https://stackoverflow.com/questions/49732801/windows-10-pyinstaller-tensorflow-missing-modules/50580345
2,AttributeError: type object 'pandas._libs.tslibs.conversion._TSObject' has no attribute '__reduce_cython__'
参考:https://blog.csdn.net/Roanlys/article/details/80951185
参考:https://blog.csdn.net/qq_41185868/article/details/80601983
我的python 3.6.6 执行pip install pandas==0.20.0
上面是我遇到的问题。
3 utf-8错误
chcp 65001
完整命令:
在cpu版本下运行
代码加入
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
我的cuda 64 9.0
pyinstaller -F -c XXX_cpu.py --add-data tensorflow.python._pywrap_tensorflow_internal.pyd;. --add-data cudart64_90.dll;.
Windows安装pycocotools出现错误“cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp””的解决办法:
https://github.com/philferriere/cocoapi
参考:https://www.jianshu.com/p/b0e3a74ca97b
2.打包错误:ModuleNotFoundError: No module named 'setuptools._vendor'
更新 setuptools
pip install --upgrade setuptools
3.打包错误:AttributeError: module 'enum' has no attribute 'IntFlag'
卸载enum34包
pip uninstall enum34
4.运行错误:ImportError:No Module Nameed "pywt._extensions._cwt"
注意,以上的pywt._extensions._cwt可能是其他库
解决办法:
pyinstaller -F aaa.py --hidden-import pywt._extensions._cwt
如果有多个库那就在在后面在加几个--hidden-import xxxx
5.运行错误:ModuleNotFoundError: No module named 'tensorflow.python._pywrap_tensorflow_internal'
使用tensorflow1.7以上版本会有这个问题
解决方法:
假如是文件夹生成模式生成的,比较简单,在生成的dist/[exe_name]/文件夹中,找到“_pywrap_tensorflow_internal.pyd”文件,剪切,在这个文件夹中新建一个tensorflow文件夹,并在tensorflow文件夹中新建一个python文件夹,将刚刚剪切的pyd文件黏贴到python文件夹中,再次运行exe,问题解决。
假如是单文件exe模式,可用以下方法,首先在python库文件夹中找到_pywrap_tensorflow_internal.pyd(懒得找就用文件夹模式生成一次,在exe所在的文件夹中就有),然后使用以下命令生成。
pyinstaller -F aaa.py --add-data="/path/to/the/pyd/_pywrap_tensorflow_internal.pyd;tensorflow/pyth
参考:
[1] https://blog.csdn.net/qq_39360343/article/details/82772916 setuptools问题
[2] https://blog.csdn.net/qq_15969343/article/details/84872743 enum问题
[3] https://blog.csdn.net/qq_40587575/article/details/86500445 pywt问题
[4] https://stackoverflow.com/questions/49620638/tensorflow-gpu-with-pyinstaller "_pywrap_tensorflow_internal"问题
[5] https://stackoverflow.com/questions/49732801/windows-10-pyinstaller-tensorflow-missing-modules?r=SearchResults 单文件"_pywrap_tensorflow_internal"问题
1.RecursionError: maximum recursion depth exceeded
解决步骤:
1)pyinstaller -F xxx.py
这一步肯定会报上述错误导致失败,但是会产生一个xxx.spec文件
2)在xxx.spec文件中增加两行(添加在原文件第二行):
import sys
sys.setrecursionlimit(5000)
- 1
- 2
3)pyinstaller xxx.spec
打包成功。
2.UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xce in position
解决方法:在你打包的命令行中先输入chcp 65001
然后再输入打包命令。
3.WARNING: file already exists but should not: C:\…\…\…\Local\Temp_MEI58962\include\pyconfig.h
报错内容可能不同,但都是xxx已存在,问题的原因是pyinstaller打包时pyconfig.h多打了一次,所以会报已经存在了。这个解决方案就是把多余的pyconfig.h去掉。具体解决方法如下:
在自动生成的xxx.spec中,添加如下代码,去掉多余依赖项:
#add_begin
for d in a.datas:
if 'pyconfig' in d[0]:
a.datas.remove(d)
break
#add_end
- 1
- 2
- 3
- 4
- 5
- 6
位置在a后面,pyz前面。
4.WARNING: file already exists but should not: C:\…\…\…\Local\Temp_MEI165842\torchvision_C.cp37-win_amd64.pyd
这个试了挺多办法,还未解决,有解决了的大哥麻烦告知一下,感激不尽!!!
5.最麻烦的,torch和torchvision打包问题,exe在自己电脑上能用,在其他电脑上就报错如下:
其实主要问题是pyinstaller不支持torchvision在0.3.0以上的版本。但是,要给torchvision降级什么的·····不多说了,懂的都懂!!!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rT1z876E-1600249368225)(https://user-images.githubusercontent.com/34004152/74804720-5e0c1680-5324-11ea-8974-ce18e0692b42.png)]
所以,真解决方案:在GitHub上找到了大佬的解决方法:
这里详细说一下:在主文件,也就是你要打包的文件头部添加
def script_method(fn, _rcb=None):
return fn
def script(obj, optimize=True, _frames_up=0, _rcb=None):
return obj
import torch.jit
torch.jit.script_method = script_method
torch.jit.script = script
- 1
- 2
- 3
- 4
- 5
- 6
- 7
不过记得添加在import torch后面,否则会报错。
有的可能在这一步就好了,但是,可能会发现打包出来的exe文件没有变大,因为torch和torchvision之类的库并没有打包进exe,于是在其他电脑上运行依然报错。这里就要修改spec文件了,在a = Analysis里修改path和hiddenimports:
datas=[(path.join(site_packages,"torch"), "torch"),
(path.join(site_packages,"torchvision"), "torchvision"),
(path.join(site_packages,"cv2"), "cv2")],
hiddenimports=['torch', 'torchvision', 'cv2'],
- 1
- 2
- 3
- 4
这里我的site_packages在"F:\Anaconda3\Lib\site-packages",即自己电脑anaconda里的拓展库位置。
其实这不可能也不行,但是这时候我正好注意到了pyinstaller xxx.spec时所报的信息:
注意到那一堆warning没,这张图是没问题的图,这些warning暂时没发现有啥影响,但在之前还有其他warning的,是torch和torchvision报的,也是缺少dll,不过这些dll在电脑上其实都有,只是pyinstaller太蠢了,找不到,都在"site-packages"里,把他们一个个找到复制到要打包文件目录就行了,我这里需要的文件如下图:
这些dll都是我一个个搜索,然后复制过来的,每个人的torch和torchvision版本都可能不一样,大家各找各的就行了。
顺带一提,我的环境是:
cuda = 10.0
torch = 1.1.0
torchvision = 0.3.0
- 1
- 2
- 3
这样应该就么得问题了,我看见有人OpenCV打包也遇到类似问题,我这里也收集一下解决方法:
首先也是把opencv_videoio_ffmpeg430_64.dll复制到主文件夹下,这个也是每个人的版本都不一样的,然后在主代码里加上一段:
import ctypes
try:
temp = ctypes.windll.LoadLibrary('opencv_videoio_ffmpeg430_64.dll')
except:
pass
- 1
- 2
- 3
- 4
- 5
- 6
- 7
应该就好了。
是不是以为完了????????
我还遇见其他问题了,,,,
因为我需要用到mmcv这个库,但它只要一打包就绝对出问题,,,
顺藤摸瓜,File “setuptools\depends.py”, line 6, 在这里,我们进去看看:
长得不咋地,,,挺能折腾我。
是因为绝对路径问题吧,好像pyinstaller可以冻结路径,懒得搞了,改成这样子就行了,不过事后记得改回来,不然在自己电脑上以后可能会报错!!!!
from py33compat import Bytecode
from py27compat import find_module, PY_COMPILED, PY_FROZEN, PY_SOURCE
import py27compat
- 1
- 2
- 3
到这里就告一段落了,如果有类似问题可以给我留言,万一我那天想起这个账号了随手登录看见了可以一起讨论下!
---------------------
作者:dreamflywhere
来源:CSDN
原文:https://blog.csdn.net/dreamFlyWhere/article/details/82463902?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!