我注意到当我尝试为Windows滚动一个zip时,pytz错过了zoneinfo文件夹.现在我有一个我用过的解决方法python setup.py build
,即
7z a -xr!*.py* build\exe.win32-2.7\library.zip C:\Python27\Lib\site-packages\pytz
Run Code Online (Sandbox Code Playgroud)
是否有适当的方法来实现这个setup.py
或什么?
我制作了一个GUI python脚本,我想与同事分享,以提高工作效率.我需要一种方法将所有内容都包含在一个文件/目录中供他们使用.我试过这个标准
python setup.py build
Run Code Online (Sandbox Code Playgroud)
但它并不包含所有东西(在他们的电脑上进行测试,我只是快速命令提示弹出然后关闭.)
它在我的机器上工作正常,但我安装了其他东西(比如python)
我的setup.py如下:
import sys
from cx_Freeze import setup, Executable
executables = [
Executable("Blah.py")
]
buildOptions = dict(
compressed = True,
includes = ["Blah"],
path = sys.path + ["modules"])
setup(
name = "Blah",
version = "0.1",
description = "Blah",
options = dict(build_exe = buildOptions),
executables = executables)
Run Code Online (Sandbox Code Playgroud)
我花了几个小时搜索已经没有运气了.我觉得有一种方法可以包含所有需要的文件,我只是不确定如何.任何帮助,将不胜感激.谢谢.
我用PyQt4编写了一个很小的python程序.现在,我想使用cx_Freeze创建一个独立的应用程序.一切正常 - cx_Freeze自动包含所有必要的模块; 结果exe工作.
唯一的问题是cx_Freeze将大量不需要的模块打包到独立模块中.即使我只使用QtCore和QtGui,也包括sqlite3,QtNetwork或QtScript等模块.令人惊讶的是,我在结果文件夹中找到了PyQt5 dll.在我看来,好像cx_Freeze使用我安装的所有PyQt包.结果是一个200Mb的程序 - 虽然我只写了一个小脚本.
我该如何防止这种行为?
我使用以下setup.py:
import sys
from cx_Freeze import setup, Executable
setup(
name="MyProgram",
version="0.1",
description="MyDescription",
executables=[Executable("MyProgram.py", base = "Win32GUI")],
)
Run Code Online (Sandbox Code Playgroud)
我试着明确地排除了一些软件包(虽然排除所有未使用的Qt模块非常麻烦)添加以下代码:
build_exe_options = {"excludes": ["tkinter", "PyQt4.sqlite3",
"PyQt4.QtOpenGL4", "PyQt4.QtSql"]}
Run Code Online (Sandbox Code Playgroud)
但上层模块仍在使用.我也试过了
build_exe_options = {"excludes": ["tkinter", "PyQt4.sqlite3",
"QtOpenGL4", "QtSql"]}
Run Code Online (Sandbox Code Playgroud)
结果相同.
除了无用的Qt包之外,我还找到了名为"imageformats","tcl"和"tk"的不需要的文件夹.如何仅包含所需文件以使独立文件夹和安装程序尽可能小?
我用谷歌搜索了这个问题几个小时,但只发现这个帖子没有帮助我.
我在Windows 8上运行python 3.4.2 amd64.
我很高兴每个解决方案都能以合理的尺寸"独立"地获得所需的结果.我也尝试了pyqtdeploy但遇到了错误:QT中的未知模块(但这是一个不同的问题).
我正在使用两个模块.一个是由uic创建的GUI类,"MyProgramGUIPreset".在此文件中有以下导入命令:
from PyQt4 import QtCore, QtGui
from matplotlibwidget import MatplotlibWidget
Run Code Online (Sandbox Code Playgroud)
在主模块中,我执行以下导入:
import MyProgramGUIPreset
import numpy as np
from PyQt4.QtGui import QApplication, QMainWindow, QMessageBox
import sys …
Run Code Online (Sandbox Code Playgroud) 我知道C或C++中静态和动态链接的区别.但它在Python中意味着什么?由于它只是一个解释器,并且只有一种模式的导入机制,这有什么意义呢?
如果我通过排除特定库来使用cx_freeze冻结我的Python应用程序,它是一种动态链接吗?因为,用户必须自己下载并安装该库才能运行我的应用程序.
实际上我的问题是,我正在使用PySide库(使用LGPL v2.1)来开发Python GUI应用程序.图书馆说我应该动态链接到图书馆以遵守他们的法律条款(与Qt相同).在这种情况下,如何动态链接到PySide?
我目前正在运行Windows 7 Home 64位,我正在开发一个程序,我想为32位和64位Windows操作系统提供这些程序.当我使用cx_Freeze将.py转换为.exe时,它只允许将其安装在64位操作系统上.
我是否需要购买一台32位计算机才能将其转换为32位程序,或者是否有一组特殊的命令可用于使cx_freeze同时创建x32和x64 exe?
from cx_Freeze import *
import sys
base = None
if sys.platform == 'win32':
base = "Win32GUI"
executables = [Executable("iNTMI.py", shortcutName = "iNTMI", shortcutDir = "DesktopFolder", base = base, icon = "C:/Program Files/iNTMI/assets/images/programIcon.ico")]
setup(
name = "iNTMI",
options = {"build_exe": {"packages": ["tkinter", "minecraftItems", "ProgFunctions", "minecraftItems"], "include_files": ["ProgFunctions.py", "minecraftItems.py"]}},
executables = executables
)
Run Code Online (Sandbox Code Playgroud) 我几天来一直在处理这个问题,希望得到一些帮助.我开发了一个带有导入模块的GUI应用程序tkinter,numpy,scipy,matplotlib,它在python本身运行良好.转换为*.exe后,一切都按预期工作,但不是matplotlib部分.当我按下我定义的情节按钮时,*.exe只会关闭并且不显示任何情节.所以我想做一个简约的例子,我简单地绘制一个sin函数并且我面临同样的问题:在python中完美工作,当将它转换为*.exe时,它在按下情节按钮时崩溃.简约的例子在这里:
import tkinter as tk
import matplotlib.pyplot as plt
import numpy as np
class MainWindow(tk.Frame):
def __init__(self):
tk.Frame.__init__(self,bg='#9C9C9C',relief="flat", bd=10)
self.place(width=x,height=y)
self.create_widgets()
def function(self):
datax = np.arange(-50,50,0.1)
datay = np.sin(datax)
plt.plot(datax,datay)
plt.show()
def create_widgets(self):
plot = tk.Button(self, text='PLOT', command=self.function)
plot.pack()
x,y=120,300
root=tk.Tk()
root.geometry(str(x)+"x"+str(y))
app = MainWindow()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
并查看我的相应"setup.py"以使用cx_freeze进行转换.
import cx_Freeze
import matplotlib
import sys
import numpy
import tkinter
base = None
if sys.platform == "win32":
base = "Win32GUI"
executables = [cx_Freeze.Executable("test.py", base=base)]
build_exe_options = {"includes": ["matplotlib.backends.backend_tkagg","matplotlib.pyplot",
"tkinter.filedialog","numpy"],
"include_files":[(matplotlib.get_data_path(), "mpl-data")],
"excludes":[],
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将脚本编译multiprocessing
为Windows可执行文件。起初,我遇到了一个问题,为什么当我将多处理模块的功能编译为可执行文件时,在Windows上调用多处理模块的功能时,为什么python可执行文件会打开新的窗口实例。按照接受的答案,我调整了脚本,使
from multiprocessing import freeze_support
# my functions
if __name__ == "__main__":
freeze_support()
# my script
Run Code Online (Sandbox Code Playgroud)
作为脚本运行时,它再次完美运行。但是,当我编译并运行它时,会遇到:
我在错误的绿色部分加了下划线。此特定行是指
freeze_support()
Run Code Online (Sandbox Code Playgroud)
在我的脚本中。此外,在此行上实际上并没有遇到它,但是当我的脚本进入多进程时,它是这样的:
p = multiprocessing.Process(target=my_function, args=[my_list])
p.start()
p1 = multiprocessing.Process(target=my_function, args=[my_list])
p1.start()
p.join()
p1.join()
Run Code Online (Sandbox Code Playgroud)
这是多处理模块中的错误(特别是第148行),还是我误解了所链接的答案,还是其他原因?
我还将注意到该脚本在编译时可以正常工作,但是对于产生的每个多进程(很多),您必须在错误消息上单击“确定”,并且每个错误消息都完全相同。这是否意味着我会以不正确的方式结束流程p.join()
?
我还尝试了在Python 3.4上的解决方案,不适用于py2exe,建议添加
multiprocessing.set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))
Run Code Online (Sandbox Code Playgroud)
脚本,但这会导致以下脚本形式(甚至尚未编译)出现错误:
FileNotFoundError:[WinError 2]系统找不到指定的文件
谢谢您的帮助!
Frozen_support文档:https://docs.python.org/2/library/multiprocessing.html#multiprocessing.freeze_support
我正在尝试编译python程序,我正在使用python 3.2.所以我下载了cx_freeze并安装了它.当我尝试在cmd中运行setup.py时,它说:
"importerror: no module named cx_freeze"
Run Code Online (Sandbox Code Playgroud)
我已经删除了cx_freeze并尝试重新安装它,但这次,在"选择应安装cx_freeze的位置"安装的一部分我从注册表中选择了python(这是我以前做过的)并且还选择了"python"从另一个位置"(并选择我的C:\ python32 \目录).然后我收到了这个错误:
"There is a problum with this windows installation package. a program required for this install to complete could not be run."
Run Code Online (Sandbox Code Playgroud)
注意:在我的setup.py文件中有以下内容:
from cx_freeze import *
Setup(
name = "",
version ="0.1",
description ="",
executables = [Executable("")] ,
)
Run Code Online (Sandbox Code Playgroud) 这是困扰我一段时间的问题.我查了一下,但没有找到答案.我也试过自己弄清楚,但没有成功.每当我创建并尝试使用其中的input()
函数冻结程序时,我都会得到相同的错误.
我试过运行.exe
in命令提示符,但我得到了同样的错误.我的setup.py
脚本如下.
import cx_Freeze, sys
from cx_Freeze import setup, Executable
exe=Executable(
script="input.py",
base="Win32Gui",
)
includefiles=[]
includes=["re"]
excludes=[]
packages=[]
setup(
version = "0",
description = "No Description",
author = "Anthony",
name = "0",
options = {'build_exe': {'excludes':excludes,'packages':packages,'include_files':includefiles}},
executables = [exe]
)
Run Code Online (Sandbox Code Playgroud)
我的简短测试脚本:
import sys,re
input('input')
Run Code Online (Sandbox Code Playgroud)
这是我可以解决的问题,还是我必须在没有该input()
功能的情况下工作?我在Windows 7上使用Python 3.2,使用相应的cx_freeze版本.提前致谢.
我正在尝试用cx_freeze和esky构建一个应用程序.它之前正在工作(好吧,也许几个月前.从那时起,python 3.5就灭了).
我有以下例外:
File "/usr/lib/python3.5/site-packages/esky/util.py", line 578, in compile_to_bytecode
loader = importlib._bootstrap.SourceLoader()
AttributeError: module 'importlib._bootstrap' has no attribute 'SourceLoader'
Run Code Online (Sandbox Code Playgroud)
我正在使用:
我在Manjaro(Linux)上.我无法弄清楚问题的来源.你可以帮我一把吗?