Distutils - 分发源代码+使用的模块

时间:2013-06-24 20:35:39

标签: python software-distribution

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

但是,我希望它包含主.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执行它。)

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

1 个答案:

答案 0 :(得分:1)

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


  

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

distutils不能这样做,也不打算这样做。这就是首先存在cx_Freezezc.buildout等内容的原因。

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

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


  

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

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

首先,您需要将数据文件传递到冻结步骤,以便将它们复制到.exe旁边的相应路径中,如cx_freeze FAQ所述。

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

为此,您需要在package_datadata_files中提供正确的路径。 data_files中的普通文件名列表可能会做错事,并会给您一个警告。你不应该这样做,而不是试图弄清楚为什么它以不同于你希望破坏的方式打破,最好做正确的事情。有关相关章节,请参阅the distutils docs


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