我想出了如何让它工作。我将我的“头”框架文件放在 setup.py 文件的“包含”列表中。然后,我有一个编译好的运行器,它使用 imp 模块动态加载常规 Python 脚本,这些脚本调用该头框架文件。这正是我一直在寻找的那种隐藏的框架,但可以访问的 API。
例如,假设我们有一个名为“framework”的目录,其中包含一个包含所有 API 调用的主文件“foo”。py2exe setup.py 文件中的行如下所示:
includes = ['framework.foo', 'some_other_module', 'etc']
然后我为这个运行脚本制定一个目标:
FrameworkTarget = Target(
# what to build
script = "run_framework.py",
dest_base = "run_framework"
)
然后将目标添加到 setup.py 脚本中的 setup() 命令中:
console = [FrameworkTarget],
编译的运行器脚本从命令行传递“测试套件”脚本的名称:
test_suite_name = sys.argv[1]
file_name = test_suite_name + ".py"
path_name = os.path.join(os.getcwd(), file_name)
print "Loading source %s at %s"%(file_name, path_name)
module = imp.load_source(file_name, path_name )
然后,在 imp.load_source() 命令调用的文件中,我有这个:
import framework.foo
当我的包含中没有“framework.foo”时,它找不到framework.foo 的编译版本。也许将来有人会发现这很有用。我不知道如果没有 Stackoverflow,我是否可以做一件有用的事情!