复制setup.py文件中的整个文件夹

时间:2014-01-14 20:39:13

标签: python-2.7 pyqt4 py2exe

我有一个python应用程序(主要使用pyqt完成)。我使用py2exe来创建可执行文件,我的setup.py看起来像这样

from distutils.core import setup import py2exe import os 
includes=["sqlite3","sip","PyQt4","PyQt4.QtGui","PyQt4.QtCore"]
excludes=[] 
packages=[] 
dll_excludes=['libgdk-win32-1.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll', 'tk84.dll']

setup(

      options={"py2exe": {"compressed": 2,
                          "optimize": 2,
                          "includes": includes,
                          "excludes": excludes,
                          "packages": packages,
                          "dll_excludes": dll_excludes,
                          "bundle_files": 2,
                          "dist_dir": "dist",
                          "xref": False,
                          "skip_archive": False,
                          "ascii": False,
                          "custom_boot_script": '',
                          }
               },
      windows=['myapplication.py'],
      data_files = [('', [r'c:\configuration.ini',
                          r'c:readme.txt'
                          ])]

      )

现在data_files条目允许我将几个文件复制到'dist'文件夹,但是我还要复制我的文档文件夹,文档文件夹包含一大堆文件,html,图像,pdf,大约2MB存储在my_app \ docs文件夹中的文档。我不知道该怎么做。任何人都可以提出建议吗?

1 个答案:

答案 0 :(得分:0)

您将不得不使用自定义功能在setup.py中执行此操作:

def copy_dir():
    dir_path = 'YOUR_DIR_HERE'
    base_dir = os.path.join('MODULE_DIR_HERE', dir_path)
    for (dirpath, dirnames, files) in os.walk(base_dir):
        for f in files:
            yield os.path.join(dirpath.split('/', 1)[1], f)

然后我将其设为我的package_data

package_data = {
    '' : [f for f in copy_dir()]
},

请注意,如果您使用data_files,这也应该有用。确保你将该函数作为列表理解的一部分来调用 - 显然setuptools与list-alikes不同,而不是直接列表。