python – cx_freeze和导入模块

我想使用cx_freeze编译带有子模块的 Python 3.3模块.

所以,我的dir结构是:

projectname/
     __init__.py
     submodule1/
          __init__.py
          bootstrap.py
          script1.py
          submodule11/
                   script2.py
     submodule2/
          ...

__init__.py我导入

from submodule1 import bootstrap

并从引导程序

import submodule1.submodule11.script2

如果我运行init文件,一切都很好,并且正确执行带有子模块导入的脚本.

当我编译它时,我使用这个setup.py:

from cx_Freeze import setup,Executable
import sys

includes = []
excludes = ['Tkinter']
packages = ['submodule1','submodule2']
base = "win32gui"
setup(
    name = 'myapp',version = '0.1',description = 'app',author = 'user',options = {'build_exe': {'excludes':excludes,'packages':packages}},executables = [Executable('__init__.py',base=base)]
)

并在’projectname’目录中运行脚本.

但是如果我启动应用程序,我会得到ImportError:没有来自错误对话框的名为’submodule1.submodule11’的模块.

这是真的:在library.zip中,这个子模块不存在.

我做错了什么?

解决方法

所以,我找到了答案:每个模块必须在其文件夹中有一个__init__.py文件,因此python会知道它是一个包,而不仅仅是一些文件夹.现在我编译我的项目.

相关文章

我最近重新拾起了计算机视觉,借助Python的opencv还有face_r...
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Poolin...
记得大一学Python的时候,有一个题目是判断一个数是否是复数...
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic ...
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic v...
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic ...