标签: cx-freeze

cx_freeze:如何将包文件添加到library.zip中?

我注意到当我尝试为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或什么?

pytz cx-freeze

10
推荐指数
1
解决办法
5626
查看次数

如何从python 3.3中的cx_freeze(或安装程序)创建一个多合一的exe文件

我制作了一个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)

我花了几个小时搜索已经没有运气了.我觉得有一种方法可以包含所有需要的文件,我只是不确定如何.任何帮助,将不胜感激.谢谢.

python exe pyqt4 cx-freeze python-3.x

10
推荐指数
1
解决办法
7641
查看次数

cx_Freeze - 防止包含不需要的包

我用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)

python deployment pyqt cx-freeze

10
推荐指数
1
解决办法
1万
查看次数

在Python中静态链接和动态链接意味着什么?

我知道C或C++中静态和动态链接的区别.但它在Python中意味着什么?由于它只是一个解释器,并且只有一种模式的导入机制,这有什么意义呢?

如果我通过排除特定库来使用cx_freeze冻结我的Python应用程序,它是一种动态链接吗?因为,用户必须自己下载并安装该库才能运行我的应用程序.

实际上我的问题是,我正在使用PySide库(使用LGPL v2.1)来开发Python GUI应用程序.图书馆说我应该动态链接到图书馆以遵守他们的法律条款(与Qt相同).在这种情况下,如何动态链接到PySide?

python qt pyside cx-freeze

10
推荐指数
1
解决办法
1005
查看次数

如果我有一个64位操作系统,我可以用cx_freeze创建一个32位程序吗?

我目前正在运行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)

python 64-bit 32-bit cx-freeze

10
推荐指数
1
解决办法
4016
查看次数

按下plot-Button后,cx_freeze转换的GUI-app(tkinter)崩溃

我几天来一直在处理这个问题,希望得到一些帮助.我开发了一个带有导入模块的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)

python tkinter matplotlib cx-freeze python-3.x

10
推荐指数
2
解决办法
8521
查看次数

冻结脚本中的多处理python

我正在尝试将脚本编译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 windows multiprocessing cx-freeze python-3.x

10
推荐指数
1
解决办法
323
查看次数

安装cx_freeze后为什么会出现"没有名为cx_Freeze的模块"错误?

我正在尝试编译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)

python windows cx-freeze

9
推荐指数
1
解决办法
2万
查看次数

Cx_freeze错误丢失了sys.stdin

这是困扰我一段时间的问题.我查了一下,但没有找到答案.我也试过自己弄清楚,但没有成功.每当我创建并尝试使用其中的input()函数冻结程序时,我都会得到相同的错误. 在此输入图像描述

我试过运行.exein命令提示符,但我得到了同样的错误.我的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 python-3.x

9
推荐指数
1
解决办法
5502
查看次数

'importlib._bootstrap'没有属性'SourceLoader'

我正在尝试用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)

我正在使用:

  • Python 3.5.0
  • 来自pypi的Esky 0.9.9(最新)
  • cx_freeze 4.3.4-2

我在Manjaro(Linux)上.我无法弄清楚问题的来源.你可以帮我一把吗?

python cx-freeze esky

9
推荐指数
3
解决办法
1万
查看次数