我在mac上遇到cx_freeze相对路径逻辑问题。我正在使用python 3.3和pyqt5并构建一个app便携式windows - mac。
以下简单脚本只是将图像作为QPixmap加载到QLabel中。
从控制台启动时,代码在Windows和Mac上运行良好,在Windows和Mac上构建。 exe在Windows上运行没有任何问题。 应用程序(MacOSX)不加载图像,dmg相同。
我觉得它与相对路径设置有关。这种信念的原因如下: - 如果我尝试加载.app,则不会显示图像 - 如果我将testimage.jpeg复制粘贴到.app所在的同一文件夹中,它将加载图像。
我确实在设置中尝试了include_files而没有结果。
有人可以帮忙吗?
以下是脚本: 首先是文件image_insert_test.py:
import sys
from PyQt5.QtWidgets import (QApplication, QDialog,
QErrorMessage, QLabel, QWidget, QVBoxLayout )
from PyQt5.QtCore import pyqtSlot, QDir, Qt
from PyQt5 import QtGui
class Window(QDialog):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.fill_box2 = QLabel()
pixmap = QtGui.QPixmap('testimage.jpeg')
self.fill_box2.setPixmap(pixmap.scaled(100,100,Qt.KeepAspectRatio))
# set the layout
layout = QVBoxLayout()
layout.addWidget(self.fill_box2)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Window()
main.setWindowTitle('test gui')
main.show()
sys.exit(app.exec_())
文件setup.py:
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
options = {
'build_exe': {
"includes": ["matplotlib.backends.backend_macosx"] ,
"include_files" : ["testimage.jpeg"]
}
}
executables = [
Executable('image_insert_test.py', base=base)
]
setup(name='image_insert_test',
version='0.1',
description='Sample image_insert_test script',
options=options,
executables=executables
)
这是cx_freeze的日志bdist_mac http://pastebin.com/77uU4Exr
答案 0 :(得分:0)
解决方法如下: 而不是
pixmap = QtGui.QPixmap('testimage.jpeg')
位:
pixmap = QtGui.QPixmap(os.path.join(os.getcwd(),'image_insert_test-0.1.app/Contents/MacOS','testimage.jpeg')
这会破坏.app包中的图像路径,但必须有一种更优雅的方式来实现它。