2011-10-09 80 views
3

我试图使用python 2.6在OS X 10.6上使用py2app封装PySide应用程序。py2app IOError:[Errno 63]文件名太长:

问题我得到它,它似乎像py2app被困在一个循环和递归追加到它的自我相同的目录路径,然后它最终命中Python文件太长IOError如上。下面是堆栈跟踪我得到

 copying /Users/mlakewood/Documents/Programming/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6- 
universal/python2.6-standalone/app/collect/_builtinSuites/__init__.pyc -> /Users/mlakewood/Documents/Programming/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/_builtinSuites 
    Traceback (most recent call last): 
     File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/build_app.py", line 579, in _run 
     self.run_normal() 
     File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/build_app.py", line 650, in run_normal 
     self.create_binaries(py_files, pkgdirs, extensions, loader_files) 
     File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/build_app.py", line 718, in create_binaries 
     self.copy_package_data(item, self.collect_dir) 
     File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/build_app.py", line 809, in copy_package_data 
     copy_tree(pth, os.path.join(target_dir, fname)) 
     File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/util.py", line 501, in copy_tree 
     dry_run=dry_run, condition=condition)) 
     File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/util.py", line 501, in copy_tree 
     dry_run=dry_run, condition=condition)) 
     File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/util.py", line 501, in copy_tree 
     dry_run=dry_run, condition=condition)) 

喀嚓......(很多线的那都是一样的上方和下方的一个)

unsnip ...

File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/util.py", line 501, in copy_tree 
    dry_run=dry_run, condition=condition)) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/util.py", line 501, in copy_tree 
    dry_run=dry_run, condition=condition)) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/util.py", line 501, in copy_tree 
    dry_run=dry_run, condition=condition)) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/py2app/util.py", line 504, in copy_tree 
    preserve_times, update, dry_run=dry_run) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/file_util.py", line 165, in copy_file 
    _copy_file_contents(src, dst) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/file_util.py", line 47, in _copy_file_contents 
    fdst = open(dst, 'wb') 
IOError: [Errno 63] File name too long: '/Users/mlakewood/Documents/Programming/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect/_builtinSuites/__init__.pyc' 
> /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/distutils/file_util.py(47)_copy_file_contents() 
-> fdst = open(dst, 'wb') 

和下面是我的setup.py文件

""" 
This is a setup.py script generated by py2applet 

Usage: 
    python setup.py py2app 
""" 

from setuptools import setup 

APP = ['gui.py'] 
DATA_FILES = [] 
OPTIONS = {} 
#OPTIONS = {'argv_emulation': True} 

setup(
    app=APP, 
    data_files=DATA_FILES, 
    options={'py2app': OPTIONS}, 
    setup_requires=['py2app'], 
    includes=['PySide'] 
) 

回答

1

检查路径是否有可能导致无限递归的任何符号链接。打开终端应用程序,输入:

ls -l /Users/mlakewood/Documents/Programming/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect 

如果你看到这样的事情做ls -l后:

/Users/mlakewood/Documents/Programming/DataWrangler/build/bdist.macosx-10.6-universal/python2.6-standalone/app/collect -> ../../../../../build/ 

然后那是什么原因造成的问题。但是,在脚本搜索文件的方式中肯定会导致无限递归循环。

+1

嗯......在构建之前,没有任何文件在那里。构建失败后,没有任何SIM卡链接在该文件夹..所以我不*认为*多数民众赞成在这个问题...谢谢你的答案.. –

3

这个问题真的很老,但我昨晚遇到了同样的问题,并找到了解决方案。原来,对我来说,这个问题是py2app的副产品试图生成构建DIS包含的代码正在修建中引用模块的另一个文件夹内吨文件夹。

由于py2app默认放置构建DIST文件夹在当前工作目录,这意味着你就麻烦了,如果你在相同的工作目录编写构建脚本为其它模块由您的代码引用。

我用py2app选项,以迫使构建DIST在低于当前目录的父目录中创建目录解决了这一问题,但你可以把它们无论你选择,并实现同样的事情:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import py2app 
import sys 
from distutils.core import setup 
from os import getcwd 
from pathlib import Path 

sys.argv.append('py2app') 
setup(app=['<your_code.py>'], 
     options=dict(py2app=dict(bdist_base=str(Path(getcwd()).parent) 
     + '/build', dist_dir=str(Path(getcwd()).parent) + '/dist')))