Đường dẫn tuyệt đối sau khi đóng băng với cx_freeze (Ứng dụng Qt5 / PySide2)


8

Vấn đề:

Tôi không thể phân phối một cx_freeze được tạo .exe cho một máy khác, vì có vẻ như exe chứa các tham chiếu đến các đường dẫn tuyệt đối trên máy đã tạo .exe. Tôi cũng phải bao gồm vcr nb140.dll direktly, vì không "include_msvcr": Truesao chép tệp.

Thiết lập

  • Thắng 10
  • Python 3.7.2
  • cx_freeze 6.0
  • KHÔNG virtualenv (dường như không quan trọng, tôi đã thử nó với venv)

Câu hỏi tương tự

Câu hỏi này đã được hỏi trước đây trong một hình thức tương tự, nhưng không có câu trả lời: cx_Freeze sao chép đường dẫn

Nhật ký lỗi

Khi bắt đầu tập lệnh, các lỗi sau xuất hiện (không thể sao chép / dán từ cửa sổ, vì vậy tôi chia sẻ hình ảnh). Bạn có thể thấy các tham chiếu đến một đường dẫn tuyệt đối C:\Program Files (x86)\Python....rõ ràng không có trên máy khác.

nhật ký lỗi cx_freeze

kịch bản đóng băng

from os.path import dirname
from cx_Freeze import setup, Executable
from config import settings
import os.path
import sys
import glob

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
DEPENDENCY_DIR = os.path.join(os.getcwd(), 'dependencies')
os.environ['TCL_LIBRARY'] = os.path.join(DEPENDENCY_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(DEPENDENCY_DIR, 'tcl', 'tk8.6')

packages = ["sepa", "datev", "atexit", "shiboken2", "PySide2"]
includes = []
excludes = ["Pyside2.Qt5WebEngineCore.dll"]
includefiles = ['qt', 'settings', 'config', os.path.join(DEPENDENCY_DIR, 'DLLs', 'tk86t.dll'),
             os.path.join(DEPENDENCY_DIR, 'DLLs', 'tcl86t.dll'), os.path.join(DEPENDENCY_DIR, 'DLLs', 'vcruntime140.dll')]

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": packages,
                     "excludes": excludes,
                     "includes": includes,
                     "include_files": includefiles,                     
                     "optimize": 2,
                     "include_msvcr": True}



# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(name="sepa_converter",
      version=settings.version,
      description="Programm zum Konvertiern von SEPA Dateien zum importieren in Buchhaltungsprogramme",
      options={"build_exe": build_exe_options},
      executables=[Executable("export_gui.py", base=base)])

#Debug DLLs von Pyside2 löschen
tmp = glob.glob("build/*/Pyside2/*d.dll")
for i in tmp:
    os.remove(i)

tmp = glob.glob("build/*/Pyside2/*/*/*d.dll")
for i in tmp:
    os.remove(i)

filelist = ['Qt5WebEngineCore.dll', 'icudt54.dll', 'opengl32sw.dll', 'Qt5Designer.dll', 'd3dcompiler_47.dll', 'Qt5Quick.dll']
for f in filelist:
    for i in glob.glob("build/*/Pyside2/%s" % f):
        os.remove(i)


1
Tôi đang có cùng một vấn đề.
jonathan9879

Câu trả lời:


1

Việc hạ cấp xuống cx_freeze 5.1.1 đã giải quyết vấn đề cho tôi.


Cuối cùng tôi đã quản lý để cài đặt 5.1.1 (phải cài đặt trực tiếp từ git, PyPi không cài đặt), nhưng .exe không làm gì cả. Nhấp vào nó -> Không có gì. Hoàn hảo để gỡ lỗi.
Harper

Xin chào @Lawrence, tôi đã trao tiền thưởng cho bạn, vì câu trả lời của bạn đã đưa tôi đi đúng hướng, ngay cả khi một số phần bị thiếu cho giải pháp cuối cùng. Chúc mừng và ty!
Harper

1

Các bước để làm cho nó hoạt động:

  1. Cài đặt Python 3.6 32-Bit . Các phiên bản khác không làm việc cho tôi. 32-Bit dường như rất quan trọng đối với các phần Qt / Tk của skript, 3.6 rất quan trọng đối với cx-freeze 5.1.1.
  2. Cài đặt cx-freeze == 5.1.1
  3. Xây dựng .exe.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.