2012-05-15 22 views
9

私はWindows用のzipをロールしようとすると、pytzがzoneinfoフォルダを紛失していることに気付きました。今、私はcx_freeze:library.zipにパッケージファイルを追加するにはどうすればよいですか?

7z a -xr!*.py* build\exe.win32-2.7\library.zip C:\Python27\Lib\site-packages\pytz 

setup.pyか何かからそれを達成するための適切な方法がありますつまり、私はpython setup.py build後に使用回避策がありますか?

+0

zip-includesオプションを試すことができます。 Docs:http://cx_freeze.readthedocs.org/en/latest/distutils.html –

+0

このオプションは、ビルドした場合にファイルを最後のZIPに追加するためのオプションです。私の場合、私はlibrary.zipについて話していますが、再配布の最終的なZIPはありません。 'エラー:セットアップスクリプトにエラーがあります:コマンド 'build_exe'には、あなたが提案したものを試してみると、そのようなオプション「zip-includes」はありません。通常、_packages_オプションを使用してそこにコードを組み込みますが、_pytz_にはデータファイルだけがあり、_pytz/zoneinfo_を追加しようとするとこのオプションは失敗します。 – mlt

+1

これを 'zip_includes'としてみてください。distutilsはダッシュ/アンダースコアについて面白いかもしれません。私は 'zip-includes'はlibrary.zipについて話していると思う - cx_Freezeは自動的に配布用のすべてを圧縮せず、もちろんあなた自身でそれを行うことができます。 –

答えて

12

あなたは以下の方法追加し、この問題を解決することができます:

build_exe_options = {"packages": ["os"], 
        "excludes": ["tkinter"], 
        "zip_includes": include_files(), 
        ... 
        } 

希望私はこの問題を解決してきました

+1

これは私のためにうまくいった、ありがとう!私は1つのマイナーな調整をしなければならなかった:skip_countそれ以外の場合は1が追加されます。それ以外の場合は、最初の引数をos.path.joinに吹き飛ばします。 – Motoma

+0

解決済みとマークしますか? – chwi

+0

hm、python 3.4。ゾーン情報は 'pytz \ zoneinfo'に含まれていますが見つかりません – Winand

2

に役立ちます:setup.pyファイルに、次に

def include_files(): 
     path_base = "C:\\Python27\\Lib\\site-packages\\pytz\\zoneinfo\\" 
     skip_count = len(path_base) 
     zip_includes = [(path_base, "pytz/zoneinfo/")] 
     for root, sub_folders, files in os.walk(path_base): 
      for file_in_root in files: 
       zip_includes.append(
         ("{}".format(os.path.join(root, file_in_root)), 
         "{}".format(os.path.join("pytz/zoneinfo", root[skip_count:], file_in_root)) 
         ) 
       )  
     return zip_includes 

をPython 3.4を以下のようにします。

import pytz 
setup(
    ... 
    options = {'build_exe': 
     {'include_files': (pytz.__path__[0],), ...}, 
    }, 
) 

次に、pytzはすべてのタイムゾーンで解凍されて含まれています

関連する問題