在 python 脚本上使用 pyinstaller 会产生巨大的文件大小
Posted
技术标签:
【中文标题】在 python 脚本上使用 pyinstaller 会产生巨大的文件大小【英文标题】:Using pyinstaller on a python script results in huge filesize 【发布时间】:2018-09-21 21:54:53 【问题描述】:好的,我现在可以从我的 .py 文件中制作一个 .exe。
问题在于文件大小对于它的作用来说是巨大的(200mb)。
这里是源代码:
#imports
import numpy
import os
#initializing
board = [[0] * 3 for _ in range(3)]
player = 0
def playerturn():
global player
while player<=2:
os.system('cls' if os.name == 'nt' else 'clear')
if checkifwon():
break
if player==1:
print('Player 1s turn')
if player==2:
print('Player 2s turn')
print(board[0])
print(board[1])
print(board[2])
print('Controls:')
print('7 8 9')
print('4 5 6')
print('1 2 3')
sign=int(input('Enter a number to place your sign'))
#1 to 3
if sign==1:
if board[2][0]==0:
board[2][0]=player
else:
print('Please choose an unoccupied field.')
playerturn()
elif sign==2:
if board[2][1]==0:
board[2][1]=player
else:
print('Please choose an unoccupied field.')
playerturn()
elif sign==3:
if board[2][2]==0:
board[2][2]=player
else:
print('Please choose an unoccupied field.')
playerturn()
#4 to 6
elif sign==4:
if board[1][0]==0:
board[1][0]=player
else:
print('Please choose an unoccupied field.')
playerturn()
elif sign==5:
if board[1][1]==0:
board[1][1]=player
else:
print('Please choose an unoccupied field.')
playerturn()
elif sign==6:
if board[1][2]==0:
board[1][2]=player
else:
print('Please choose an unoccupied field.')
playerturn()
#7 to 9
elif sign==7:
if board[0][0]==0:
board[0][0]=player
else:
print('Please choose an unoccupied field.')
playerturn()
elif sign==8:
if board[0][1]==0:
board[0][1]=player
else:
print('Please choose an unoccupied field.')
playerturn()
elif sign==9:
if board[0][2]==0:
board[0][2]=player
else:
print('Please choose an unoccupied field.')
playerturn()
else:
print('Please enter a number from 1 to 9')
playerturn()
player+=1
def doround():
global player
player=1
playerturn()
def threesame(a,b,c):
if a!=0 and a==b and b==c:
return True
else:
return False
def checkifwon():
if threesame(board[0][0],board[1][0],board[2][0]):
return board[0][0]
elif threesame(board[0][1],board[1][1],board[2][1]):
return board[0][1]
elif threesame(board[0][2],board[1][2],board[2][2]):
return board[0][2]
elif threesame(board[0][0],board[0][1],board[0][2]):
return board[0][0]
elif threesame(board[1][0],board[1][1],board[1][2]):
return board[1][0]
elif threesame(board[2][0],board[2][1],board[2][2]):
return board[2][0]
elif threesame(board[0][0],board[1][1],board[2][2]):
return board[0][0]
elif threesame(board[0][2],board[1][1],board[0][2]):
return board[0][2]
else:
return False
def tictac():
global player
while checkifwon()==False:
doround()
print('Player',end='')
print(checkifwon(),end=' ')
print('won')
tictac()
print('thanks for playing')
input("Press Enter to quit...")
现在我想知道我可以做些什么来缩小 .exe 的文件大小。
我用来构建的命令是
pyinstaller --onefile tictactoe.py
我是在 Windows 10 机器上完成的。
我读到您可以排除某些导入,但您能以某种方式自动排除它们吗?
【问题讨论】:
你为什么要导入numpy
?
【参考方案1】:
what I can do to shrink the filesize of the .exe?
pyinstaller 自动将依赖项与应用程序捆绑在一起,该应用程序还包括您环境中的许多冗余库。
我更喜欢的一个解决方案是使用一个干净的环境,如 virtualenv 或 docker,只安装必需的模块。
【讨论】:
这取决于您的需求。我个人喜欢 onefile 程序,因为它们可以复制粘贴到任何地方,甚至可以从 U 盘使用。以上是关于在 python 脚本上使用 pyinstaller 会产生巨大的文件大小的主要内容,如果未能解决你的问题,请参考以下文章
python3.7 打包成exe的一种方法 pyinstaller