编辑:我可以使用哪些工具来查看可执行文件在尝试访问 psycopg2 包时试图查找哪些包/文件?也许这可以帮助分析哪里出了问题。
我有一个 python 脚本,在使用解释器运行时运行得很好,但当我冻结它时,我收到错误:
sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgresql.psycopg2
Run Code Online (Sandbox Code Playgroud)
因为它在解释器中运行良好,但在冻结时失败,所以我怀疑我的 setup.py 文件有问题。
#-*- coding: 'utf-8' -*-
from cx_Freeze import setup, Executable
import sys
# Dependencies are automatically detected, but it might need
# fine tuning.
# execute this file with the command: python setup.py build
buildOptions = dict(packages = ['ht_cg.ht_cg_objects'],
includes = ['ht_cg.ht_cg_objects'],
excludes = ['tkinter', 'PyQt4', 'matplotlib', 'tcl', 'scipy'],
include_files = ['./cg_source_prep/readme.txt', "./ht_cg_objects/ht_db_config.cfg"],
build_exe = 'build/source_density_exe')
sys.path.append('./')
sys.path.append('../')
executables = [
Executable(script = "cg_source_save.py",
initScript = None, …
Run Code Online (Sandbox Code Playgroud) 我有一个使用 configparser 读取 ini 的 python 程序。我希望与 python 文件具有相同的名称,这就是我使用以下代码的原因:
# nativ python
#fileName = sys.argv[0].split('.')[0]
# compiled python
fileName = sys.argv[0].split('\\')[-1]
fileName = fileName.split('.')[0]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,根据我运行它的模式,我有不同的版本。将其作为 python 脚本 sys.argv 运行会产生与将其用作 exe 不同的结果。我手动切换它,有时我会忘记它,不得不更改它并重新编译整个东西。但我看到了其他事情,例如:
if sys.platform == "win64":
base = "Win64GUI"
else:
base = "Win32GUI"
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以使用类似于以下内容的方式检测 cx_freeze 是否正在编译源代码:
if getting_compiled():
fileName = sys.argv[0].split('.')[0]
else:
fileName = sys.argv[0].split('\\')[-1]
fileName = fileName.split('.')[0]
Run Code Online (Sandbox Code Playgroud) 我正在尝试从 python 脚本(使用 PyQt4 GUI 和 matplotlib)创建一个 .exe 文件。我将 cx_Freeze 5.1.1 版用于 64 位 Windows,并具有以下功能setup.py
:
import cx_Freeze
import sys
import matplotlib
base = "Win32GUI"
includes = ["atexit"]
buildOptions = dict(
#create_shared_zip=False,
#append_script_to_exe=True,
includes=includes
)
executables = [cx_Freeze.Executable(script = "main.py", base = base)] # icon = "chart32.jpg")]
cx_Freeze.setup(
name= "1ChPlotGUI",
options = dict(build_exe=buildOptions), # {"build_exe": {"packages": ["matplotlib"], "include_files":["chart32.jpg"]}},
version = "0.01",
description = "1 Channel Plotting app with GUI",
executables = executables
)
Run Code Online (Sandbox Code Playgroud)
跑完后
python setup.py build
Run Code Online (Sandbox Code Playgroud)
在 cmd …
我正在使用cx_freeze来冻结Python脚本以便分发到其他Windows系统.我按照指示做了所有事情,cx_freeze build\exe.win32-2.6
在包含我的源的文件夹中生成了一个 文件夹.该目录现在包含一堆PYD文件,一个library.zip文件,python DLL文件和主可执行文件.我需要分发哪些文件?伙计们,有什么帮助?
提前致谢.
所以,我有一些Python 3.3代码,我需要在Windows上制作.exe.我发现唯一的方法是使用cx_Freeze.但是,我甚至没有比安装更进一步.这个问题完美地描述了我的问题(除了我运行Python 3.3),还没有得到回答:
当我尝试从cmd运行"python setup.py build"时,我得到:
"importerror: no module named cx_freeze"
Run Code Online (Sandbox Code Playgroud)
我无法通过这一步,并且搜索了一个小时的解决方案失败了.
如果相关的Python安装在C:\ Python33.我安装的Python和cx_Freeze都是64位版本.我安装的cx_Freeze版本是:cx_Freeze-4.3.1.win-amd64-py3.3.我试过重新安装.当我在IDLE中"导入cx_Freeze"时,它不会显示任何错误.
请注意我是编程初学者.
我试图从带有C扩展模块的Python 3包在Windows上创建一个exe.在distutils中,您可以创建如下的扩展:
from distutils.core import setup, Extension
module1 = Extension('demo',
sources = ['demo.c'])
setup (name = 'PackageName',
version = '1.0',
description = 'This is a demo package',
ext_modules = [module1])
Run Code Online (Sandbox Code Playgroud)
然后,扩展将使用适当的编译器进行编译,并与命令一起放在其他模块旁边:
python setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
cx_Freeze是一个模块,可以将您的代码与Python解释器和相关的包一起打包到exe文件中.然后,最终用户可以在不安装Python的情况下使用您的程序.不幸的是,cx_Freeze没有Extension类,我找不到用cx_Freeze处理编译的方法.
我不确定的一个解决方案是首先使用distutils/setuptools构建扩展,然后使用cx_Freeze创建可执行文件.我不想重新发明轮子,所以我想知道在这个领域有更多经验的人是否有解决方案.
我在Windows上使用64位python 2.7.当我用cx_Freeze构建一个可执行文件然后运行它时,我得到一个错误窗口(,替换实名):
---------------------------
cx_Freeze: Python error in main script
---------------------------
Traceback (most recent call last):
File "C:\Python27\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
exec(code, m.__dict__)
File "ui.py", line 8, in <module>
File "C:\Users\<dir_name>\<file_name>.py", line 3, in <module>
import networkx as nx
File "C:\Python27\lib\site-packages\networkx\__init__.py", line 87, in <module>
import networkx.readwrite
File "C:\Python27\lib\site-packages\networkx\readwrite\__init__.py", line 14, in <module>
from networkx.readwrite.gml import *
File "C:\Python27\lib\site-packages\networkx\readwrite\gml.py", line 46, in <module>
from lib2to3.refactor import RefactoringTool
File "C:\Python27\lib\lib2to3\refactor.py", line 27, in <module>
from .fixer_util import find_root
File "C:\Python27\lib\lib2to3\fixer_util.py", line …
Run Code Online (Sandbox Code Playgroud) 我一直在尝试将我的Python 3.6程序转换为.EXE.当我使用cx_Freeze构建时.它会生成以下错误.(见下面的日志)
我之前和Kivy Module一起工作但是在构建失败之后,我仍然使用简单的Hello World程序尝试了它,它失败了.
我的安装文件包含from cx_Freeze import setup, Executable
import语句,
当我构建通过python setup.py build
它生成此日志.
F:\Python\test>python setup.py build
running build
running build_exe
Traceback (most recent call last):
File "setup.py", line 7, in
executables = [Executable('hello.py')])
File "C:\Users\UserName\AppData\Local\Programs\Python\Python35-32\lib\site-packages\cx_Freez
e\dist.py", line 349, in setup
distutils.core.setup(**attrs)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python35-32\lib\distutils\core.py", li
ne 148, in setup
dist.run_commands()
File "C:\Users\UserName\AppData\Local\Programs\Python\Python35-32\lib\distutils\dist.py", li
ne 955, in run_commands
self.run_command(cmd)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python35-32\lib\distutils\dist.py", li
ne 974, in run_command
cmd_obj.run()
File "C:\Users\UserName\AppData\Local\Programs\Python\Python35-32\lib\distutils\command\buil
d.py", line 135, in run
self.run_command(cmd_name)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python35-32\lib\distutils\cmd.py", …
Run Code Online (Sandbox Code Playgroud) 似乎PyInstaller和cx_Freeze将包含许多具有Anaconda2环境的软件包.
使用其中任何一个将生成超过600MB的文件,这主要是由于一系列包含最终包括Numpy的包含,其中包括其他所有内容.
包含导致600MB +价值套餐的示例:
import sys
from sys import argv
from os import path
from Tkinter import *
import tkFileDialog
from PyQt4 import QtCore, QtGui, uic, QtOpenGL
from moviepy.editor import *
Run Code Online (Sandbox Code Playgroud)
这似乎并不多,但我不能在没有明确排除Numpy的情况下减少文件,但即便如此它仍然是~140MB并且不会执行.
有没有人有处理这种情况的经验?600MB对于一个小应用程序来说太过分了.
我刚刚使用Cx_freeze冻结了一个适用于Windows的小应用程序.我知道我可以在数据库中保存一些日期(我使用的是sqlite3).但是应用程序需要在某个时刻创建一个文件夹来保存用户编写的草稿,但它无法正常工作.我无权创建文件夹.
代码 :
if not os.path.exists('drafts'):
os.makedirs('drafts')
Run Code Online (Sandbox Code Playgroud)
当我在'Documents'中的文件夹中测试它时,它工作得很好,但是在冻结之后却没有.实际上,考虑到我正在尝试创建文件夹,这并不是一个惊喜.所以,我想知道我应该在哪里保存文件(这些是文本文件).我也用代码得到了这个错误
commande = sqlite3.connect ('Base_de_donnees.db')
Run Code Online (Sandbox Code Playgroud)
cx-freeze ×10
python ×9
distutils ×2
python-2.7 ×2
windows ×2
anaconda ×1
build ×1
installation ×1
psycopg2 ×1
pyinstaller ×1
python-3.3 ×1
python-3.4 ×1
python-3.x ×1
sqlalchemy ×1