python - pyinstaller 打包成单独exe

 鱼鱼de眼泪2012 发布于 2022-10-29 03:52
# -*- coding: utf-8 -*-
__author__ = 'kinfinger'
import os
import tkFileDialog
import tkMessageBox
import Pmw
import sys,Tkinter
import logging
from ftplib import FTP
sys.modules['tkinter']=Tkinter
from Tkinter import *
logging.basicConfig(level=logging.INFO)

class FileGuiChose(object):

    def __init__(self,initdir=None,frame=None,showframe=None,bottomFrame=None):
        self.entryvar =StringVar()
        self.showframe=showframe
        self.menuList=('/www/export/oms','/www/export/wms','/www/import/oms','/www/import/wms','/www/oversea/oms','/www/oversea/wms')
        # top area
        self.ftpMenuChines=[u'出口OMS',u'出口WMS',u'进口OMS',u'进口WMS',u'海外仓OMS',u'海外仓WMS']
        self.glabel=Label(frame,text=u'本地项目根目录')
        self.gentry=Entry(frame,textvariable=self.entryvar)
        self.gbutton=Button(frame,command=self.opendir,text=u'选取目录')
        self.keyListBox = Listbox(frame)
        # initiatate the dropdown-list
        self.keyvar=StringVar()
        self.keyvar.set(u'请选择项目')
        self.ftpdir=''
        self.dropDownlist = Pmw.OptionMenu(frame,
            labelpos='w',
            label_text = u'选择200项目目录:',
            menubutton_textvariable = self.keyvar,
            items = self.ftpMenuChines,
            menubutton_width = 15,
            command=self.setFtpdir,
        )
        self.gentry.bind('',func=self.refresh)
        self.glabel.grid(row=0,column=0,sticky=W)
        self.gentry.grid(row=0,column=1)
        self.gbutton.grid(row =0,column=2)
        self.dropDownlist.grid(row=0,column=4,sticky=E)
        # content area
        self.textbar=Scrollbar(self.showframe,orient=VERTICAL)
        self.textbar.pack(side=RIGHT,fill=Y)
        # bottome area
        self.bottomBar = Scrollbar(showframe,orient = HORIZONTAL,bg='black')
        self.bottomBar.pack(side=BOTTOM,fill=X)
        self.textbox=Text(self.showframe,yscrollcommand=self.textbar.set,xscrollcommand=self.bottomBar.set,wrap=CHAR)
        self.textbox.pack(side=LEFT,fill=BOTH)
        self.textbar.config(command=self.textbox.yview) # yview
        self.bottomBar.config(command=self.textbox.xview) # xview
        self.submitButton=Button(bottomFrame,text=u'上传文件',command=self.submit)
        self.submitButton.grid(row=0,column=1)
        #文本录入框的粘贴复制
        self.copyMenu = Menu(self.showframe, tearoff=0)
        self.copyMenu.add_command(label="复制", command=self.onCopy)
        self.copyMenu.add_separator()
        self.copyMenu.add_command(label="粘贴", command=self.onPaste)
        self.copyMenu.add_separator()
        self.copyMenu.add_command(label="剪切", command=self.onCut)
        self.textbox.bind("", self.popupmenu)
        self.dirname=''
        
    def popupmenu(self,event):
        self.copyMenu.post(event.x_root, event.y_root)
        
    def onPaste(self):
        try:
            self.text = self.showframe.clipboard_get()
        except TclError:
            pass
        self.textbox.insert(INSERT,str(self.text))
        self.textbox.update()
        
    def onCopy(self):
        text = self.textbox.get(SEL_FIRST, SEL_LAST)        
        self.showframe.clipboard_clear()       
        self.showframe.clipboard_append(text)
        
    def onCut(self):
        text = self.textbox.get(SEL_FIRST, SEL_LAST)    
        self.textbox.delete(SEL_FIRST, SEL_LAST)      
        self.showframe.clipboard_clear()       
        self.showframe.clipboard_append(text)
        
    def opendir(self):
        #self.textbox.delete('1.0','9999999.0')
        self.dirname=tkFileDialog.askdirectory()
        self.entryvar.set(self.dirname) # related to entry just for show
        showmessage=u'请选择本地文件目录'
        if not self.dirname:
            self.messageBox=tkMessageBox.showinfo(self.showframe,message=showmessage)
        else:
            self.dirname=self.entryvar.get()
            #self.dirlist=os.listdir(self.entryvar.get())
            #for eachdir in self.dirlist:
            #   self.textbox.insert(END,eachdir+'\r\n')
        #self.textbox.update()
        
    def refresh(self,event=None):
        self.textbox.delete('1.0','9999999.0')
        self.dirlist=os.listdir(self.entryvar.get())
        for eachdir in self.dirlist:
            self.textbox.insert(END,unicode(eachdir,'cp936')+'\r\n')
        self.textbox.update()
        
    def setFtpdir(self,event=None):
        mulu=self.dropDownlist.getcurselection()
        #key=-1
        self.ftpdir=''
        for key,value in enumerate(self.ftpMenuChines):
            #key+=1
            #logging.info(key)
            if mulu==value:
                self.ftpdir=self.menuList[key]
                #tkMessageBox.showinfo(self.showframe,message=self.ftpdir)
                break
        return False;
        
    #上传ftp
    def submit(self,event=None):
        result=''
        #i=ctx.request.input(fileroot='',uplodaFile='',xiangmu='')
        #logging.warning(i.uplodaFile.split('\n'));
        #fileRootList=i.fileroot.split('\\')
        #logging.warning(fileRootList)
        if not self.dirname:
            tkMessageBox.showinfo(self.showframe,message=u'请选择本地目录')
            return False
        if not self.ftpdir:
            tkMessageBox.showinfo(self.showframe,message=u'请选择项目目录')
            return False
        
        userSystemDir=os.listdir(self.dirname)
        #logging.warning(userSystemDir)
        prefixPath=[]
        movePath=[]
        if not userSystemDir:
            tkMessageBox.showinfo(self.showframe,message=u'请选择项目目录')
            return False
        uploadFileText=self.textbox.get('1.0','9999999.0')
        if not uploadFileText:
            tkMessageBox.showinfo(self.showframe,message=u'请输入上传的文件列表')
            return False
        #if not i.xiangmu:
            #raise APIError(u'请选择项目目录')
        #ftpDir=('/www/export/oms','/www/export/wms','/www/import/oms','/www/import/wms','/www/oversea/oms','/www/oversea/wms')
        #ftpRoot=ftpDir[int(i.xiangmu)-1]
        ftpRoot=self.ftpdir
        localRoot=self.dirname.replace('\\','/')
        ftp=FTP()
        ftp.set_debuglevel(1)
        ftp.connect('192.168.25.9')
        ftp.login('apache','123456')
        #ftp.cwd(ftpRoot)
        #print ftp.pwd()
        #print ftp.pwd()
        #logging.warning(i.uplodaFile.split('\r\n'))
        print uploadFileText
        #os._exit(0)
        for file in uploadFileText.split('\n'):
            if not file:
                continue
            #logging.warning(userSystemDir)
            #file=file.replace('/','\\')
            fileAblute,replceNumber=re.subn(r'\\+','/',file)
            preFix=getprefixPath(fileAblute,userSystemDir)
            #logging.warning(preFix)
            #os._exit(0)
            #logging.warning(file)
            if(preFix==False):
                tkMessageBox.showinfo(self.showframe,message=file+u'目录不存在')
            if(preFix):
                localPath=fileAblute.replace('/'.join(preFix),localRoot).strip('\r\n').strip('\n')
                #logging.warning(localPath)
                #logging.warning(i.fileroot)
                #logging.warning('/'.join(preFix))
                #logging.warning(file)
                #os._exit(0)
                aimsFtpPath=fileAblute.replace('/'.join(preFix),ftpRoot).strip('\r\n').strip('\n')
            else:
                localPath=localRoot+fileAblute
                localPath=localPath.strip('\r\n')
                #aimsFtpPath=ftpRoot+'/'+fileAblute
                aimsFtpPath='%s/%s'%(ftpRoot,fileAblute)
                aimsFtpPath,number=re.subn(r'\\+|/+','/',aimsFtpPath)
                aimsFtpPath=aimsFtpPath.strip('\r\n').strip('\n')
            #logging.warning(ftpRoot)
            #logging.warning(fileAblute)
            logging.warning(aimsFtpPath)
            #os._exit(0)
            putStatus=putFile(aimsFtpPath,localPath,ftpRoot,ftp)
            if putStatus==True:
                movePath.append(aimsFtpPath)
        ftp.quit()
            #logging.warning(movePath)
        successFile='\r\n'.join(movePath)
        tkMessageBox.showinfo(self.showframe,message=successFile)
            
def putFile(aimsFtpPath,localDir,remoteDir,ftp):
    #ftp.cwd('/www/export/wms/application/models/Common')
    #ftp.storbinary("STOR "+os.path.basename('F:\\import_wms\\felix\\application\\models\\Common\\Status.php'),open('F:\\import_wms\\felix\\application\\models\\Common\\Status.php','rb'))
    #os._exit(0)
    #logging.warning(aimsFtpPath)
    #os._exit(0)
    if not remoteDir:
        return False
    #ftp.cwd(remoteDir)
    aimtuple=os.path.split(aimsFtpPath)
    logging.warning(aimtuple)
    if not aimtuple or not aimtuple[0] or aimtuple[1]=='':
        return False
    #logging.warning(aimtuple)
    aimDirList=aimtuple[0]
    src=''
    #logging.warning(u'循环3')
    for file in aimDirList.split("/"):
        src=src+'/'+file
        #logging.warning(src)
        try:
            ftp.cwd(src)
        except:
            try:
                ftp.mkd(src)
            except:
                raise APIError(u'ftp目录创建失败'+src)
            ftp.cwd(src)
    #logging.warning(localDir.replace('/','*'))
    #testLocalDir='F:/chukouOms/application/models/Service/LogisticsProcess.php'
    #print localDir[59]
    #print localDir[60]
    #print len(testLocalDir)
    #logging.warning(os.path.isfile('F:/import_wms/felix/application/models/Table/CeiveUse.php'))
    #ogging.warning(os.path.isfile(localDir))
    if os.path.isfile(localDir):
        ftp.storbinary("STOR "+os.path.basename(localDir),open(localDir,'rb'))
        #logging.warning(open(localDir,'rb'))
        #os._exit(0)
        return True
    #ftp.cwd('..')
    return False
    
def getprefixPath(uploadFile,userSystemDir):
    fileList=uploadFile.replace('\\','/').split('/')
    preFix=[]
    #logging.warning(fileList)
    for filetemp in fileList:
        #if not filetemp:
            #preFix.append('/')
            #continue
        #logging.warning(filetemp)
        if filetemp in userSystemDir:
            return preFix
        preFix.append(filetemp)
    return False
    
class GuiMenu():

    def hello(self):
        pass
        
    def File(self):
        pass
        
    def Edit(self):
        pass
        
    def View(self):
        pass
        
    def Help(self):
        pass
        
    def __init__(self,rootmenu):
        self.root=rootmenu
        self.menubar=Menu(rootmenu)
        # create a pulldown menu, and add it to the menu bar
        filemenu = Menu(self.menubar, tearoff=0)
        filemenu.add_command(label="Open", command=self.File)
        filemenu.add_command(label="New", command=self.File)
        filemenu.add_command(label="Save", command=self.File)
        filemenu.add_separator()
        filemenu.add_command(label="Exit", command=rootmenu.quit)
        self.menubar.add_cascade(label="File", menu=filemenu)
        # create more pulldown menus
        editmenu = Menu(self.menubar, tearoff=0)
        editmenu.add_command(label="Cut", command=self.Edit)
        editmenu.add_command(label="Copy", command=self.Edit)
        editmenu.add_command(label="Paste", command=self.Edit)
        self.menubar.add_cascade(label="Edit", menu=editmenu)
        helpmenu = Menu(self.menubar,tearoff=0)
        helpmenu.add_command(label="About", command=self.Help)
        self.menubar.add_cascade(label="Help", menu=helpmenu)
        rootmenu.config(menu=self.menubar)
        
def main():
    basePath=os.path.dirname(os.path.abspath(__file__))
    root = Tk()
    root.title(u'200FTP上传')
    root.iconbitmap('%s/ooopic_1464314435.ico' % basePath)
    root.columnconfigure(0,minsize=50)
    topFrame=Frame(root,height=80)
    contentFrame=Frame(root,bg='white')
    bottomFrame=Frame(root,bg='green')
    topFrame.pack(side=TOP)
    contentFrame.pack(side=TOP)
    bottomFrame.pack(side=TOP)
    GuiMenu(root)
    fguiChose=FileGuiChose(os.curdir,topFrame,contentFrame,bottomFrame)
    mainloop()
    
if __name__ == '__main__':
    main()

代码如上,一个文件,一个图标 python 2.7 版面,一个 Pmw-2.0.0 的模块,其他都是自带的
谁能帮忙弄下给个解决办法,我试了打包成 exe 总是执行不了

3 个回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有