背景
我正在使用 cx_Freeze 来构建我的应用程序的 Windows 和 Mac 包;该构建在两个平台上都成功执行,导致 Windows 上的 msi 和 Mac 上的 dmg/app 可以安装。
问题
当我在任一平台上运行应用程序时都会出现问题。我得到错误:
AttributeError: 'module' object has no attribute 'DateTime'
这是由 site-packages/sqlobject/col.py 第 66 行触发的:
DateTimeType = type(DateTime.DateTime())
我从未安装过 mx DateTime,也从未在通过 IDE 或脚本运行应用程序时遇到任何问题,但以某种方式与 cx_Freeze 捆绑正在改变一些东西。我假设 DateTime 的导入 (col.py) 与 datetime 的导入混淆了,但我不确定。
解决方法:
我可以通过编辑 col.py 以mxdatetime_available = False
在使用 DateTime.DateTime() 失败之前进行设置,以便它永远不会尝试使用 mxDateTime。但是,在本地修改底层库源显然不是我想做和维护的事情。
有谁知道我在这里可能会丢失什么以避免第三方库的错误导入?我的 hack 不是我可以提交给 SQLObject 项目的有效修复程序,因为它删除了每个人的功能,但它不应该从一开始就进入该代码路径,我只是看不到根本原因。
我的 setup.py (为简洁起见删除了一些位)
import sys
from cx_Freeze import Executable, setup
cx_freeze_target = [Executable(script="main.py")]
setup_dict = dict(
name="myapp",
version="0.0.3",
author="me",
description="An app",
license="Undecided",
packages=['myapp'],
executables=cx_freeze_target
)
def main():
setup(**setup_dict)
if __name__ == '__main__':
main()