微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cx_freeze 创建 exe 但遇到:zipimport.ZipImportError: 运行时找不到模块“mainprogram__main__”

如何解决cx_freeze 创建 exe 但遇到:zipimport.ZipImportError: 运行时找不到模块“mainprogram__main__”

我有一个这样的存储库结构:

MinimalExample
├── _buildscripts
│   ├── setup.py
│
├── _MainProgram
│   ├──_modules1
│   │  ├──timescalculation.py
│   │
│   ├──_modules2
│   │  ├──divisioncalculation.py
│   │
│   │──mainprogram.py
│
│──README.md

我的 setup.py 是:

import sys
import setuptools
import os
from pathlib import Path
from cx_Freeze import setup,Executable

# adding this path to sys so modules are searched from it
sys.path.append(os.path.abspath("../MainProgram")) # maybe this causes the problem?

# just to see what is in sys
for dire in sys.path:
    print(dire)

# PATH DEFinitioNS
mainprogram_path = Path(os.path.abspath('MainProgram/mainprogram.py')) # OR maybe this causes the problem?

# OTHER BUILD_EXE OPTIONS DEFinitioNS
includes = ["os"]
packages = ["modules1","modules2"]
replace_paths = [("*","")]
base = None

# EXECUTABLE DEFinitioN
executables = [Executable(
                            script=mainprogram_path,shortcut_name = "Example",shortcut_dir="DesktopFolder",base=base
                            )
                ]

# SETUP DEFinitioN
setup(  name = "ExampleProgram",author = "Me",version = "1.0",options = {"build_exe": {
                                "packages": packages,"includes": includes,"optimize": 1,"replace_paths": replace_paths},"bdist_msi": {
                        "upgrade_code": "{9446b224-e087-4502-a791-5bd132065ccd}"} # for example use only
                    },executables = executables)

这里是 mainprogram.py

from modules1 import timescalculation
from modules2 import divisioncalculation
import time

def main():
    num1 = float(input("Give first num: "))
    num2 = float(input("Give second num: "))
    times = timescalculation.timescalculation(num1,num2)
    print(num1," times ",num2,"is",times)
    division = divisioncalculation.divisioncalculation(num1," devided by ",division)
    time.sleep(5)
    
if __name__ == "__main__":
    main()

modules1 -> timescalculation.py

def timescalculation(num1,num2):
    return num1 * num2

modules2 -> Divisioncalculation.py

def divisioncalculation(num1,num2):
    return num1 / num2

代码只是为了重复我遇到的问题。但是 setup.py 几乎就是我正在使用的。

运行 python setup.py bdist_msi 后,脚本构建成功,但从控制台运行 exe 文件后,我得到:

Traceback (most recent call last):
  File "__startup__.py",line 74,in run
  File "Console.py",line 33,in run
  File "<frozen zipimport>",line 159,in get_code
  File "<frozen zipimport>",line 721,in _get_module_code
zipimport.ZipImportError: can't find module 'mainprogram__main__'

问题:

这是因为我从不同的文件夹运行 setup.py 吗?是否可以从现在的位置运行它?

如果可以从与 setup.py 不同的文件夹运行 mainprogram.py,我该怎么做?

但是如果我从 mainprogram.py 所在的同一个文件夹运行安装程序,我没有这个问题,但我想把它放在它自己的文件夹中,里面有 icon.ico 和其他东西。这是我第一次使用 cx_freeze,也许将 setup.py 放在不同的文件夹中只是违反惯例?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。