Repository: yt-dlp/yt-dlp

Issue:
yt-dlp_min.exe v2022.10.04 has no file version information?
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I remove or skip any mandatory\* field

### Checklist

- [X] I'm asking a question and **not** reporting a bug or requesting a feature
- [X] I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
- [X] I've verified that I'm running yt-dlp version **2022.10.04** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've searched the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar questions **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)

### Please make sure the question is worded well enough to be understood

As the title says, file version information is empty, such as product version.
They existed in previous versions and yt-dlp.exe and and yt-dlp_x86.exe.

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

_No response_


Discussion:
`py2exe` seems to have changed their API. We'll need to migrate to their new API and figure out how to add version info back. For the time-being, I'll pin the py2exe we use to an older version
For anyone who's interested in working on this https://github.com/py2exe/py2exe/blob/master/docs/migration.md and [py2exe's changelog](https://github.com/py2exe/py2exe/releases) may be useful
see, thanks!

Resolving patch:
diff --git a/setup.py b/setup.py
--- 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'],
-            }
+            '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
+        'zipfile': None,
     }
 
 
@@ -113,41 +111,58 @@ def run(self):
         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()


Test patch: