日语截图翻译软件(百度ocr+python3+pyqt5)(二)
引语:
之所以是第二篇是因为又加了个日语转罗马音的功能。应用的是kasisi进行转换的。但是中间遇到了一些用pyinstaller打包的问题。
所以在此一并记录,以怕忘记。
1.ui设计师转换为py文件命令:
qtuic5 -o out.py in.ui
2.打包命令(py to exe)
打包成一个文件夹的散落文件: pyinstaller out.py
打包成单个文件:-F
加库文件路径:-p python安装文件夹里面的库路径
去掉打包后运行的命令框: -w
3.生成exe的运行路径和在pycharm中的路径不一致而造成在pycharm中可以正常运行,但是生成exe后不能正常运行的问题。
这里我遇到的是kakasi用于转换的库文件没有打包进exe造成运行时候出现FileNotFoundError问题。
修改方法:
1)方法.打包成散的文件,然后把库文件拷贝到自己pyinstaller生成的dist文件夹里面就行了。
上面文件拷贝到下面路径:
2)方法:
pykasisi库的代码修改。目的是库程序打开文件的时候是打开的运行时候程序所在路径的文件。比如把上面的.pickle文件和生成的exe文件放在一起。就把库代码改成下面红色框那样。这样也是可以解决的。
3)方法:
这个方法比较推荐。因为不用改动库程序文件。
首先,运行pyinstaller -F out.py ,将out.py生成 out.exe和out.spec。这里的out.py是我的例子。
然后在里面添加自己想添加的文件路径。
下面文件中的a.datas就是我添加的。
前面的路径是等会儿生成的exe运行时会临时创建的路径,比如我的是
C:\Users\Administrator\AppData\Local\Temp\_MEI55082\pykakasi
第二个路径是要加入的文件的路径,比如要加一个图片到exe中。就把这个图片的地址贴到第二个路径参数处。
这样,只要路径没错。运行 pyinstaller -F out.spec。就可以把需要的文件打包到刚才的exe中了。如果遇到错误“Security-Alert: try to store file outside of dist-directory. Aborting”,那就多查查路径吧,实在不行就拷到打包的目录里面,让路径改短点,不容易出错。要是还不行,参考这个链接 ,原文说是解决了,但是我试了发现没有用。后来改路径就好用了。但是自己查了改之前的路
径是没问题的。大家自己试一试吧。
Security-Alert: try to store file outside of dist-directory. Aborting 错误解决:
# -*- mode: python -*-
block_cipher = None
a = Analysis(['out.py'],
pathex=['C:\\Users\\Administrator\\Desktop\\out'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
a.datas+= [('pykakasi\\hepburndict2.pickle', r'hepburndict2.pickle', 'DATA'),]
a.datas+= [('pykakasi\\hepburnhira2.pickle', r'hepburnhira2.pickle', 'DATA'),]
a.datas+= [('pykakasi\\itaijidict2.pickle', r'itaijidict2.pickle', 'DATA'),]
a.datas+= [('pykakasi\\kunreidict2.pickle', r'kunreidict2.pickle', 'DATA'),]
a.datas+= [('pykakasi\\kunreihira2.pickle', r'kunreihira2.pickle', 'DATA'),]
a.datas+= [('pykakasi\\passportdict2.pickle', r'passportdict2.pickle', 'DATA'),]
a.datas+= [('pykakasi\\passporthira2.pickle', r'passporthira2.pickle', 'DATA'),]
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='out',
debug=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )
以上如果没有解释明白,可以参考下面的链接。
参照此篇:https://www.cnblogs.com/aiyuxi/p/6310096.html 重点
https://yutuo.net/archives/95be5c27e092b812.html
pyinstaller官网解释:
https://pythonhosted.org/PyInstaller/spec-files.html#adding-data-files
最后,终于成功将文件打包到exe中了。