【问题标题】:Copy an entire folder in a setup.py file在 setup.py 文件中复制整个文件夹
【发布时间】:2014-01-14 20:39:13
【问题描述】:

我有一个 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 文件夹中的文档。我不知道该怎么做。任何人都可以建议如何?

【问题讨论】:

  • 看看shutil-package。

标签: python-2.7 pyqt4 py2exe


【解决方案1】:

作为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 不能很好地处理类似列表而不是直接列表。

【讨论】:

  • 您好,非常感谢。能否请您解释一下我们如何指定 Python 的 lib 目录并复制我们的扩展所需的一些库?
  • 我在setup() 中使用了data_files,就像他的:setup( ..., data_files=[ (python_lib_dir, libs_list),] )
猜你喜欢
  • 2011-07-04
  • 2021-03-14
  • 1970-01-01
  • 2016-12-30
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多