【发布时间】:2016-05-11 20:53:58
【问题描述】:
背景
我正在使用 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 的导入混淆了,但我不确定。
解决方法:
在使用 DateTime.DateTime() 失败之前,我可以通过编辑 col.py 来设置 mxdatetime_available = False 来让一切正常工作,这样它就不会尝试使用 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()
【问题讨论】:
标签: python datetime cx-freeze sqlobject