cx_freeze:如何将包文件添加到library.zip中?

时间:2012-05-15 18:45:02

标签: cx-freeze pytz

我注意到当我尝试为Windows滚动zip时,pytz错过了zoneinfo文件夹。现在我有一个在python setup.py build之后使用的解决方法,即

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

有没有一种正确的方法可以从setup.py或其他东西实现这一目标?

2 个答案:

答案 0 :(得分:12)

你可以解决这个问题,添加以下方法:

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

然后,进入setup.py文件:

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

希望有所帮助

答案 1 :(得分:2)

我已经通过以下方式在Python 3.4中解决了这个问题

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

然后pytz包含解压缩及其所有时区