2012-06-16 3 views
0

setup.pypy2exe: WindowsError: [Ошибка 267] Имя каталога недействителен

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 который находится в папке dist и создается во время компиляции.

линии 240 - 246 из program.py

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)) 

линии 427 program.py

gui = GuiTk(win) 

Любые идеи, что вызывает проблему? Я использую Windows 7 64Bit и PortablePython 2.7.2.1 для создания исполняемого файла. Во время процедуры компиляции других ошибок нет.

+0

Возможно, это причина: «... \\ library.zip/*.*» – Dhara

ответ

1

Вы пытаетесь перечислить элементы в sys.path(). Из документации:

sys.path A list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.

As initialized upon program startup, the first item of this list, path[0], is the directory containing the script that was used to invoke the Python interpreter. If the script directory is not available (e.g. if the interpreter is invoked interactively or if the script is read from standard input), path[0] is the empty string, which directs Python to search modules in the current directory first. Notice that the script directory is inserted before the entries inserted as a result of PYTHONPATH.

В случае py2exe исполняемого файла, как ваши, sys.path список, содержащий путь к library.zip (архив, который содержит все исходные модули чистых py2exe найти в установке, которые могут быть необходимы для вашего исполняемого файла для работы).
Но вы не можете использовать почтовый архив для пути для 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 сделает работу

+0

Я не хочу использовать архив почтового индекса вообще. Он создается во время p2exe. Для чего он используется? – orschiro

+0

Это должно иметь какое-то отношение к 'root_dir = sys.path [0]'. Когда я раскомментирую это, а также цикл for и создаю манекен с файлом_list.append ('test'), тогда exe работает плавно. – orschiro

+0

Спасибо, это было! Но вместо 'os.getcwd()', который приводит к ошибке вне диапазона, теперь я использую 'root_dir = os.path.dirname (os.path.abspath (". "))', Поскольку для py2exe '__file__' не может использоваться. С уважением – orschiro

Смежные вопросы