py2exe:WindowsError:[错误267]目录名无效

时间:2012-06-16 09:58:31

标签: python py2exe

setup.py

from distutils.core import setup
import py2exe

setup(console=['program.py'])

错误

Traceback (most recent call last):
File "program.py", line 427, in <module>
File "program.py", line 242, in __init__
WindowsError: [Error 267] The directory name is invalid: 'C:\\Users\\Bob\applications\\Program\\test\\v0.6\\dist\\library.zip/*.*'

目录名称是指名为library的zip文件,它位于dist文件夹中并在编译期间创建。

program.py第240-245行

 file_list = []
 root_dir = sys.path[0]
 for path in os.listdir(root_dir):
    full_path = os.path.join(root_dir, path).lower()
    if os.path.isfile(full_path) and full_path.endswith('txt'):
        # create list of (filename, dir) tuples
        file_list.append((path.lower(), full_path))

program.py第427行

gui = GuiTk(win)

任何想法导致问题的原因是什么?我使用Windows 7 64Bit和PortablePython 2.7.2.1来创建可执行文件。编译过程中没有其他错误。

1 个答案:

答案 0 :(得分:1)

您正在尝试列出sys.path()中的项目。来自docs:

  

sys.path指定搜索路径的字符串列表   模块。从环境变量PYTHONPATH初始化,再加上一个   与安装相关的默认值。

     

在程序启动时初始化,此列表的第一项,   path [0],是包含用于的脚本的目录   调用Python解释器。如果脚本目录不是   可用的(例如,如果以交互方式调用解释器,或者如果是   脚本是从标准输入读取的),path [0]是空字符串,   它指示Python首先搜索当前目录中的模块。   请注意,脚本目录在条目之前插入   由于PYTHONPATH而被插入。

对于像你这样的py2exe可执行文件,sys.path是一个包含library.zip路径的列表(该存档包含安装中可能需要的所有纯源模块py2exe)工作) 但您不能将zip存档用于os.listdir

的路径
>>> import os
>>> d = 'C:\\test.zip'
>>> os.listdir(d)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
WindowsError: [Error 267] El nombre del directorio no es válido: 'C:\\test.zip/*.*'
>>> 

可能你不是在寻找sys.path,而是在寻找变量名称所指的“当前目录”。
如果是这种情况,那么os.getcwd将完成工作