58

我在 Windows 系统上使用 Python 2.6 和 cx_Freeze 4.1.2。我创建了 setup.py 来构建我的可执行文件,一切正常。

当 cx_Freeze 运行时,它会将所有内容移动到build目录中。我有一些其他文件希望包含在我的build目录中。我怎样才能做到这一点?这是我的结构:

src\
    setup.py
    janitor.py
    README.txt
    CHNAGELOG.txt
    helpers\
        uncompress\
            unRAR.exe
            unzip.exe

这是我的片段:

设置

( name='Janitor',
  version='1.0',
  description='Janitor',
  author='John Doe',
  author_email='john.doe@gmail.com',
  url='http://www.this-page-intentionally-left-blank.org/',
  data_files = 
      [ ('helpers\uncompress', ['helpers\uncompress\unzip.exe']),
        ('helpers\uncompress', ['helpers\uncompress\unRAR.exe']),
        ('', ['README.txt'])
      ],
  executables =
      [
      Executable\
          (
          'janitor.py', #initScript
          )
      ]
)

我似乎无法让它工作。我需要一个MANIFEST.in文件吗?

4

4 回答 4

112

弄清楚了。

from cx_Freeze import setup,Executable

includefiles = ['README.txt', 'CHANGELOG.txt', 'helpers\uncompress\unRAR.exe', , 'helpers\uncompress\unzip.exe']
includes = []
excludes = ['Tkinter']
packages = ['do','khh']

setup(
    name = 'myapp',
    version = '0.1',
    description = 'A general enhancement utility',
    author = 'lenin',
    author_email = 'le...@null.com',
    options = {'build_exe': {'includes':includes,'excludes':excludes,'packages':packages,'include_files':includefiles}}, 
    executables = [Executable('janitor.py')]
)

笔记:

  • include_files必须包含setup.py脚本的“仅”相对路径,否则构建将失败。
  • include_files可以是字符串列表,即一堆文件及其相对路径
  • include_files可以是一个元组列表,其中元组的前半部分是带有绝对路径的文件名,后半部分是带有绝对路径的目标文件名。

(当缺少文档时,请咨询 Kermit the Frog)

于 2010-05-23T17:31:24.417 回答
6

有一个更复杂的例子:cx_freeze - wxPyWiki

所有选项缺少的文档位于:cx_Freeze (Internet Archive)

cx_Freeze不过,与Py2Exe.

替代品:包装 | 鼠标与。Python

于 2011-10-19T09:18:00.773 回答
2

您还可以创建单独的脚本,在构建后复制文件。这是我用来在 Windows 上重建应用程序的工具(您应该安装“用于 win32 的 GNU 实用程序”以使“cp”正常工作)。

构建.bat:

cd .
del build\*.* /Q
python setup.py build
cp -r icons build/exe.win32-2.7/
cp -r interfaces build/exe.win32-2.7/
cp -r licenses build/exe.win32-2.7/
cp -r locale build/exe.win32-2.7/
pause
于 2014-06-08T08:56:53.330 回答
2

为了找到您的附加文件 ( include_files = [-> your attached files <-]),您应该在 setup.py 代码中插入以下函数:

def find_data_file(filename):
    if getattr(sys, 'frozen', False):
        # The application is frozen
        datadir = os.path.dirname(sys.executable)
    else:
        # The application is not frozen
        # Change this bit to match where you store your data files:
        datadir = os.path.dirname(__file__)

    return os.path.join(datadir, filename)

请参阅 cx-freeze:使用数据文件

于 2016-08-12T11:23:56.430 回答