python代码工作但不在p2exe可执行文件中

时间:2014-02-18 01:56:11

标签: python path executable py2exe

以下代码可单独使用。我用py2exe创建了一个无法运行的可执行文件。该脚本处理和排序一些csv文件。如果我将此代码放在运行可执行文件的“dist”目录中(因此它与正在处理的csv文件具有相同的文件路径深度),代码可以正常工作;但是同一目录中的可执行文件本身不起作用。

import glob
import os
import pandas as pd

current_dir = os.path.dirname(os.path.realpath(__file__))

directory = os.path.sep.join(current_dir.split(os.path.sep)[:-2])
csvfiles = os.path.join(directory, '*.csv')
for csvfile in glob.glob(csvfiles):
    filename = os.path.basename(csvfile)
    if '_sorted' in filename:
        print "Remove this file"
        os.remove(csvfile)

csvfiles = os.path.join(directory, '*.csv')
for csvfile in glob.glob(csvfiles):
    filename = csvfile
    df = pd.read_csv(filename)

    df = df[df["ORGANIZATION"]!="WPPL"]
    df = df.sort('MEETING START TIME')    
    #write new csv file
    df.to_csv(filename + '_sorted.csv', cols=["DATE","MEETING START TIME","MEETING END TIME","DESCRIPTION","ORGANIZATION","LOCATION"],index=False)

raw_input("Press enter to close")

原始输入语句也没有保持屏幕打开,所以我无法真正看到发生了什么。

感谢

1 个答案:

答案 0 :(得分:1)

尝试从dirname(__file__)关闭相对路径来访问数据文件是一个非常糟糕的主意,除非您只想在构建树中运行该程序。如果你想能够安装和运行程序 - 无论是使用py2exe还是其他任何机制 - 你只是在寻找麻烦。

如果您尝试使用可执行文件打包文件,正确的方法是使用py2exe中的data_files机制,或者,如果您可以安装和使用setuptools },更强大,更灵活的Package Resources机制。

另一方面,如果您希望用户在安装应用程序后提供CSV文件,您几乎肯定不想让他将它们放入您应用程序的目录中。通常要做的是将它们作为当前工作目录的相对路径来访问。换句话说,只需使用.,而不是dirname(__file__)

但是,如果你真的想这样做......问题是__file__是主脚本的文件名 - 当你运行捆绑的可执行文件时,这当然没用。您可以使用sys.argv[0]sys.executable,具体取决于您的使用情况。