我正在尝试用以下结构打包PySide2测试应用程序:
.
├── main.py
├── main.spec
└── wizardUI
├── 10.toolBoxBtns.ui
├── 11.toolBoxShrCt.ui
├── 12.propertyBox.ui
├── 13.printing.ui
├── 14.settings.ui
├── 15.coclusion.ui
├── 1.welcomePage.ui
├── 2.graphicsScene.ui
├── 3.graphicsSceneText.ui
├── 4.textDialog.ui
├── 5.codeDialog.ui
├── 6.graphicsSceneBox.ui
├── 7.graphicsScenePixmap.ui
├── 8.graphicsSceneShrCt.ui
├── 9.toolbox.ui
└── wizard.py
当我尝试运行可执行文件时,会出现以下错误:
FileNotFoundError: No such file or directory:'/home/artem/Desktop/testUI/dist/main/wizardUI'
这是我的wizard.py文件
from PySide2 import QtCore, QtWidgets
from PySide2.QtUiTools import QUiLoader
import os
class tutorWizard(QtWidgets.QWizard):
""" Contains introduction tutorial """
def __init__(self, parent=None):
super(tutorWizard, self).__init__(parent)
self.setWindowTitle("Introduction tutorial")
pages = self.findPages()
self.initPages(pages)
def findPages(self):
ui_files = []
cnt = 1
current_dir = os.path.dirname(os.path.realpath(__file__))
while len(ui_files) != 15:
for file in os.listdir(current_dir):
if file.startswith("{}.".format(cnt)):
ui_files.append(os.path.join(current_dir, file))
cnt += 1
return ui_files
def initPages(self, files):
loader = QUiLoader()
for i in files:
file = QtCore.QFile(str(i))
file.open(QtCore.QFile.ReadOnly)
file.reset()
page = loader.load(file)
file.close()
self.addPage(page)
main.py是:
from PySide2.QtWidgets import QApplication
from wizardUI.wizard import tutorWizard
import sys
app = QApplication(sys.argv)
window = tutorWizard()
window.show()
sys.exit(app.exec_())
和.spec文件是:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['/home/artem/Desktop/testUI'],
binaries=[],
datas=[],
hiddenimports=['PySide2.QtXml'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main')
a.datas += Tree('/home/artem/Desktop/testUI/wizardUI')
如果不在wizard.py中更改current_dir
变量,是否有办法解决此错误
您的代码存在以下问题:
您正在COLLECT之后将
Tree()
添加到a.datas,因此它不会在编译中使用,您必须在COLLECT之前添加它您不能再使用{uu file}获取目录路径,而必须使用sys._MEIPASS
我亦会作出以下改善:
考虑到上述情况,解决方案如下:
main.py
wizard.py
main.spec
另一种选择是使用^{} 而不是数据
resource.qrc
然后使用pyside2 rcc将其转换为.py:
然后您必须修改脚本:
main.py
wizard.py
最后,您的项目结构如下所示:
找到两种解决方案here
这是一个路径问题
简单地说,
我们应该使用此条件来获取ui文件的路径:
相关问题 更多 >
编程相关推荐