2011-10-09 77 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')))