从命令行在tkinter项目上正确使用pyInstaller
我想用pyinstaller打包我的应用程序。然而,我的项目已经相当复杂,我正在努力研究如何a)正确地从我自己的模块导入依赖项,以及b)在我的包中创建正确的结构 我的项目具有以下文件夹结构:从命令行在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
- 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分钟才能启动。好的-谢谢!一个文件包对我来说并不太重要,那么你可以删除所有的添加数据并编译到一个目录中,然后添加所有依赖项,所以我只是通过复制/粘贴手动添加依赖项?