Pyinstaller exe转换matplotlib __init__错误。

问题描述 投票:0回答:1

当我试图创建一个导入了matplotlib的.exe时,我得到以下错误。

回溯(最近一次调用):文件"",第1行,在文件 "C:Users\FloAppData\Local\Programs\"中。 文件"",第1行,在文件 "C:Users/Flo\AppData/Local/Programs/Python/Python38/Lib/site-packages/matplotlib__init__. py",第1015行,在rcParams = rc_params() 文件 "C:\Users\Flo\AppData\LocalPrograms\Python\Python38/Libsit-packagesmatplotlib__init__. 文件 "C:\Users\FloAppData\Local\Programs\Python\Python38Libsit-packagesmatplotlib__init__.py",第731行,在matplotlib_fname for fname in gen_candidates()。 文件 "C:\Users\Flo\AppData\Local\Programs\Python\Python38\Lib\sit-packages\matplotlib__init__.py", 第728行, in gen_candidates yield os. path.join(get_configdir(), 'matplotlibrc') 文件 "C:Users/Flo/AppData/Local/Programs/Python/Python38/Libsite-packages/matplotlib__init__. 文件 "C:Users/Flo/AppData/Local/Programs/Python/Python38/Libsite-packagesmatplotlib__init__.py", 第609行, in get_configdir return _get_config_or_cache_dir(_get_xdg_config_dir() 文件 "C:\Users\Flo\AppData\Local\Programs\Python\Python38/Lib\sit-packages\matplotlib__init__.py", 第562行, in _get_xdg_config_dir return os.environ. get('XDG_CONFIG_HOME') 或 str(Path.home() ".config") AttributeError: type object 'Path' has no attribute 'home' Traceback (最近一次调用): 文件"",第1行,在文件 "C:Users/Flo/AppData/Local/Programs/Python/Python38/Lib/site-packages/matplotlib__init__. py",第1015行,在rcParams = rc_params() 文件 "C:\Users\Flo\AppData\LocalPrograms\Python\Python38/Libsit-packagesmatplotlib__init__. 文件 "C:\Users\FloAppData\Local\Programs\Python\Python38Libsit-packagesmatplotlib__init__.py",第731行,在matplotlib_fname for fname in gen_candidates()。 文件 "C:\Users\Flo\AppData\Local\Programs\Python\Python38\Lib\sit-packages\matplotlib__init__.py", 第728行, in gen_candidates yield os. path.join(get_configdir(), 'matplotlibrc') 文件 "C:Users/Flo/AppData/Local/Programs/Python/Python38/Libsite-packages/matplotlib__init__. 文件 "C:Users/Flo/AppData/Local/Programs/Python/Python38/Libsite-packagesmatplotlib__init__.py", 第609行, in get_configdir return _get_config_or_cache_dir(_get_xdg_config_dir() 文件 "C:\Users\Flo\AppData\Local\Programs\Python\Python38/Lib\sit-packages\matplotlib__init__.py", 第562行, 在 _get_xdg_config_dir return os.environ.get('XDG_CONFIG_HOME') or str(Path.home() ".config") AttributeError: type object 'Path' has no attribute 'home'

如果需要的话,这是我的代码。


from PIL import Image, ImageFont, ImageDraw
import urllib.request
import win32com
from win32com.shell import shell, shellcon
from win32com.client import Dispatch
from os import mkdir, remove, path
from datetime import date, datetime
#import winshell
#-------------------------------------------------------------------------------
# Name:        Modul1
# Purpose:
#
# Author:      Flo
#
# Created:     31.03.2020
# Copyright:   (c) Flo 2020
# Licence:     <your licence>
#-------------------------------------------------------------------------------
from datetime import date, datetime
import urllib.request
import zipfile
from shutil import copyfile, rmtree
import csv
import matplotlib.pyplot as plt
import time
start = time.time()
#-------------------------------------------------------------------------------
def datumedit(index, datumls, indexhinzufügen):
    ind = datumls.index(".")
    if ind != index:
        datumls.insert(indexhinzufügen, "0")
        ind += 1
    datumls[ind] = "-"
    return datumls
#-------------------------------------------------------------------------------
def csvdelim(liste, max):
    i = 0
    while i != max:
        ind = liste.index(";")
        liste[ind] = "-"
        i += 1
    retour = liste.index(";")
    return retour
#-------------------------------------------------------------------------------
def getvalues(file_dir,liste,liste2,ersetzenbis,floatconvertieren=False):
    durchlauf2 = 0
    keinedateninzeile = []
    with open(file_dir, newline='') as file1:
        anzahlreihen = sum(1 for line in file1)
    with open(file_dir, newline='') as file:
        reader = csv.reader(file)
        next(reader)
        for row in reader:
            durchlauf1 = 0
            uhrzeit = ""
            listed = ""
            reihe = list(str(row))
            ind = csvdelim(reihe,ersetzenbis)
            reihe[ind] = "-"
            ind1 = reihe.index(";")
            ind2 = ind+1
            inddif = ind1-ind-1
            while durchlauf1 != inddif:
                listed = listed+reihe[ind2]
                ind2 += 1
                durchlauf1 +=1
            if listed == "":
                continue
            if floatconvertieren == True:
                if listed == "":
                    None
                else:
                    liste.append(float(listed))
            else:
                liste.append(listed)

            if durchlauf2 == anzahlreihen:
                break
            indexuhzt = reihe.index(" ")
            uhrzeit = reihe[indexuhzt+1]+reihe[indexuhzt+2]+reihe[indexuhzt+3]+reihe[indexuhzt+4]+reihe[indexuhzt+5]
            liste2.append(uhrzeit)
            durchlauf2 += 1
    return liste, liste2
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
def bestimmtertag(datumin,orte,namen,temppath,bilderpfad,aktuellermonat,aktuellesjar,tag,monat,jahr):
    datumls = list(datumin)
    temp = temppath
    aus = False
    #CSV Herunterladen
    for e in orte:
        start1 = time.time()
        print(e)
        xpm25 = []
        xpm10 = []
        ypm25 = []
        ypm10 = []
        xpm10d = ""
        sensor = namen[e]
        if aktuellermonat == monat and jahr == aktuellesjahr:
            link = "https://www.madavi.de/sensor/data_csv/csv-files/%s-%s-%s/data-%s-%s-%s-%s.csv" %(jahr,monat,tag,sensor,jahr,monat,tag)
            iszip = False
        else:
            link = "https://www.madavi.de/sensor/data_csv/%s/%s/data-%s-%s-%s.zip" %(jahr,monat,sensor,jahr,monat)
            iszip = True
        if iszip == True:
            folderzip = "data-%s-%s-%s.zip" %(sensor,jahr,monat)
            folderohnezip = "data-%s-%s-%s" %(sensor,jahr,monat)
            filename = "data-%s-%s-%s-%s.csv" %(sensor,jahr,monat,tag)
            mkdir(temp+"\\"+folderohnezip, 0o777)
            with urllib.request.urlopen(link) as dl_file:
                with open(temp+"\\"+folderzip, 'wb') as out_file:
                    out_file.write(dl_file.read())
            with zipfile.ZipFile(temp+"\\"+folderzip, 'r') as zip_ref:
                zip_ref.extractall(temp+"\\"+folderohnezip)
            copyfile(temp+"\\"+folderohnezip+"\\"+filename, temp+"\\"+filename)
            rmtree(temp+"\\"+folderohnezip)
            remove(temp+"\\"+folderzip)

        else:
            filename = "data-%s-%s-%s-%s.csv" %(sensor,jahr,monat,tag)
            with urllib.request.urlopen(link) as dl_file:
                with open(temp+"\\"+filename, 'wb') as out_file:
                    out_file.write(dl_file.read())

        #CSV zu Liste
        getvalues(temp+"\\"+filename,ypm10,xpm10,6,True)
        print("marker1")
        getvalues(temp+"\\"+filename,ypm25,xpm25,7,True)
        remove(temp+"\\"+filename)
        #Graph
        plt.style.use("dark_background")
        plt.figure(dpi=600)
        ax = plt.subplot()
        ax.yaxis.grid(True)
        print("marker2")
        plt.plot(xpm10,ypm10,"r",label="PM10",linewidth=0.7)
        plt.plot(xpm25,ypm25,"g",label="PM25",linewidth=0.7)
        ax.legend(facecolor="#cccccc")#(211,211,211,1))
        print("marker3")
        ende1 = time.time()
        plt.savefig(bilderpfad+"\\"+e+".png", transparent=True)
        ende2 = time.time()
        print("marker4")
        plt.cla()
        plt.close("all")

        print('Einzelzeit: {:5.3f}s'.format(ende1-start1))
        print('Durchlauf: {:5.3f}s'.format(ende2-start1))

#-------------------------------------------------------------------------------
#
def bildtransparent(bild):
    img = Image.open(bild)
    img = img.convert("RGBA")
    datas = img.getdata()
    newData = []
    for item in datas:
        if item[0] == 255 and item[1] == 255 and item[2] == 255:
            newData.append((255, 255, 255, 0))
        else:
            newData.append(item)
    img.putdata(newData)
    img.save(bild, "PNG")
#
print("Feinstaubdaten auslesen \nAutor: Florian Gruber \nDatum: 25.03.2020")
namen = {"Festsaal":"esp8266-12774674","TH-Trakt":"esp8266-12775574", "Götzis":"esp8266-12775921", "Koblach":"esp8266-12776092"}
orte = ["Festsaal", "TH-Trakt", "Götzis", "Koblach"]
bilderpfad = shell.SHGetFolderPath(0, shellcon.CSIDL_MYPICTURES, None, 0)
feinbilder = bilderpfad + "\\Feinstaub"
datumjetzt = datetime.now()
aktuellermonat = datumjetzt.strftime("%m")
aktuellesjahr = datumjetzt.strftime("%Y")
aktuellertag = datumjetzt.strftime("%d")
temp = feinbilder+"\\temp"
j = 1
zeitraum = False
größe = (1326,756)
höheobenzusatz = 0
höheuntenzusatz = 0
breitelinkszusatz = 0
breiterechtszusatz = 0
strichliste = [0,339,678,1017,1357,1696,1357+678,2375,2714]
uhrzeiten = ["00:00","03:00","06:00","09:00","12:00","15:00","18:00","21:00","24:00"]
#Ordner erstellen
try:
    mkdir(feinbilder, 0o775)
    print("Ordner erstellt")
except:
    None
try:
    mkdir(feinbilder+"\\temp", 0o777)
    print("Ordner erstellt")
except:
    None
##print(shell.SHGetFolderPath(0, shellcon.CSIDL_DESKTOP, None, 0))
##path1 = shell.SHGetFolderPath(0, shellcon.CSIDL_DESKTOP, None, 0)+"\\Feinstaubdiagramme.lnk"
##desktop = winshell.desktop()
##target = path.abspath(__file__)
##shell = Dispatch('WScript.Shell')
##shortcut = shell.CreateShortCut(path1)
##shortcut.Targetpath = target
##shortcut.save()
##except:
##    print("Fehler")
#Bilder Downloaden
while True:
    datumin = "1.1.20"#input("Datum: ")
    datumls = datumedit(2, list(datumin), 0)
    datumls = datumedit(5, datumls, 3)
    if len(datumls) == 8:
        datumls.insert(-2,"2")
        datumls.insert(-2,"0")
    tag = datumls[0]+datumls[1]
    monat = datumls[3]+datumls[4]
    jahr = datumls[6]+datumls[7]+datumls[8]+datumls[9]
    datum = jahr+"-"+monat+"-"+tag
    try:
        mkdir(feinbilder+"\\"+datum, 0o775)
        print("Ordner erstellt")
    except:
        None
    if aktuellertag == tag and aktuellermonat == monat and aktuellesjahr == jahr:
        tage = 0#int(input("Anzahl Tage (0 für 24h): "))

        i = 1
        links = []
        if tage == 0:
            bzeitr = "24-Stunden"
            for e in orte:
                sensor = namen[e]
                link = "https://www.madavi.de/sensor/images/sensor-%s-sds011-1-day.png" %sensor
                bild = open(feinbilder+"\\"+e+".png", "wb")
                bild.write(urllib.request.urlopen(link).read())
                bild.close()
        if tage > 1:
            bzeitr = "7-Tage"
            for e in orte:
                sensor = namen[e]
                link = "https://www.madavi.de/sensor/images/sensor-%s-sds011-1-week.png" %sensor
                bild = open(feinbilder+"\\"+e+".png", "wb")
                bild.write(urllib.request.urlopen(link).read())
                bild.close()
        if tage > 7:
            bzeitr = "1-Monat"
            for e in orte:
                sensor = namen[e]
                link = "https://www.madavi.de/sensor/images/sensor-%s-sds011-1-month.png" %sensor
                bild = open(feinbilder+"\\"+e+".png", "wb")
                bild.write(urllib.request.urlopen(link).read())
                bild.close()
        if tage > 31:
            bzeitr = "1-Jahr"
            for e in orte:
                sensor = namen[e]
                link = "https://www.madavi.de/sensor/images/sensor-%s-sds011-1-year.png" %sensor
                bild = open(feinbilder+"\\"+e+".png", "wb")
                bild.write(urllib.request.urlopen(link).read())
                bild.close()
        zeitraum = True
    else:
        bestimmtertag(datumin,orte,namen,temp,feinbilder,aktuellermonat,aktuellesjahr,tag,monat,jahr)
        größenzusatz = True
    #Collage erstellen
    if größenzusatz == True:
        größe = (7080,5600)
        höheuntenzusatz = 2300
        höheobenzusatz = -203
        breitelinkszusatz = -80
        breiterechtszusatz = 2752
    collage = Image.new("RGB",größe,(0,0,0))
    draw = ImageDraw.Draw(collage)
    for e in orte:
        if j == 1:
            tup1 = (10+breitelinkszusatz,60+höheobenzusatz) # Position Einzelbild
            tup2 = (189,35) #Position Text Orte
            tup3 = (406,2424) #Rechteck Beginn
            tup4 = (3390,2550) #Rechteck Ende
            tup5 = [541,2454,541,199] # Linien erstellen Ausgangswerte
        elif j == 2:
            tup1 = (668+breiterechtszusatz,60+höheobenzusatz)
            tup2 = (3707,35)
            tup3 = (3896,2424)
            tup4 = (6880,2550)
            tup5 = [4031,2454,3930,199]
        elif j == 3:
            tup1 = (10+breitelinkszusatz,423+höheuntenzusatz)
            tup2 = (189,2903)
            tup3 = (406,5290)
            tup4 = (3390,5416)
            tup5 = [541,5320,541,3066]
        elif j == 4:
            tup1 = (668+breiterechtszusatz,423+höheuntenzusatz)
            tup2 = (3707,2903)
            tup3 = (3896,5290)
            tup4 = (6880,5416)
            tup5 = [4031,5320,3930,3066]
        bild = Image.open(feinbilder+"\\%s.png"%e)
        bild.copy()
        collage.paste(bild,tup1)
        bild.close()
        o = 0
        if größenzusatz == True:
            font = ImageFont.truetype("arial.ttf", 80)
            draw.rectangle((tup3, tup4), fill="black")
            for f in strichliste:
                if o == 9:
                    o = 0
                draw.line((tup5[0]+f,tup5[1],tup5[0]+f,tup5[3]),fill="white",width=3)#
                draw.text((tup5[0]-100+f,tup5[1]+6),uhrzeiten[o], fill="white",font=font)
                o += 1
        else:
            font = ImageFont.truetype("arial.ttf", 70)
        j += 1
        #Orte schreiben
        font = ImageFont.truetype("arial.ttf", 100)
        draw = ImageDraw.Draw(collage)
        draw.text(tup2,e,fill="white",font=font)
        draw.text((10,8),datum,(0,0,0),font=font)
        if zeitraum == True:
            draw.text((1230,8),bzeitr,(0,0,0),font=font)

    #Bild speichern
    if zeitraum == True:
        collage.save(feinbilder+"\\"+datum+"\\"+bzeitr+".png")
    else:
        collage.save(feinbilder+"\\"+datum+"\\"+datum+".png")
    #Einzelbilder löschen
    for e in orte:
        remove(feinbilder+"\\"+e+".png")
    #Bild öffnen
    collage.show()
    break
python matplotlib pyinstaller
1个回答
0
投票

执行这个

pip uninstall pathlib

© www.soinside.com 2019 - 2024. All rights reserved.