cx_freeze 问题与 mac 上的相对路径

Posted

技术标签:

【中文标题】cx_freeze 问题与 mac 上的相对路径【英文标题】:cx_freeze issue with relative path on mac 【发布时间】:2014-05-20 16:26:40 【问题描述】:

我在 mac 上遇到了 cx_freeze 相对路径逻辑的问题。我正在使用 python 3.3 和 pyqt5 并构建一个应用程序可移植的 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的日志

【问题讨论】:

【参考方案1】:

解决方法如下: 而不是

pixmap = QtGui.QPixmap('testimage.jpeg')

地点:

pixmap = QtGui.QPixmap(os.path.join(os.getcwd(),'image_insert_test-0.1.app/Contents/MacOS','testimage.jpeg')

这会从 .app 包中找到图像路径,但必须有一种更优雅的方式来做到这一点。

【讨论】:

以上是关于cx_freeze 问题与 mac 上的相对路径的主要内容,如果未能解决你的问题,请参考以下文章

使用 cx_Freeze 冻结成可执行文件后如何知道当前文件路径?

相对路径和绝对路径的区别

用pyqt4设置mac任务栏菜单然后应用cx_freeze

如何在使用 cx_Freeze 6.0b1 冻结的 Linux 上修复 python 3.7.3 脚本上的 numpy 依赖项路径?

使用 cx_freeze 冻结后的绝对路径(Qt5 / PySide2 App)

mac打包python + pyinstaller,解决相对路径问题