0

我正在尝试在我正在编写的程序中包含源代码分发。

但是,我希望它包含主.py文件和它使用的任何其他模块/包。

这是我的setup.py脚本:

from distutils.core import setup

setup_options = {
'name': 'somename', 'version': '1.11',
'author': 'developer', 'author_email': 'email', 'py_modules': ['mymodule'], 
}

setup(**setup_options)

但是,使用命令行运行python setup.py bdist只会创建一个带有mymodule.py.

此外,我拥有的另一个脚本(用于创建独立的 .exe)不包含数据文件:

import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(name = "somename",
    version = "1.11",
    description = "some description",
    executables = [Executable("mymodule.py", base=base)],
    data_files = ['helpData.pkl', 'General Public License - 3.0.pdf'])

(我正在使用 执行它python setup.py bdist --format=msi)。

如何为我的第一个设置脚本包含所有模块并为我的第二个脚本包含数据文件?谢谢!

4

1 回答 1

1

你在这里有两个不同的问题。


如何为我的第一个安装脚本包含所有模块

distutils不能这样做,也不打算这样做。这就是为什么像cx_Freeze,zc.buildout等这样的东西首先存在的原因。

如果您知道所需的确切模块集,则可以明确指定它们。

如果你想让 Python 为你收集它们,你需要做一些额外的工作。最简单的解决方案是使用依赖项查找器代码或任何您喜欢的cx_Freeze代码py2exe。(其中一些具有跳过 stdlib 模块的“半独立”标志;其他则需要您自己过滤。)


……并包含我的第二个脚本的数据文件?

试图将冻结步骤和安装程序构建步骤合并为一个,您会感到困惑。

首先,您需要将数据文件传递到冻结步骤,以便将它们复制到 .exe 旁边的适当相对路径,如cx_freeze常见问题解答中所述。

然后你可以给 bdist-msi 步骤打包文件。

为此,您需要在 apackage_data或 a中提供正确的路径data_files。一个简单的文件名列表data_files可能会做错事,并给你一个警告。你不应该那样做,与其试图弄清楚为什么它以与你希望它不同的方式破坏,不如做正确的事情。请参阅相关部分distutils文档


同时,每当distutils没有按照您的预期进行,并且您不知道为什么时,您应该使用调试标志运行它。即使它没有告诉答案,它至少会给你更多的信息,你可以发布到像 SO 这样的地方,所以它可以告诉其他人答案(他们可以告诉你)。只需在您的环境中设置DISTUTILS_DEBUG字符串"True",然后再次运行您的设置。

于 2013-06-24T20:55:38.240 回答