Pyinstaller:创建具有多个依赖项的可执行文件 - " TypeError"

时间:2015-08-17 16:54:08

标签: python sqlalchemy wxpython pyinstaller objectlistview-python

我有一个相当大的wx应用程序,我已经构建并希望将其编译成可执行文件。我之前已经这样做了,但是,这个过程变得更加复杂,因为我正在使用其他几个依赖项(包),而我的程序由多个.py文件组成。在发布代码之前,我将描述初始错误消息。

错误消息

导航到保存所有脚本文件的目录,并在提示符(cmd)窗口中执行以下命令:

  

pyinstaller -F AMI_GUI.py

Pyinstaller最初运行正常但是在进程结束时我收到此错误:

  

TypeError:迭代非序列

我发布了一个屏幕截图,以便更好地显示此错误。

First Pyinstaller Attempt Gets ValueTypeError

有趣的是接下来会发生什么,我尝试再次运行相同的命令,' pyinstaller -F AMI_GUI.py'。但是这次错误没有发生,而是流程结束,在我的 dist 目录中创建了我的可执行文件。我也能够运行可执行文件。

Run Pyinstaller a second time. No Error!

有没有人在使用pyinstaller编译应用程序之前遇到此问题?我还没有对可执行文件进行过广泛的测试,但我担心它会因为pyinstaller进程第一次失败而信任它。

我发布了部分代码,其中显示了依赖项和部分代码:

AMI_GUI.py

from sqlalchemy import create_engine, Column, Integer, String, DateTime, Float, UnicodeText, VARCHAR, NVARCHAR, TEXT, DATE, distinct, ForeignKey, Table,or_,and_
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
import math
import wx
import wx.lib.mixins.listctrl  as  listmix
from ObjectListView import ObjectListView, ColumnDefn
from ObjectListView import EVT_CELL_EDIT_STARTING
from ObjectListView import EVT_CELL_EDIT_FINISHING
import os
import time

from wigets import File_Manager,Date_Filter,Log_In,EVT_LOGIN
from AMI_component import engine
from AMI_component import Exception,Meter,Transformer,except_heading,meter_heading
import csv

## Link to Database
Session = sessionmaker( bind=engine )                   ## Import the database engine from component file
session = Session()                                     ## Create session to database

AMI_components.py

import os,math,random,string,operator,logging,csv
from itertools import count

from sqlalchemy import create_engine, Column, Integer, String, DateTime, Float, UnicodeText, VARCHAR, NVARCHAR, TEXT, DATE, distinct, ForeignKey, Table
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, relationship
from AMI_subroutine import getFiles,incident_filt,getDB,get_manf,dayMonth,check_voltage,violation_filt,rec,get_dateTime
admin_dir = "C:\project\AMI"
# print os.getcwd()
os.chdir(admin_dir)

engine = create_engine("sqlite:///./AMI_case.db", #"oracle://rai:raisys@njnwkora18_oraa.db.pseg.com",
                       echo=False)

Session = sessionmaker( bind=engine )
session = Session()

不确定此代码是否有用,但它确实显示了我使用的导入语句的方式...我使用pyinstall命令运行的一些主文件是AMI_GUI.py。

1 个答案:

答案 0 :(得分:1)

做了一些谷歌搜索,它看起来像一个pyinstaller bug。

请参阅: https://groups.google.com/forum/#!topic/pyinstaller/lDCzhTS4Apo

https://github.com/pyinstaller/pyinstaller/issues/964