【问题标题】:Handling dynamic import with py2exe使用 py2exe 处理动态导入
【发布时间】:2012-11-29 15:41:18
【问题描述】:

我在使用 py2exe 为我的应用程序准备 .exe 时遇到问题。 这个问题的根源是我创建的以下函数来使用来自的类 一个动态定义的模块。

def of_import(module, classname, country = None):
    '''
    Returns country specific class found in country module
    '''
    if country is None:
       country = CONF.get('simulation', 'country')
    _temp = __import__(country + '.' + module, 
                       globals = globals(), 
                       locals = locals(), 
                       fromlist = [classname], 
                       level=-1)
    return getattr(_temp, classname, None)

当我尝试使用以下方法加载某个类时:

self.InputTable = of_import('model.data', 'InputTable')

运行 .exe 时出现以下错误:

File "core\utils.pyc", line 900, in of_import
ImportError: No module named france.model.data

我应该准确地说 france.model.data.py 确实存在。

处理此问题的适当方法是什么?

这里是安装文件的链接:https://github.com/openfisca/openfisca/blob/dev/src/setup_x64.py

【问题讨论】:

  • 两个问题:france.model.data.py 模块文件是否存在,如果存在,此代码是否仅在您使用py2exe 编译后才会失败?
  • 相关代码将是您的 setup.py 用于 py2exe。我们能看到吗?它需要包含模块,因为 py2exe 不会自动发现它们
  • 我编辑了问题以回答@martineau 问题
  • 添加有问题的链接以回答@jdi
  • 由于该模块确实存在,这听起来像是搜索路径问题。尝试将 PY2EXE_VERBOSE 环境变量设置为 1 或 2,如 here 所述,以进一步诊断问题。

标签: python py2exe dynamic-import


【解决方案1】:

我有类似的设置

确保在 py2exe 的“包”部分添加动态模块

setup(windows=[{
                "script" : "openFisca.pyw"
                }], 
      options={"py2exe" : {"includes" : ["sip", "encodings.*", "numpy.*"],
                           "packages": ["france","tunisia"],
                           "dist_dir": dist_dir,
                           "bundle_files":3,
                           "dll_excludes": ["MSVCP90.dll"]
                           }}, 
      data_files=data_files)

【讨论】:

    猜你喜欢
    • 2019-03-23
    • 2019-12-10
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    相关资源
    最近更新 更多