cx_Freeze 6.6 和 winpython 有问题吗?

问题描述

我在使用 cx_Freeze 和 winpython 时遇到了一些问题。

由于我需要冻结 python 脚本,我尝试使用 cx_Freeze(在这种情况下 pyinstaller 不起作用)。

这里是脚本:



from tkinter import *
from tkinter import ttk
from tkinter.messageBox import showinfo
from bromseButton import FolderSelect,FileSelect
import pandas as pd
from Version import Version
import ezdxf

# version du script :
version = "V0.1.2"
nom_script = "bornes"
#Vérification de la version avec la classe Version
v = Version(version,nom_script)
v.return_message()

#création de la fenêtre principale
fen = Tk()
fen.geometry("710x180")
fen.title("Insertion de bornes dans un fichier dxf - " + version + " "+ v.message)
fen.iconbitmap("index.ico")

#Placement des cadres pour structurer la fenêtre
f1=Frame(fen,bd = 1,width = 900,height= 150,bg='#ddddDD',relief='ridge')
f1.grid(row = 0,column = 0,rowspan = 2)

f2=Text(fen,width = 20,height= 5,relief='ridge')
f2.grid(row=2,columnspan=1,padx=4,sticky = (NSEW))
yscrollbartext=ttk.Scrollbar(fen,orient=VERTICAL,command=f2.yview)
yscrollbartext.grid(row=2,sticky=(NS,E))
f2["yscrollcommand"]=yscrollbartext.set

doc46 = ezdxf.readfile("GABARITS/Gabarit_46.dxf")
#####################################################
# Création d'une fenêtre d'impression des versions  #
#####################################################

f2.tag_configure('big',font=('Arial',9,'bold'))
f2.tag_configure('versionnok','bold'),foreground="red")
f2.tag_configure('versionok',foreground="green")

# affichage de l'historique des versions
f2.insert(END,"Historique des versions \n\n",'big')

j=0
for i in reversed(sorted(list(v.scripts["versions"].keys()))) :
    if j ==0 :     
        if i==version :
            f2.insert(END,i +"\n",'versionok')
            f2.insert(END,v.scripts["versions"][i]["date"]+"\n",'versionok' )
            f2.insert(END,v.scripts["versions"][i]["description"]+"\n\n",'versionok' )
        else :        
            f2.insert(END,'versionnok' )
            f2.insert(END,v.scripts["versions"][i]["date"] + "\n",'versionnok' )
        j+=1
    else : 
        if i==version :
            f2.insert(END,'big')
            f2.insert(END,'big' )
            f2.insert(END,'big' )
        else :        
            f2.insert(END,i +"\n")
            f2.insert(END,v.scripts["versions"][i]["date"] + "\n")
            f2.insert(END,v.scripts["versions"][i]["description"]+"\n\n")

def action() :
    csv = csv_bornes.file_path
    rep = dest_shp.folder_path
    insert_borne(csv,rep)    
    showinfo(title="résultat final",message="Insertion des bornes terminées")

def insert_borne(csv,rep):    
    msp = doc46.modelspace()
    df = pd.read_csv(csv,delimiter=';')
    for i in df.index :        
        if df['BLOC'][i] =='46_POINT_NUMERIQUE' :
            borne = msp.add_blockref(df['BLOC'][i],(df['X'][i],df['Y'][i]),dxfattribs={'layer' : 'BOR_Pt_Numerique'})            
        else :
            borne = msp.add_blockref(df['BLOC'][i],dxfattribs={'layer' : 'BOR_Pt_Materialise'})            
        borne.add_attrib('NumeroPoint',df['NumeroPoint'][i],(df['X'][i]+6.61,df['Y'][i]+11.18),dxfattribs={'height':5,'layer':'TXT_Borne'})    
    doc46.saveas(rep + "/bornes.dxf")

############################
# Récupération des données #
############################
# répertoire de destination pour les fichiers shp temp
dest_shp = FolderSelect(f1,"Répertoire de destination du dxf : ")
dest_shp.grid(row = 0,column = 0)

#Fichier csv
csv_bornes = FileSelect(f1,"Fichier csv : ",[("Fichiers csv","*.csv")])
csv_bornes.grid(row = 1,column = 0)

#bouton de lancement de la fonction principale : 
valider = Button(fen,text = "Exécuter",command = action)
valider.grid(row = 6,sticky = (NW))


fen.mainloop()

和 setup.py :

import sys
from cx_Freeze import setup,Executable
import os.path

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR,'tcl','tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR,'tk8.6')


# Dependencies are automatically detected,but it might need fine tuning.
build_exe_options = {"packages": ["os","numpy","pandas","ezdxf"],'include_files':[
            os.path.join(PYTHON_INSTALL_DIR,'DLLs','tk86t.dll'),os.path.join(PYTHON_INSTALL_DIR,'tcl86t.dll'),os.path.join(os.getcwd(),'GABARITS/Gabarit_46.dxf'),'index.ico')]
            }

base = None
if sys.platform == "win32":
    base = "win32gui"

setup(
    name = "bornes",version = "0.1.2",description = "Bornes!",options = {"build_exe": build_exe_options},executables = [Executable("test.py",base=base,icon ='index.ico')]
)

第一次尝试:

带有 cx_Freeze 6.1 的 winpython 3.7.7。它没有用。 所以我一步一步地尝试发现问题出在熊猫库上。 搜索响应我尝试将 'build_exe': './/build' 放在选项中。创建没问题,但单击 exe 文件时没有附加任何内容

第二次尝试:

使用 python 3.8.6(官方发行版): 将 cx_Freeze 升级到 6.6 一切正常! exe 文件正在运行。好的,我只需要升级 winpython 的 cx_Freeze 版本,一切都会好起来的...但是没有...

我不知道为什么,但我遇到了递归错误

File "C:\Users\bruno\Documents\WPy64-3940\scripts\setup.py",line 83,in <module>
    setup(
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\site-packages\cx_Freeze\dist.py",line 397,in setup
    distutils.core.setup(**attrs)
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\distutils\core.py",line 148,in setup
    dist.run_commands()
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\distutils\dist.py",line 966,in run_commands
    self.run_command(cmd)
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\distutils\dist.py",line 985,in run_command
    cmd_obj.run()
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\distutils\command\build.py",line 135,in run
    self.run_command(cmd_name)
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\distutils\cmd.py",line 313,in run_command
    self.distribution.run_command(command)
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\distutils\dist.py",in run_command
    cmd_obj.run()
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\site-packages\cx_Freeze\dist.py",line 265,in run
    freezer.Freeze()
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\site-packages\cx_Freeze\freezer.py",line 795,in Freeze
    self.finder: ModuleFinder = self._GetModuleFinder()
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\site-packages\cx_Freeze\freezer.py",line 464,in _GetModuleFinder
    finder = ModuleFinder(
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\site-packages\cx_Freeze\finder.py",line 70,in __init__
    self._add_base_modules()
  File "C:\Users\bruno\Documents\WPy64-3940\python-3.9.4.amd64\lib\site-packages\cx_Freeze\finder.py",line 82,in _add_base_modules
[...]
  File "<frozen importlib._bootstrap_external>",line 853,in source_to_code
  File "<frozen importlib._bootstrap>",line 228,in _call_with_frames_removed
RecursionError: maximum recursion depth exceeded during compilation

我已经尝试过 winpython 3.8、3.9,同样的问题...

这是 winpython 的一个已知问题吗?如果有人帮助我,那就太好了!

再见!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)