【python】py文件全自动打包成spec文件
本帖最后由 黑猫的猫 于 2023-10-23 01:18 编辑## 说明:
> 自动当前根目录下所有py文件生成spec文件,直接运行pyinstaller进行打包即可。直接打包成单执行文件。
## 直接上代码
```python
import os
pathex = []
def recursion(path, main):
if path[:1] != '/':
path += '/'
listpath = os.listdir(path)
for item in listpath:
if os.path.isdir(path + item):
recursion(path + item, main)
# print('文件夹',path +item)
elif os.path.isfile(path + item):
# if '.py' in item and '.pyc' not in item and '__init__' not in item and '.pyz' not in item and main not in item:
if '.py' in item and all(i not in item for i in ['.pyc', '__init__', '.pyz','.pyd', main]):
# print('文件',path +item)
pathex.append(path + item)
else:
print('未知文件', path + item)
def getTxt():
return """# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['${thisMain}.py'],
pathex=${thisPath},
binaries=[],
datas=[],
hiddenimports=${thisPy}, runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='Main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
"""
if __name__ == '__main__':
# 要使用pyinstaller打包的项目路径
# path = 'E:/pythonProject/test1/pyqt'
path = os.path.dirname(__file__)
# 打包项目的入口文件名
main = 'main'
recursion(path, main)
hiddenimports = []
for i in pathex:
if i != path:
# print(i[:i.rindex('/')])
hiddenimports.append(i.replace(i[:i.rindex('/')], '').replace(i'.'):], '').replace('/', ''))
pathexs = []
pathex.append(path)
for i in pathex:
if i != path:
pathexs.append(i.replace(os.path.abspath(os.path.join(os.getcwd(), "../")), '').replace('/', '\\'))
continue
pathexs.append(i.replace('/', '\\'))
outTxt = getTxt().replace("${thisPy}",f'{hiddenimports}').replace("${thisPath}",f'{pathexs}').replace("${thisMain}",main)
with open(f"{path}/{main}.spec","w",encoding="utf-8")as f:
f.write(outTxt)
f.close()
exit(0)
```
## 打包后的spec文件怎么使用?
> 直接在terminal窗口执行 **pyinstaller 文件名.spec** 然后回车即可 进去文件路径,双击文件,运行 学习一下 和自动的有什么区别? 打包exe会不会更方便点? 感谢 分享 虽然看不懂但还是看了,因为只有看了才知道不懂 不错,学习了,有机会试试 学习一下 学习一下
页:
[1]
2