From dc3028d233b2f7091215dc0d9acc522914b9b59d Mon Sep 17 00:00:00 2001 From: Sergey Date: Wed, 9 Nov 2022 19:24:14 -0800 Subject: [PATCH] [build] `py2exe`: Migrate to freeze API (#5149) Closes #5135 Authored by: SG5, pukkandan --- .github/workflows/build.yml | 2 +- setup.py | 125 ++++++++++++++++++++---------------- 2 files changed, 71 insertions(+), 56 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 12e5426b1..b35c35047 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -194,7 +194,7 @@ jobs: python-version: '3.8' - name: Install Requirements run: | # Custom pyinstaller built with https://github.com/yt-dlp/pyinstaller-builds - python -m pip install --upgrade pip setuptools wheel "py2exe<0.12" + python -m pip install --upgrade pip setuptools wheel py2exe pip install "https://yt-dlp.github.io/Pyinstaller-Builds/x86_64/pyinstaller-5.3-py3-none-any.whl" -r requirements.txt - name: Prepare diff --git a/setup.py b/setup.py index 3641dfae9..88716152a 100644 --- a/setup.py +++ b/setup.py @@ -36,36 +36,34 @@ def packages(): def py2exe_params(): - import py2exe # noqa: F401 - warnings.warn( 'py2exe builds do not support pycryptodomex and needs VC++14 to run. ' - 'The recommended way is to use "pyinst.py" to build using pyinstaller') + 'It is recommended to run "pyinst.py" to build using pyinstaller instead') return { 'console': [{ 'script': './yt_dlp/__main__.py', 'dest_base': 'yt-dlp', + 'icon_resources': [(1, 'devscripts/logo.ico')], + }], + 'version_info': { 'version': VERSION, 'description': DESCRIPTION, 'comments': LONG_DESCRIPTION.split('\n')[0], 'product_name': 'yt-dlp', 'product_version': VERSION, - 'icon_resources': [(1, 'devscripts/logo.ico')], - }], - 'options': { - 'py2exe': { - 'bundle_files': 0, - 'compressed': 1, - 'optimize': 2, - 'dist_dir': './dist', - 'excludes': ['Crypto', 'Cryptodome'], # py2exe cannot import Crypto - 'dll_excludes': ['w9xpopen.exe', 'crypt32.dll'], - # Modules that are only imported dynamically must be added here - 'includes': ['yt_dlp.compat._legacy'], - } }, - 'zipfile': None + 'options': { + 'bundle_files': 0, + 'compressed': 1, + 'optimize': 2, + 'dist_dir': './dist', + 'excludes': ['Crypto', 'Cryptodome'], # py2exe cannot import Crypto + 'dll_excludes': ['w9xpopen.exe', 'crypt32.dll'], + # Modules that are only imported dynamically must be added here + 'includes': ['yt_dlp.compat._legacy'], + }, + 'zipfile': None, } @@ -113,41 +111,58 @@ class build_lazy_extractors(Command): subprocess.run([sys.executable, 'devscripts/make_lazy_extractors.py']) -params = py2exe_params() if sys.argv[1:2] == ['py2exe'] else build_params() -setup( - name='yt-dlp', - version=VERSION, - maintainer='pukkandan', - maintainer_email='pukkandan.ytdlp@gmail.com', - description=DESCRIPTION, - long_description=LONG_DESCRIPTION, - long_description_content_type='text/markdown', - url='https://github.com/yt-dlp/yt-dlp', - packages=packages(), - install_requires=REQUIREMENTS, - python_requires='>=3.7', - project_urls={ - 'Documentation': 'https://github.com/yt-dlp/yt-dlp#readme', - 'Source': 'https://github.com/yt-dlp/yt-dlp', - 'Tracker': 'https://github.com/yt-dlp/yt-dlp/issues', - 'Funding': 'https://github.com/yt-dlp/yt-dlp/blob/master/Collaborators.md#collaborators', - }, - classifiers=[ - 'Topic :: Multimedia :: Video', - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', - 'Programming Language :: Python :: 3.11', - 'Programming Language :: Python :: Implementation', - 'Programming Language :: Python :: Implementation :: CPython', - 'Programming Language :: Python :: Implementation :: PyPy', - 'License :: Public Domain', - 'Operating System :: OS Independent', - ], - cmdclass={'build_lazy_extractors': build_lazy_extractors}, - **params -) +def main(): + if sys.argv[1:2] == ['py2exe']: + params = py2exe_params() + try: + from py2exe import freeze + except ImportError: + import py2exe # noqa: F401 + warnings.warn('You are using an outdated version of py2exe. Support for this version will be removed in the future') + params['console'][0].update(params.pop('version_info')) + params['options'] = {'py2exe': params.pop('options')} + else: + return freeze(**params) + else: + params = build_params() + + setup( + name='yt-dlp', + version=VERSION, + maintainer='pukkandan', + maintainer_email='pukkandan.ytdlp@gmail.com', + description=DESCRIPTION, + long_description=LONG_DESCRIPTION, + long_description_content_type='text/markdown', + url='https://github.com/yt-dlp/yt-dlp', + packages=packages(), + install_requires=REQUIREMENTS, + python_requires='>=3.7', + project_urls={ + 'Documentation': 'https://github.com/yt-dlp/yt-dlp#readme', + 'Source': 'https://github.com/yt-dlp/yt-dlp', + 'Tracker': 'https://github.com/yt-dlp/yt-dlp/issues', + 'Funding': 'https://github.com/yt-dlp/yt-dlp/blob/master/Collaborators.md#collaborators', + }, + classifiers=[ + 'Topic :: Multimedia :: Video', + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', + 'Programming Language :: Python :: Implementation', + 'Programming Language :: Python :: Implementation :: CPython', + 'Programming Language :: Python :: Implementation :: PyPy', + 'License :: Public Domain', + 'Operating System :: OS Independent', + ], + cmdclass={'build_lazy_extractors': build_lazy_extractors}, + **params + ) + + +main()