如題,用pygal做了一個簡單的投骰子模擬的小程式能將結果生成svg檔案
程式在編譯器里運行正常,用cmd運行.py檔案也能正常運行
但是用pyinstaller打包后卻報錯檔案不存在,但是我軟體并沒有引入任何檔案,為什么打包成exe會出錯呢?
后來把第一個檔案里最后的生成svg的 hist.render_to_file(filename=‘die.svg’) 刪掉,再打包,生成的exe就不報錯了。需要的包都正常安裝了,編譯器和直接運行都是正常的,就是不能打包成exe運行。為什么啊,求解!!!
打包后的exe能生成檔案,但檔案里什么都沒有寫入,空的
代碼和用cmd打開后報錯內容如下,煩請各位高手幫忙看下

die_visual.py檔案
import pygal
from die import Die
mianshu=[6,6,6]
die_1=Die(mianshu[0])
die_2=Die(mianshu[1])
die_3=Die(mianshu[2])
results=[]
'''儲存投擲結果'''
cishu = 1000
for roll_num in range(cishu):
result=die_1.roll()+die_2.roll()+die_3.roll()
results.append(result)
frequencies = []
max_result = die_1.num_sides+die_2.num_sides
for value in range(2,max_result+1):
#生成標簽
frequency=results.count(value)
#計算每個面出現次數
frequencies.append(frequency)
#加入標簽組中
#對結果進行可視化
hist = pygal.Bar()
hist.title="投擲兩個六面骰子"+str(cishu)+"次結果統計"
biaoqians=[]
for biaoqian in range(2,max_result+1):
biaoqians.append(str(biaoqian))
hist.x_labels=biaoqians
hist.x_title="碼值"
hist.y_title="出現次數"
hist.add("D"+str(mianshu[0])+"+"+"D"+str(mianshu[1]),frequencies)
hist.render_to_file(filename='die.svg')
die.py檔案
from random import randint
class Die():
'''一個骰子類'''
def __init__(self,num_sides=6):
'''骰子默認6個面'''
self.num_sides = num_sides
def roll(self):
'回傳隨機值'
return randint(1,self.num_sides)
uj5u.com熱心網友回復:
參考https://www.jianshu.com/p/fe9ee823501c頁面上"解決 FileNotFoundError 問題"部分的思路:在對應的Python版本路徑“\Python3p5\Lib\site-packages\PyInstaller\hooks”下撰寫hook-pygal.py :from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files('pygal')
也可參考博客https://blog.csdn.net/Hello_liucz/article/details/104714893上面有類似的問題及解決方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/81741.html
上一篇:python類
下一篇:八種經典排序演算法總結
