(Python3.6使用cx_Freeze)Exe不运行pandas,numpy应用程序

时间:2017-09-29 02:58:37

标签: python-3.x anaconda spyder cx-freeze

我使用以下库编写了一个名为Expiration_Report.py的.py脚本:pandas,numpy。在Spyder(python 3.6)中执行时,此代码运行完全正常。

(将Anaconda用于一切)

然后我创建了另一个名为'setup.py'的.py文件,其中包含以下代码,以便将Expiration_Report.py转换为Expiration_Report.exe:

    import sys
    from cx_Freeze import setup, Executable

    # Dependencies are automatically detected, but it might need fine tuning.
      build_exe_options = {"packages": ["os"], 
                 "excludes": ["tkinter"]}

    # GUI applications require a different base on Windows (the default is for a
    # console application).
    base = None
    if sys.platform == "win32":
        base = "console" 


    setup(  name = "my prog",
        version = "1.0",
        description = "My application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("Expiration_Report.py", base = base)])

然后在命令提示符中写道:

    python setup.py build

它构建没有任何错误。并且build文件夹也可以与.exe文件一起使用。但是,当我从build文件夹运行.exe文件时:没有任何反应。

以下是Expiration_Report.py脚本中的代码:

    import pandas as pd
    import numpy as np

    df = pd.read_excel('C:/Users/Salman/Desktop/WIP Board - 007.xlsx',                         index_col=None, na_values=['NA'])

    df.columns = df.iloc[12]
    df.columns

    df.shape

    df = df.dropna(axis=1, how = 'all')
    df

    df.columns

    df1 = df.copy()
    df1 = df1.iloc[13:]
    df1

    df1 = df1.dropna(axis=1, how = 'all')
    df1.shape

    from datetime import datetime
    print(str(datetime.now()))

    df2 = df1.copy()
    df2["Now_Time"] = pd.Series([datetime.now()] * (13+len(df1)))

    df2["Now_Time"]

    df2

    df2.fillna(value='NaN')

    df2 = df2.dropna(how='any')

    df2.shape

    df3 = df2.copy()
    df3 = df3[df3.Size>0]
    df3['Lot Expiration Date'] = pd.to_datetime(df3['Lot Expiration Date'])

    df3['Days_Countdown'] = df3[['Lot Expiration Date']].sub(df3['Now_Time'], axis = 0 )

    df3.dtypes

    df3['Hours_Countdown'] = df3['Days_Countdown'] / np.timedelta64(1, 'h')

    df3 = df3.sort_values('Hours_Countdown')

    df_expiration = df3[df3.Hours_Countdown<12]

    df_expiration['Hours_Countdown'].astype(int)
    df_expiration

    df_expiration.to_excel('C:/Users/Salman/Desktop/WIP Board - 000.xlsx', sheet_name = 'Sheet1')

从cs_Freeze创建exe文件的方法是正确的。因为我将一个简单的脚本HelloWorld.py转换为exe,它工作正常。它不会导入pandas库而只退出exe。

3 个答案:

答案 0 :(得分:0)

也许您需要将pandas和numpy添加到包列表中。在寻找所有必要的软件包时,cx_freeze可能有点狡猾。

build_exe_options = {"packages": ["os", "numpy", "pandas"], 
             "excludes": ["tkinter"]}

答案 1 :(得分:0)

似乎这(包括setu.py文件中的软件包)对CX_freeze 5和6不起作用(据我所知,这些是最新版本)。 我有同样的问题和我在这里提出的任何建议,包括添加包。似乎导致麻烦的是numpy。 您可以通过将import numpy放入非常简单的测试脚本中来测试,并在冻结它时看到它崩溃。

我的解决方案适用于python 3.4,但我怀疑它在python 3.6下运行: 我卸载了cx_freeze并通过pip install cx_Freeze==4.3.4重新安装了cx_freeze 4.3.4,然后就可以了。

答案 2 :(得分:0)

一旦应用程序为pd.read_csv

pd.read_excel可以工作,但是cx_freezed不能

熊猫read_excel需要导入名为xlrd的导入。如果没有它,则需要安装它,然后pd.read_excel可以正常工作。