2014-01-14 46 views
2

我有一個python應用程序(主要是使用pyqt完成的)。我使用py2exe創建可執行文件,我的setup.py看起來像這樣在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文件夾中。我不知道如何做到這一點。誰能建議如何?

+0

看看'shutil'包。 – fuesika

回答

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與列表類似,而不是直接列表。

相關問題