我尝试使用 py2exe、cx_Freeze、pyinstaller 之类的所有东西,但到目前为止还没有解决,可能是因为它们都支持旧版本。我正在寻找一个支持新版本或一些简单的步骤来至少让这些工作的。任何帮助将不胜感激。我在最后一步中遇到了这些错误:-
安装程序.py
from distutils.core import setup
import py2exe
setup(console=['pricecomparisontool.py'])
py2exe 创建安装文件后
C:\WINDOWS\system32>cd C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32
C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32>python setup.py py2exe
running py2exe
Traceback (most recent call last):
File "setup.py", line 4, in <module>
setup(console=['pricecomparisontool.py'])
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\distutils_buildexe.py", line 188, in run
self._run()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\distutils_buildexe.py", line 267, in _run
builder.analyze()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\runtime.py", line 160, in analyze
self.mf.import_hook(modname)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\mf3.py", line 120, in import_hook
module = self._gcd_import(name)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\mf3.py", line 274, in _gcd_import
return self._find_and_load(name)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\mf3.py", line 357, in _find_and_load
self._scan_code(module.__code__, module)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\mf3.py", line 388, in _scan_code
for what, args in self._scan_opcodes(code):
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\py2exe\mf3.py", line 417, in _scan_opcodes
yield "store", (names[oparg],)
IndexError: tuple index out of range
安装程序.py
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]}
# 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 = "pricecomparisontool",
version = "0.1",
description = "My GUI application!",
options = {"build_exe": build_exe_options},
executables = [Executable("pricecomparisontool.py", base=base)])
cx_Freeze 创建安装文件时
C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32>python setup.py build
running build
running build_exe
Traceback (most recent call last):
File "setup.py", line 17, in <module>
executables = [Executable("pricecomparisontool.py", base=base)])
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\dist.py", line 349, in setup
distutils.core.setup(**attrs)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\core.py", line 148, in setup
dist.run_commands()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\command\build.py", line 135, in run
self.run_command(cmd_name)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\dist.py", line 218, in run
zipExcludePackages = self.zip_exclude_packages)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 149, in __init__
self._VerifyConfiguration()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 483, in _VerifyConfiguration
executable._VerifyConfiguration(self)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 686, in _VerifyConfiguration
self._GetInitScriptFileName()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\lib\site-packages\cx_Freeze\freezer.py", line 708, in _GetInitScriptFileName
raise ConfigError("no initscript named %s", name)
cx_Freeze.freezer.ConfigError: no initscript named Console
安装程序.py
#! /usr/bin/env python
#-----------------------------------------------------------------------------
# Copyright (c) 2005-2016, PyInstaller Development Team.
#
# Distributed under the terms of the GNU General Public License with exception
# for distributing bootloader.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
from __future__ import print_function
import codecs
import sys, os
from setuptools import setup
from PyInstaller import (__version__ as version, is_linux, is_win, is_cygwin,
HOMEPATH, PLATFORM, compat)
REQUIREMENTS = ['setuptools']
# For Windows install PyWin32 if not already installed.
if sys.platform.startswith('win'):
# Windows support depends on pefile library.
# ::TODO:: #1920 require a specific version minimum
# REQUIREMENTS.append('pefile')
# ::TODO:: #1920 future is currently only needed for the included pefile,
# remove 'future' as requirement when pypi pefile is used
REQUIREMENTS.append('future')
try:
import pywintypes
except ImportError:
# 'pypiwin32' is PyWin32 package made installable by 'pip install'
# command.
REQUIREMENTS.append('pypiwin32')
# Create long description from README.rst and doc/CHANGES.rst.
# PYPI page will contain complete PyInstaller changelog.
def read(filename):
try:
return unicode(codecs.open(filename, encoding='utf-8').read())
except NameError:
return open(filename, 'r', encoding='utf-8').read()
long_description = u'\n\n'.join([read('README.rst'),
read('doc/CHANGES.rst')])
if sys.version_info < (3,):
long_description = long_description.encode('utf-8')
CLASSIFIERS = """
Development Status :: 6 - Mature
Environment :: Console
Intended Audience :: Developers
Intended Audience :: Other Audience
Intended Audience :: System Administrators
License :: OSI Approved :: GNU General Public License v2 (GPLv2)
Natural Language :: English
Operating System :: MacOS :: MacOS X
Operating System :: Microsoft :: Windows
Operating System :: POSIX
Operating System :: POSIX :: AIX
Operating System :: POSIX :: BSD
Operating System :: POSIX :: Linux
Operating System :: POSIX :: SunOS/Solaris
Programming Language :: C
Programming Language :: Python
Programming Language :: Python :: 2
Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
Programming Language :: Python :: 3.3
Programming Language :: Python :: 3.4
Programming Language :: Python :: 3.5
Programming Language :: Python :: Implementation :: CPython
Topic :: Software Development
Topic :: Software Development :: Build Tools
Topic :: Software Development :: Interpreters
Topic :: Software Development :: Libraries :: Python Modules
Topic :: System :: Installation/Setup
Topic :: System :: Software Distribution
Topic :: Utilities
""".strip().splitlines()
#-- plug-in building the bootloader
from distutils.core import Command
from distutils.command.build import build
from setuptools.command.bdist_egg import bdist_egg
class build_bootloader(Command):
"""
Wrapper for distutil command `build`.
"""
user_options =[]
def initialize_options(self): pass
def finalize_options(self): pass
def bootloader_exists(self):
# Checks is the console, non-debug bootloader exists
exe = 'run'
if is_win or is_cygwin:
exe = 'run.exe'
exe = os.path.join(HOMEPATH, 'PyInstaller', 'bootloader', PLATFORM, exe)
return os.path.isfile(exe)
def compile_bootloader(self):
import subprocess
src_dir = os.path.join(HOMEPATH, 'bootloader')
cmd = [sys.executable, './waf', 'configure', 'all']
if is_linux:
env = os.environ.copy()
try:
env['PATH'] += ':/opt/lsb/bin'
except:
env['PATH'] = '/opt/lsb/bin'
lsb = False
try:
FNULL = open(os.devnull, 'w')
if subprocess.call(['which', 'lsbcc'], env=env,
stderr=FNULL, stdout=FNULL,
close_fds=True) == 0:
lsb = True
except compat.FileNotFoundError:
pass
if not lsb:
cmd.append('--no-lsb')
rc = subprocess.call(cmd, cwd=src_dir)
if rc:
raise SystemExit('ERROR: Failed compiling the bootloader. '
'Please compile manually and rerun setup.py')
def run(self):
if getattr(self, 'dry_run', False):
return
if self.bootloader_exists():
return
print('No precompiled bootloader found. Trying to compile it for you ...',
file=sys.stderr)
self.compile_bootloader()
class MyBuild(build):
# plug `build_bootloader` into the `build` command
def run(self):
self.run_command('build_bootloader')
build.run(self)
class MyBDist_Egg(bdist_egg):
def run(self):
self.run_command('build_bootloader')
bdist_egg.run(self)
#--
setup(
install_requires=REQUIREMENTS,
name='PyInstaller',
version=version,
description='PyInstaller bundles a Python application and all its '
'dependencies into a single package.',
long_description=long_description,
keywords='packaging app apps bundle convert standalone executable '
'pyinstaller macholib cxfreeze freeze py2exe py2app bbfreeze',
author='Giovanni Bajo, Hartmut Goebel, David Vierra, David Cortesi, Martin Zibricky',
author_email='pyinstaller@googlegroups.com',
license=('GPL license with a special exception which allows to use '
'PyInstaller to build and distribute non-free programs '
'(including commercial ones)'),
url='http://www.pyinstaller.org',
cmdclass = {'build_bootloader': build_bootloader,
'build': MyBuild,
'bdist_egg': MyBDist_Egg,
},
classifiers=CLASSIFIERS,
zip_safe=False,
packages=['PyInstaller'],
package_data={
# This includes precompiled bootloaders and icons for bootloaders.
'PyInstaller': ['bootloader/*/*'],
# This file is necessary for rthooks (runtime hooks).
'PyInstaller.loader': ['rthooks.dat'],
},
include_package_data=True,
entry_points={
'console_scripts': [
'pyinstaller = PyInstaller.__main__:run',
'pyi-archive_viewer = PyInstaller.utils.cliutils.archive_viewer:run',
'pyi-bindepend = PyInstaller.utils.cliutils.bindepend:run',
'pyi-grab_version = PyInstaller.utils.cliutils.grab_version:run',
'pyi-makespec = PyInstaller.utils.cliutils.makespec:run',
'pyi-set_version = PyInstaller.utils.cliutils.set_version:run',
],
}
)
pyinstaller 我猜几乎与 py2exe 类似的错误
C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32>cd C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1
C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1>python pyinstaller.py --onefile pricecomparisontool.py
3627 INFO: PyInstaller: 3.2.1
3641 INFO: Python: 3.6.1
3642 INFO: Platform: Windows-10-10.0.15063-SP0
3644 INFO: wrote C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\pricecomparisontool\pricecomparisontool.spec
3645 INFO: UPX is not available.
Traceback (most recent call last):
File "pyinstaller.py", line 15, in <module>
run()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\__main__.py", line 90, in run
run_build(pyi_config, spec_file, **vars(args))
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\__main__.py", line 46, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\build_main.py", line 788, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\build_main.py", line 734, in build
exec(text, spec_namespace)
File "<string>", line 16, in <module>
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\build_main.py", line 162, in __init__
raise ValueError("script '%s' not found" % script)
ValueError: script 'C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\pricecomparisontool.py' not found
C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1>python pyinstaller.py --onefile pricecomparisontool.py
378 INFO: PyInstaller: 3.2.1
378 INFO: Python: 3.6.1
380 INFO: Platform: Windows-10-10.0.15063-SP0
382 INFO: wrote C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\pricecomparisontool\pricecomparisontool.spec
384 INFO: UPX is not available.
402 INFO: Extending PYTHONPATH with paths
['C:\\Users\\WINLAP307\\AppData\\Local\\Programs\\Python\\Python36-32\\PyInstaller-3.2.1',
'C:\\Users\\WINLAP307\\AppData\\Local\\Programs\\Python\\Python36-32\\PyInstaller-3.2.1\\pricecomparisontool']
407 INFO: checking Analysis
408 INFO: Building Analysis because out00-Analysis.toc is non existent
408 INFO: Initializing module dependency graph...
423 INFO: Initializing module graph hooks...
494 INFO: Analyzing base_library.zip ...
Traceback (most recent call last):
File "pyinstaller.py", line 15, in <module>
run()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\__main__.py", line 90, in run
run_build(pyi_config, spec_file, **vars(args))
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\__main__.py", line 46, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\build_main.py", line 788, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\build_main.py", line 734, in build
exec(text, spec_namespace)
File "<string>", line 16, in <module>
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\build_main.py", line 212, in __init__
self.__postinit__()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\datastruct.py", line 161, in __postinit__
self.assemble()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\building\build_main.py", line 317, in assemble
excludes=self.excludes, user_hook_dirs=self.hookspath)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\depend\analysis.py", line 560, in initialize_modgraph
graph.import_hook(m)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\lib\modulegraph\modulegraph.py", line 1509, in import_hook
source_package, target_module_partname, level)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\lib\modulegraph\modulegraph.py", line 1661, in _find_head_package
target_module_headname, target_package_name, source_package)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\depend\analysis.py", line 209, in _safe_import_module
module_basename, module_name, parent_package)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\lib\modulegraph\modulegraph.py", line 2077, in _safe_import_module
module_name, file_handle, pathname, metadata)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\lib\modulegraph\modulegraph.py", line 2167, in _load_module
self._scan_code(m, co, co_ast)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\lib\modulegraph\modulegraph.py", line 2585, in _scan_code
module, module_code_object, is_scanning_imports=False)
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\lib\modulegraph\modulegraph.py", line 2831, in _scan_bytecode
global_attr_name = get_operation_arg_name()
File "C:\Users\WINLAP307\AppData\Local\Programs\Python\Python36-32\PyInstaller-3.2.1\PyInstaller\lib\modulegraph\modulegraph.py", line 2731, in get_operation_arg_name
return module_code_object.co_names[co_names_index]
IndexError: tuple index out of range
我无法调试这些,也请随时询问是否有任何进一步的细节......