我目前为基于Python的GUI添加可执行文件的方法是:
setup(
# ...
entry_points = {"gui_scripts" : ['frontend = myfrontendmodule.launcher:main']},
# ...
)
在Windows上,这将创建“前端.exe“和”前端-脚本.pyw“在Python的scripts文件夹中(使用python2.6)。当我执行EXE文件时,会显示一个控制台窗口,但是PYW文件工作正常,没有显示。在
所以我的问题是:如何让EXE文件在没有控制台窗口的情况下执行程序?该解决方案也可以在Linux上运行(不要建议使用py2exe;)。在
好吧,我在setuptools源代码中做了一点研究,最终归结为setuptools中的一个bug(很简单)_install.py安装)公司名称:
最后一条
if
语句决定是否pythonw.exe的或python.exe的路径被写进“前端”的shebang中-脚本.pyw". 由于这个shebang是由创建的EXE文件计算的,所以必须不执行else
语句。问题是在我的例子中new_header[2:-1]
是“C:\ProgramFiles(x86)\Python26\pythonw.exe“(加上引号!),所以os.path.exists
说它不存在是因为引号。在我将尝试让setuptools开发人员纠正这个问题。剩下的问题将是绝对的pythonw.exe路径。如果我创建一个Windows安装程序/MSI安装程序,shebang将包含pythonw.exe路径(“C:\Program Files(x86)\Python26\pythonw.exe),但用户可能已经在“C:\Python26”中安装了Python。在我报告了这个问题之后,我将报告最终的解决方案。在
我在两年前发布了这篇文章,很抱歉我还没有给出我的解决方案。不确定是否有更现代的解决方案(可能是distribute提供了一些东西),但我当时使用的是(复制粘贴):
文件
^{pr2}$dogsync-frontend-script.pyw
文件
dogsync-frontend.exe
自动从
<python installation>\lib\site-packages\setuptools\gui.exe
复制(见下文)。如果我没记错,这个文件将自动执行脚本<name of EXE>-script.py[w]
。在文件
setup.py
使用此设置,exe/pyw文件将复制到
<python installation>\Scripts
(在Windows上),启动dogsync-frontend.exe
将在没有控制台的情况下运行pyw脚本。由于setuptools多年没有得到任何更新,所以这个解决方案仍然有效。在为什么不在Linux上使用
.pyw
文件,在Windows上使用py2exe
?在相关问题 更多 >
编程相关推荐