Python cx_冻结和导入模块

Python cx_冻结和导入模块,python,compilation,executable,cx-freeze,python-module,Python,Compilation,Executable,Cx Freeze,Python Module,我想使用cx\u freeze编译一个包含子模块的Python 3.3模块 因此,我的主要结构是: projectname/ __init__.py submodule1/ __init__.py bootstrap.py script1.py submodule11/ script2.py submodule2/ ... 在\

我想使用cx\u freeze编译一个包含子模块的Python 3.3模块

因此,我的主要结构是:

projectname/
     __init__.py
     submodule1/
          __init__.py
          bootstrap.py
          script1.py
          submodule11/
                   script2.py
     submodule2/
          ...
\uuuu init\uuuuu.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中,这个子模块不存在


我做错了什么?

因此,我找到了答案:每个模块的文件夹中都必须有一个
\uuu init\uuuuuuy.py
文件,以便python知道它是一个包,而不仅仅是某个文件夹。现在,我编译了我的项目。

以下是所有有同样问题的人的详细信息

以下是我的目录结构:

。
├─ dir1
│   ├─ __初始值
│   ├─ __pycache_uuu
│   ├─ 1.1千伏
│   └─ file1.py
├─ dir2
│   ├─ __初始值
│   ├─ __pycache__
│   ├─ 文件2.kv
│   └─ file2.py
├─ 图标文件
├─ 主电压(千伏)
├─ main.py
├─ setup.py
├─ 文夫
└─ Y
在每个目录模块中,我都添加了
\uuuu init\uuuuu.py

由于模块位于
dir1
dir2
中,因此这里是我的
\uuuu init\uuuuuuuuuuuy.py
文件

\uuuu init\uuuuu.py
目录1:

从dir1导入文件1
\uuuu init\uuuuu.py
在目录2中:

从dir2导入文件2
这是我的
setup.py
文件:

来自cx\u冻结导入设置,可执行
导入系统
#依赖项会自动检测,但可能需要
#微调。
buildOptions=dict(包=[“kivy”、“datetime”、“time”、“re”、“dir1.file1”、“dir2.file2”],
排除=[],包括_文件=[“main.kv”、“dir1/file1.kv”、“dir2/file2.kv”])
如果sys.platform=='win32',则base='Win32GUI',否则无
可执行文件=[
可执行文件('main.py',base=base,targetName='testApp',icon='favicon.ico')
]
安装程序(name='Test Apps',
版本='1.0',
description='这是使用Kivy测试Python应用程序',
options=dict(build\u exe=buildOptions),
可执行文件=可执行文件)
这是用Kivy测试GUI python应用程序,这就是为什么我在包中包括“Kivy”

编译后,您将拥有可执行文件的
Build
文件夹和子文件夹。在我的笔记本电脑中有
build/exe.macosx-10.15-x86\u 64-3.8


cz_freeze只编译python文件,同时我需要
file1.kv
file2.kv
进行GUI布局,因此,我在
build/exe.macosx-10.15-x86_64-3.8
中手动创建
dir1
dir2
,并将
file1.kv
file2.kv
移动到每个文件夹中。

您能显示冻结它的输出吗?它会很长的,把它放在一个垃圾桶里。你能解释一下吗?