python - cx_freeze 和导入模块

标签 python compilation executable cx-freeze python-module

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

所以,我的目录结构是:

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

在我导入的__init__.py

from submodule1 import bootstrap

从 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: no module named 'submodule1.submodule11'

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

我做错了什么?

最佳答案

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

关于python - cx_freeze 和导入模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25938252/

相关文章:

python - 从文件或 STDIN 读取

在 C/C++ 中创建库 - ld 找不到我的库

java - 运行已编译的 Java 程序就表示完成

Java 可执行应用程序

linux - Linux 中 t32.exe 文件的用途是什么?

python - Ubuntu下编译Cx-Freeze

python - 为什么在构建 python 模块时会出现此错误?

python pandas - 转换自定义聚合

python - Flink Streaming Python API - reduce() 产生增量结果而不是最终值

编译器执行顺序