从命令行在tkinter项目上正确使用pyInstaller

从命令行在tkinter项目上正确使用pyInstaller,tkinter,import,pyinstaller,Tkinter,Import,Pyinstaller,我想用pyinstaller打包我的应用程序。然而,我的项目已经相当复杂,我正在努力研究如何a)正确地从我自己的模块导入依赖项,以及b)在我的包中创建正确的结构 我的项目具有以下文件夹结构: - BUILD - DO_NOT_SHARE - encrypted_login.py - library_ZZ - ZZ_serial.py - ZZ_utilities.py .. - GUI_X - images - Image.png

我想用pyinstaller打包我的应用程序。然而,我的项目已经相当复杂,我正在努力研究如何a)正确地从我自己的模块导入依赖项,以及b)在我的包中创建正确的结构

我的项目具有以下文件夹结构:

- BUILD
- DO_NOT_SHARE
    - encrypted_login.py
- library_ZZ
    - ZZ_serial.py
    - ZZ_utilities.py
    ..
- GUI_X
    - images
        - Image.png
        ..
    - GUI_X_V2.py
    - icon.ico
    - requirements.txt
我的主要应用程序是GUI_X_V2.py。从那里,我从library_ZZ导入标准软件包、与pip一起安装的其他软件包,如pymongo和我自己的模块。有关如何导入的示例:

import os, sys
from pymongo import MongoClient

sys.path.append(".." + os.sep + "library_ZZ")
sys.path.append(".." + os.sep + "DO_NOT_SHARE")

from ZZ_serial import open_serial_port
from ZZ_utilities import shift_bit
这是我在文件夹构建中的调用,我希望生成的包在这里

pyinstaller --onefile --icon=../GUI_X/icon.ico --add-data ../library_ZZ;library_ZZ --add-data ../DO_NOT_SHARE;DO_NOT_SHARE ../GUI_X/GUI_X_V2.py
但是,当然,在执行BUILD/dist/GUI_X_V2.exe时,我得到一个错误,即无法找到模块ZZ_serial。我可以通过在GUI_X_V2.py中添加以下内容来解决这一问题:

from library_ZZ.ZZ_serial import open_serial_port
我不想这样,如果可能的话,我想让我的代码保持原样。在我的原始结构中,库的级别高于一级,我希望为许多应用程序自动打包(可能创建一次.spec文件)。我只是不知道如何建立正确的结构

此外,当我提到修复程序时,我无法执行.exe,因为在ZZ_serial.py中导入的一个包(pySerial-导入为“导入序列”)不包括在包中。我尝试在.spec文件中使用以下代码:

from PyInstaller.utils.hooks import collect_submodules

import_serial = collect_submodules("serial")
total_hidden_imports = import_serial

a = Analysis(hiddenimports=total_hidden_imports,
)

这是可行的,但当我尝试使用collect_子模块(“timeit”)为另一个包执行此操作时,我无法管理下一个错误(在ZZ_serial.py中使用:from timeit import default_timer as timer)。我根本没有尝试包含的图像文件夹。一定有更好的方法来实现这一点,对吗?

如果您的项目很大,将其全部绑定到一个文件可能需要2-5分钟才能启动。好的-谢谢!一个文件包对我来说并不太重要,那么你可以删除所有的添加数据并编译到一个目录中,然后添加所有依赖项,所以我只是通过复制/粘贴手动添加依赖项?