PyInstaller support
Currently builds but errors while executing
This commit is contained in:
parent
5827a968b2
commit
5b88624051
@ -1,95 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import itertools
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
import toml
|
||||
from PyInstaller.__main__ import run
|
||||
|
||||
if sys.platform == "win32":
|
||||
from PyInstaller.utils.win32.versioninfo import (FixedFileInfo, SetVersion, StringFileInfo, StringStruct,
|
||||
StringTable, VarFileInfo, VarStruct, VSVersionInfo)
|
||||
|
||||
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
"""Load pyproject.toml information."""
|
||||
project = toml.load(os.path.join(SCRIPT_PATH, "pyproject.toml"))
|
||||
poetry = project["tool"]["poetry"]
|
||||
|
||||
"""Configuration options that may be changed or referenced often."""
|
||||
DEBUG = False # When False, removes un-needed data after build has finished
|
||||
NAME = poetry["name"]
|
||||
AUTHOR = "vinetrimmer contributors"
|
||||
VERSION = poetry["version"]
|
||||
ICON_FILE = "assets/icon.ico" # pass None to use default icon
|
||||
ONE_FILE = False # Must be False if using setup.iss
|
||||
CONSOLE = True # If build is intended for GUI, set to False
|
||||
ADDITIONAL_DATA = [
|
||||
# (local file path, destination in build output)
|
||||
]
|
||||
HIDDEN_IMPORTS = []
|
||||
EXTRA_ARGS = [
|
||||
"-y", "--win-private-assemblies", "--win-no-prefer-redirects"
|
||||
]
|
||||
|
||||
"""Prepare environment to ensure output data is fresh."""
|
||||
shutil.rmtree("build", ignore_errors=True)
|
||||
shutil.rmtree("dist/vinetrimmer", ignore_errors=True)
|
||||
# we don't want to use any spec, only the configuration set in this file
|
||||
try:
|
||||
os.unlink(f"{NAME}.spec")
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
"""Run PyInstaller with the provided configuration."""
|
||||
run([
|
||||
"vinetrimmer/vinetrimmer.py",
|
||||
"-n", NAME,
|
||||
"-i", ["NONE", ICON_FILE][bool(ICON_FILE)],
|
||||
["-D", "-F"][ONE_FILE],
|
||||
["-w", "-c"][CONSOLE],
|
||||
*itertools.chain(*[["--add-data", os.pathsep.join(x)] for x in ADDITIONAL_DATA]),
|
||||
*itertools.chain(*[["--hidden-import", x] for x in HIDDEN_IMPORTS]),
|
||||
*EXTRA_ARGS
|
||||
])
|
||||
|
||||
if sys.platform == "win32":
|
||||
"""Set Version Info Structure."""
|
||||
VERSION_4_TUP = tuple(map(int, f"{VERSION}.0".split(".")))
|
||||
VERSION_4_STR = ".".join(map(str, VERSION_4_TUP))
|
||||
SetVersion(
|
||||
"dist/{0}/{0}.exe".format(NAME),
|
||||
VSVersionInfo(
|
||||
ffi=FixedFileInfo(
|
||||
filevers=VERSION_4_TUP,
|
||||
prodvers=VERSION_4_TUP
|
||||
),
|
||||
kids=[
|
||||
StringFileInfo([StringTable(
|
||||
"040904B0", # ?
|
||||
[
|
||||
StringStruct("Comments", NAME),
|
||||
StringStruct("CompanyName", AUTHOR),
|
||||
StringStruct("FileDescription", "Widevine DRM downloader and decrypter"),
|
||||
StringStruct("FileVersion", VERSION_4_STR),
|
||||
StringStruct("InternalName", NAME),
|
||||
StringStruct("LegalCopyright", f"Copyright (C) 2019-2021 {AUTHOR}"),
|
||||
StringStruct("OriginalFilename", ""),
|
||||
StringStruct("ProductName", NAME),
|
||||
StringStruct("ProductVersion", VERSION_4_STR)
|
||||
]
|
||||
)]),
|
||||
VarFileInfo([VarStruct("Translation", [0, 1200])]) # ?
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
if not DEBUG:
|
||||
shutil.rmtree("build", ignore_errors=True)
|
||||
# we don't want to keep the generated spec
|
||||
try:
|
||||
os.unlink(f"{NAME}.spec")
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
37
poetry.lock
generated
37
poetry.lock
generated
@ -1355,7 +1355,6 @@ cleo = ">=2.1.0,<3.0.0"
|
||||
crashtest = ">=0.4.1,<0.5.0"
|
||||
dulwich = ">=0.21.2,<0.22.0"
|
||||
fastjsonschema = ">=2.18.0,<3.0.0"
|
||||
importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""}
|
||||
installer = ">=0.7.0,<0.8.0"
|
||||
keyring = ">=24.0.0,<25.0.0"
|
||||
packaging = ">=23.1"
|
||||
@ -1625,27 +1624,32 @@ requests = "*"
|
||||
|
||||
[[package]]
|
||||
name = "pyinstaller"
|
||||
version = "4.5.1"
|
||||
version = "5.13.2"
|
||||
description = "PyInstaller bundles a Python application and all its dependencies into a single package."
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
python-versions = "<3.13,>=3.7"
|
||||
files = [
|
||||
{file = "pyinstaller-4.5.1-py3-none-macosx_10_13_universal2.whl", hash = "sha256:ecc2baadeeefd2b6fbf39d13c65d4aa603afdda1c6aaaebc4577ba72893fee9e"},
|
||||
{file = "pyinstaller-4.5.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:4d848cd782ee0893d7ad9fe2bfe535206a79f0b6760cecc5f2add831258b9322"},
|
||||
{file = "pyinstaller-4.5.1-py3-none-manylinux2014_i686.whl", hash = "sha256:8f747b190e6ad30e2d2fd5da9a64636f61aac8c038c0b7f685efa92c782ea14f"},
|
||||
{file = "pyinstaller-4.5.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c587da8f521a7ce1b9efb4e3d0117cd63c92dc6cedff24590aeef89372f53012"},
|
||||
{file = "pyinstaller-4.5.1-py3-none-win32.whl", hash = "sha256:fed9f5e4802769a416a8f2ca171c6be961d1861cc05a0b71d20dfe05423137e9"},
|
||||
{file = "pyinstaller-4.5.1-py3-none-win_amd64.whl", hash = "sha256:aae456205c68355f9597411090576bb31b614e53976b4c102d072bbe5db8392a"},
|
||||
{file = "pyinstaller-4.5.1.tar.gz", hash = "sha256:30733baaf8971902286a0ddf77e5499ac5f7bf8e7c39163e83d4f8c696ef265e"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-macosx_10_13_universal2.whl", hash = "sha256:16cbd66b59a37f4ee59373a003608d15df180a0d9eb1a29ff3bfbfae64b23d0f"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8f6dd0e797ae7efdd79226f78f35eb6a4981db16c13325e962a83395c0ec7420"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-manylinux2014_i686.whl", hash = "sha256:65133ed89467edb2862036b35d7c5ebd381670412e1e4361215e289c786dd4e6"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:7d51734423685ab2a4324ab2981d9781b203dcae42839161a9ee98bfeaabdade"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:2c2fe9c52cb4577a3ac39626b84cf16cf30c2792f785502661286184f162ae0d"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c63ef6133eefe36c4b2f4daf4cfea3d6412ece2ca218f77aaf967e52a95ac9b8"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:aadafb6f213549a5906829bb252e586e2cf72a7fbdb5731810695e6516f0ab30"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:b2e1c7f5cceb5e9800927ddd51acf9cc78fbaa9e79e822c48b0ee52d9ce3c892"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-win32.whl", hash = "sha256:421cd24f26144f19b66d3868b49ed673176765f92fa9f7914cd2158d25b6d17e"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-win_amd64.whl", hash = "sha256:ddcc2b36052a70052479a9e5da1af067b4496f43686ca3cdda99f8367d0627e4"},
|
||||
{file = "pyinstaller-5.13.2-py3-none-win_arm64.whl", hash = "sha256:27cd64e7cc6b74c5b1066cbf47d75f940b71356166031deb9778a2579bb874c6"},
|
||||
{file = "pyinstaller-5.13.2.tar.gz", hash = "sha256:c8e5d3489c3a7cc5f8401c2d1f48a70e588f9967e391c3b06ddac1f685f8d5d2"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
altgraph = "*"
|
||||
macholib = {version = ">=1.8", markers = "sys_platform == \"darwin\""}
|
||||
pefile = {version = ">=2017.8.1", markers = "sys_platform == \"win32\""}
|
||||
pyinstaller-hooks-contrib = ">=2020.6"
|
||||
pywin32-ctypes = {version = ">=0.2.0", markers = "sys_platform == \"win32\""}
|
||||
setuptools = "*"
|
||||
pefile = {version = ">=2022.5.30", markers = "sys_platform == \"win32\""}
|
||||
pyinstaller-hooks-contrib = ">=2021.4"
|
||||
pywin32-ctypes = {version = ">=0.2.1", markers = "sys_platform == \"win32\""}
|
||||
setuptools = ">=42.0.0"
|
||||
|
||||
[package.extras]
|
||||
encryption = ["tinyaes (>=1.0.0)"]
|
||||
@ -1663,7 +1667,6 @@ files = [
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
importlib_metadata = {version = ">=4.6", markers = "python_version < \"3.10\""}
|
||||
packaging = ">=22.0"
|
||||
setuptools = ">=42.0.0"
|
||||
|
||||
@ -2533,5 +2536,5 @@ type = ["pytest-mypy"]
|
||||
|
||||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.9"
|
||||
content-hash = "d6b9563126bec58d43aa054636d2f6972b53bcab3d13fc13972899134aba0b96"
|
||||
python-versions = ">=3.10,<3.13"
|
||||
content-hash = "f840ef73c0dc08490a0894e655df27f34ab60e5a5f8c4e3ae8e23ec15f548dad"
|
||||
|
||||
96
pyinstaller.py
Normal file
96
pyinstaller.py
Normal file
@ -0,0 +1,96 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import itertools
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
import toml
|
||||
from PyInstaller.__main__ import run
|
||||
|
||||
if sys.platform == "win32":
|
||||
from PyInstaller.utils.win32.versioninfo import (FixedFileInfo, StringFileInfo, StringStruct,
|
||||
StringTable, VarFileInfo, VarStruct, VSVersionInfo)
|
||||
#from PyInstaller.utils.win32.versioninfo import SetVersion
|
||||
|
||||
SCRIPT_PATH = os.path.dirname(os.path.realpath(__file__))
|
||||
|
||||
"""Load pyproject.toml information."""
|
||||
project = toml.load(os.path.join(SCRIPT_PATH, "pyproject.toml"))
|
||||
poetry = project["tool"]["poetry"]
|
||||
|
||||
"""Configuration options that may be changed or referenced often."""
|
||||
DEBUG = False # When False, removes un-needed data after build has finished
|
||||
NAME = poetry["name"]
|
||||
AUTHOR = "vinetrimmer contributors"
|
||||
VERSION = poetry["version"]
|
||||
ICON_FILE = "assets/icon.ico" # pass None to use default icon
|
||||
ONE_FILE = False # Must be False if using setup.iss
|
||||
CONSOLE = True # If build is intended for GUI, set to False
|
||||
ADDITIONAL_DATA = [
|
||||
# (local file path, destination in build output)
|
||||
]
|
||||
HIDDEN_IMPORTS = []
|
||||
EXTRA_ARGS = [
|
||||
"-y", "--win-private-assemblies", "--win-no-prefer-redirects"
|
||||
]
|
||||
|
||||
"""Prepare environment to ensure output data is fresh."""
|
||||
shutil.rmtree("build", ignore_errors=True)
|
||||
shutil.rmtree("dist/vinetrimmer", ignore_errors=True)
|
||||
# we don't want to use any spec, only the configuration set in this file
|
||||
try:
|
||||
os.unlink(f"{NAME}.spec")
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
"""Run PyInstaller with the provided configuration."""
|
||||
run([
|
||||
"vinetrimmer/vinetrimmer.py",
|
||||
"-n", NAME,
|
||||
"-i", ["NONE", ICON_FILE][bool(ICON_FILE)],
|
||||
["-D", "-F"][ONE_FILE],
|
||||
["-w", "-c"][CONSOLE],
|
||||
*itertools.chain(*[["--add-data", os.pathsep.join(x)] for x in ADDITIONAL_DATA]),
|
||||
*itertools.chain(*[["--hidden-import", x] for x in HIDDEN_IMPORTS]),
|
||||
*EXTRA_ARGS
|
||||
])
|
||||
|
||||
if sys.platform == "win32":
|
||||
"""Set Version Info Structure."""
|
||||
VERSION_4_TUP = tuple(map(int, f"{VERSION}.0".split(".")))
|
||||
VERSION_4_STR = ".".join(map(str, VERSION_4_TUP))
|
||||
#SetVersion(
|
||||
# "dist/{0}/{0}.exe".format(NAME),
|
||||
# VSVersionInfo(
|
||||
# ffi=FixedFileInfo(
|
||||
# filevers=VERSION_4_TUP,
|
||||
# prodvers=VERSION_4_TUP
|
||||
# ),
|
||||
# kids=[
|
||||
# StringFileInfo([StringTable(
|
||||
# "040904B0", # ?
|
||||
# [
|
||||
# StringStruct("Comments", NAME),
|
||||
# StringStruct("CompanyName", AUTHOR),
|
||||
# StringStruct("FileDescription", "Widevine DRM downloader and decrypter"),
|
||||
# StringStruct("FileVersion", VERSION_4_STR),
|
||||
# StringStruct("InternalName", NAME),
|
||||
# StringStruct("LegalCopyright", f"Copyright (C) 2019-2021 {AUTHOR}"),
|
||||
# StringStruct("OriginalFilename", ""),
|
||||
# StringStruct("ProductName", NAME),
|
||||
# StringStruct("ProductVersion", VERSION_4_STR)
|
||||
# ]
|
||||
# )]),
|
||||
# VarFileInfo([VarStruct("Translation", [0, 1200])]) # ?
|
||||
# ]
|
||||
# )
|
||||
#)
|
||||
|
||||
if not DEBUG:
|
||||
shutil.rmtree("build", ignore_errors=True)
|
||||
# we don't want to keep the generated spec
|
||||
try:
|
||||
os.unlink(f"{NAME}.spec")
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
@ -9,7 +9,7 @@ description = 'Widevine and Playready DRM downloader and decrypter'
|
||||
authors = []
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.9"
|
||||
python = ">=3.10,<3.13"
|
||||
appdirs = "^1.4.4"
|
||||
beautifulsoup4 = "^4.8.2"
|
||||
click = "^8.0.1"
|
||||
@ -55,7 +55,7 @@ yt-dlp = "^2024.11.11"
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
flake8 = "^3.8.4"
|
||||
isort = "^5.9.2"
|
||||
pyinstaller = "^4.4"
|
||||
pyinstaller = "5.13.2"
|
||||
|
||||
[tool.poetry.scripts]
|
||||
vt = 'vinetrimmer.vinetrimmer:main'
|
||||
|
||||
@ -1,44 +0,0 @@
|
||||
# -*- mode: python ; coding: utf-8 -*-
|
||||
|
||||
|
||||
block_cipher = None
|
||||
|
||||
|
||||
a = Analysis(['vinetrimmer\\vinetrimmer.py'],
|
||||
pathex=['E:\\PitbullTools\\VT-0.1.0'],
|
||||
binaries=[],
|
||||
datas=[],
|
||||
hiddenimports=[],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=[],
|
||||
win_no_prefer_redirects=True,
|
||||
win_private_assemblies=True,
|
||||
cipher=block_cipher,
|
||||
noarchive=False)
|
||||
pyz = PYZ(a.pure, a.zipped_data,
|
||||
cipher=block_cipher)
|
||||
|
||||
exe = EXE(pyz,
|
||||
a.scripts,
|
||||
[],
|
||||
exclude_binaries=True,
|
||||
name='vinetrimmer',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=True,
|
||||
console=True,
|
||||
disable_windowed_traceback=False,
|
||||
target_arch=None,
|
||||
codesign_identity=None,
|
||||
entitlements_file=None , icon='assets\\icon.ico')
|
||||
coll = COLLECT(exe,
|
||||
a.binaries,
|
||||
a.zipfiles,
|
||||
a.datas,
|
||||
strip=False,
|
||||
upx=True,
|
||||
upx_exclude=[],
|
||||
name='vinetrimmer')
|
||||
Loading…
Reference in New Issue
Block a user