在进入全速开发模式之前,我正在玩一些基本的东西在Python中工作.以下是具体内容:
Python 2.5.4
PyQt4 4.4.3
SqlAlchemy 0.5.2
py2exe 0.6.9
setuptools 0.6c9
pysqlite 2.5.1
Run Code Online (Sandbox Code Playgroud)
setup.py:
from distutils.core import setup
import py2exe
setup(windows=[{"script" : "main.py"}], options={"py2exe" : {"includes" : ["sip", "PyQt4.QtSql","sqlite3"],"packages":["sqlite3",]}})
Run Code Online (Sandbox Code Playgroud)
py2exe似乎正确生成.exe文件,但是当我执行dist/main.exe时,我在main.exe.log中得到了这个
Traceback (most recent call last):
File "main.py", line 18, in <module>
File "main.py", line 14, in main
File "db\manager.pyc", line 12, in __init__
File "sqlalchemy\engine\__init__.pyc", line 223, in create_engine
File "sqlalchemy\engine\strategies.pyc", line 48, in create
File "sqlalchemy\engine\url.pyc", line 91, in get_dialect
ImportError: No module named sqlite
Run Code Online (Sandbox Code Playgroud)
我一直在谷歌上搜索,但似乎无法找到任何解决方案.如果我现在无法使用它,我希望在这个项目中使用Python将会破灭,我将重新开始使用Ruby ...(不是说Ruby有什么问题,我只是想把这个项目用作自学Python的好方法)
我有一个Python程序使用Qt(事实上是PyQt4),当我从它的main.py启动它时,我得到一个控制台窗口和GUI窗口(当然在Windows上).
然后我用py2exe编译我的程序并成功创建了main.exe.但是,如果我运行main.exe(这是程序用户将要执行的操作)仍然会出现Python的控制台窗口,并且我的所有调试文本都是stdout-ed到该窗口.
我希望在我的应用程序运行时隐藏cmd行窗口,并且我希望从.exe文件执行时,用户可以看到我的GUI.
那可能吗?
当我尝试使用py2exe将我制作的简单Python游戏转换为exe格式时,它给了我以下错误:
Traceback (most recent call last):
File "C:\Users\Tali\Desktop\2exe.py", line 4, in <module>
setup(console=['test.py'])
File "C:\Python\lib\distutils\core.py", line 152, in setup
dist.run_commands()
File "C:\Python\lib\distutils\dist.py", line 953, in run_commands
self.run_command(cmd)
File "C:\Python\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 243, in run
self._run()
File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 305, in _run
dlls = self.find_dlls(extensions)
File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 389, in find_dlls
self.dll_excludes)
File "C:\Python\lib\site-packages\py2exe\build_exe.py", line 1021, in find_dep
endend_dlls
import py2exe_util
ImportError: DLL load failed: %1 is not a valid Win32 application.
Run Code Online (Sandbox Code Playgroud)
我在网上搜索了大约一个小时,尝试在我的程序中更改内容.什么都行不通.虽然我的程序使用"随机"库,但我没有看到它引起这种问题的情况.
安装脚本:
from …Run Code Online (Sandbox Code Playgroud) 我在python中编写了一个Windows服务.如果我从命令提示符运行我的脚本
python runService.py
Run Code Online (Sandbox Code Playgroud)
当我这样做时,服务安装并正确启动.我一直在尝试使用pyinstaller创建一个可执行文件,因为我已经看到了与py2exe相同的问题.当我运行.exe时,服务安装但不启动,我收到以下错误
error 1053 the service did not respond to the start or control request in a timely fashion
Run Code Online (Sandbox Code Playgroud)
我已经看到很多人都有这个问题,但我似乎无法找到关于如何解决这个问题的明确答案.
winservice.py
from os.path import splitext, abspath
from sys import modules, executable
from time import *
import win32serviceutil
import win32service
import win32event
import win32api
class Service(win32serviceutil.ServiceFramework):
_svc_name_ = '_unNamed'
_svc_display_name_ = '_Service Template'
_svc_description_ = '_Description template'
def __init__(self, *args):
win32serviceutil.ServiceFramework.__init__(self, *args)
self.log('init')
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
#logs into the system event log
def log(self, msg):
import …Run Code Online (Sandbox Code Playgroud) 我一直试图用py2exe将一个图标(.ico)嵌入到我的"compyled".exe中.
Py2Exe确实有一种嵌入图标的方法:
windows=[{
'script':'MyScript.py',
'icon_resources':[(1,'MyIcon.ico')]
}]
Run Code Online (Sandbox Code Playgroud)
这就是我正在使用的.该图标在Windows XP或更低版本上显示正常,但在Vista上根本不显示.我想这是因为新的Vista图标格式,可以是PNG格式,最高可达256x256像素.
那么,如何让py2exe将它们嵌入到我的可执行文件中,而不会破坏Windows XP上的图标?
我很酷,使用外部实用程序而不是py2exe - 我已经尝试使用此命令行实用程序来嵌入它,但它总是会破坏我的exe并因某些原因而截断其大小.
我在脚本中使用这段代码以跨平台的方式确定运行的确切位置:
SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)
很简单.然后我继续在SCRIPT_ROOT我的脚本的其他区域使用,以确保一切都是正确的相对.我通过py2exe运行时出现问题,因为生成的可执行文件未设置__file__,因此我的脚本中断.有谁知道如何解决或解决这个问题?
有没有办法从python脚本创建一个独立的.exe.使用py2exe生成的可执行文件只能使用pythonXX.dll运行.我想获得一个完全独立的.exe,它不需要安装python运行时库.它看起来像一个链接问题,但使用静态库而不是动态库,并且应用条带以删除未使用的符号也很有用.
任何的想法 ?
谢谢.
亚历山德罗
我正在尝试使用此链接上提供的minty解决方案为我的基于Tkinter的程序生成单个exe文件:
这是我在setup.py中写的内容:
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(windows=[{'script': 'filename.py'}], \
options={"py2exe": {"includes": ["decimal", "Tkinter", \
"tkFileDialog", "csv", "xml.dom.minidom", "os"], \
'bundle_files': 1, 'compressed': False}}, \
zipfile = None)
Run Code Online (Sandbox Code Playgroud)
它为Tkinter创建了一个'tcl'文件夹,即使我已经指定了bundle_files = 1.另外它还会生成一些其他的exe w9xpopen.exe.但是,我的实际exe不会运行,也不会出现任何错误.如果我删除所有这些包含它甚至不起作用.
我对这里可能缺少什么的想法?我正在使用64位Windows 7机器.
我有一个我正在处理的桌面应用程序,我正在使用它PyInstaller来生成de分发文件.
我选择PyInstaller了py2exe因为它非常容易使用而且我不需要关心windows dll,但是当我使用时py2exe我可以简单地使用Esky进行自动更新,但我无法使用它PyInstaller.
所以我不知道如何启动自动更新应用程序.有人有一些想法或只是知道我怎么能使用PyInstaller和esky?