Python:如何在 setup.py 中包含脚本的 exe 文件

use*_*624 1 python python-3.x

我正在尝试使用 Zed A.Shaw 的书《Learn Python the Hard way》自学 Python。在练习 46时。我应该创建一个项目框架(即创建 setup.py 文件、创建模块等)。然后做一个项目。

我必须将一个脚本放入我的 bin 目录中,该脚本可在我的系统中运行。我编写了一个简单的脚本,使用cxfreezeHello World!将其转换为 .exe 文件。

但是,当我尝试安装 setup.py 文件(即通过输入python setup.py installcmd)时,我无法安装此 .exe 文件,而是只能安装脚本 script.py 如何安装此 exe 文件。这是我的 setup.py 文件:

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

config = {
    'description':  'First project',#ex46
    'author':  'author',#
    'url':  '',#N/A
    'download_url':  '',#N/A
    "author_email":  "author_email@email.com"
    'versio':  '3.1',
    'install_requires': ['nose'],
    'packages': ['skeleton\quiz46','skeleton\\tests'],
    'scripts':  ['skeleton\\bin\helloscript.py','skeleton\\bin\helloscript.exe'],
    'name':  'quiz46'
}
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

UnicodeDecodeError
Run Code Online (Sandbox Code Playgroud)

我也尝试过放入 Skeleton\bin\helloscript.exe 但这给了我一个类似的错误!

我的操作系统是Windows 7,我使用的是Python 3.1。

同样,我想要的是 setup.py 也安装我的 .exe 文件,而不仅仅是它的脚本。

Mar*_*ill 5

我不认为该script选项旨在处理除文本文件之外的任何内容。如果您查看了分发(又名 setuptools)的源代码,如果它不是 python 脚本并且您使用的是 Python 3,则该write_script命令将尝试读取内容。您的exe 是一个二进制文件,而不是文本文件,并且可能会导致窒息。encode('ascii')cxfreeze

setuptools在安装过程中包含可执行脚本的更简单的选择是使用entry_points您的选项setup.py而不是scripts

entry_points={'console_scripts':['helloscript = helloscript:main'] }
Run Code Online (Sandbox Code Playgroud)

它将console_script自动包装您的原始helloscript.py脚本并创建一个exe(在 Windows 上)并将其安装到您的 PythonScript目录中。不需要使用类似的东西cxfreeze