py2exe不适用于标准电子邮件模块
你好.我试图使用py2exe将脚本转换为exe.构建过程显示:
似乎缺少以下模块
可执行文件不起作用.引用的模块不包括在内.我在互联网上研究了这个,我发现py2exe在标准的lib电子邮件模块中使用的Lazy导入有问题.不幸的是,我没有成功找到解决此问题的方法.有人可以帮忙吗?
谢谢,
脚本中的PS Imports如下所示:
代码:从电子邮件中选择所有导入字符串,时间,sys,os,smtplib.MIMEMultipart从email.MIMEBase导入MIMBultipart从email.MIMEText导入MIMEBase从电子邮件导入编码器导入MIMEText
有几个实用程序 - 都具有不同的过程,限制和目标操作系统 - 用于获取Python包及其所有依赖项,并将它们转换为易于发送给客户的单个二进制程序:
我的情况更进一步:第三方开发人员希望为我的应用程序编写插件,扩展或附加组件.当然,一个令人生畏的问题是,像Windows这样的平台上的用户最容易安装插件或插件,以便我的应用程序可以轻松发现它们已经安装.但除此基本问题之外还有另外一个问题:第三方开发人员如何将扩展与扩展本身需要的任何库(可能是二进制模块,如lxml)捆绑在一起,以便插件的依赖关系可以在同一时间导入插件可用的时间.
怎么能接近这个?我的应用程序是否需要在磁盘上使用自己的插件区域以及自己的插件注册表来使其易于处理?或者是否有一些通用机制,我可以避免自己编写,这将允许作为单个可执行文件分发的应用程序环顾四周并找到也作为单个文件安装的插件?
当我使用Python解释器运行它时,我的python程序(Python 2.6)工作正常,它连接到Oracle数据库(10g XE)而没有错误.但是,当我使用py2exe编译它时,可执行版本在调用cx_Oracle.connect()时失败并显示"无法获取Oracle环境句柄".
我没有高兴地试过以下事情:
ORACLE_HOME以及PATH我的测试用例:
testora.py:
import cx_Oracle
import decimal # needed for py2exe to compile this correctly
def testora():
"""testora
>>> testora.testora()
<cx_Oracle.Connection to scott@localhost:1521/orcl>
X
"""
orcl = cx_Oracle.connect('scott/tiger@localhost:1521/orcl')
print orcl
curs = orcl.cursor()
result = curs.execute('SELECT * FROM DUAL')
for (dummy,) in result:
print dummy
if __name__ == '__main__':
testora()
Run Code Online (Sandbox Code Playgroud)
build_testora.py:
from distutils.core import setup
import py2exe, sys
sys.argv.append('py2exe')
setup(
options = {'py2exe': {
'bundle_files': 2,
'compressed': True …Run Code Online (Sandbox Code Playgroud) 我使用python和wxwidgets开发了一个小程序.这是一个非常简单的程序,它只使用一个迷你框架在需要时显示一些信息,其余时间它什么也没显示,只在任务栏中显示一个图标.
当我使用py2exe(单文件exe模式,优化)构建exe时,我得到一个6MB大小的文件!
我尝试不包括一些不需要的库或dll,但我仍然无法理解为什么我会在任务栏中只获得一个迷你框架和图标这么大的文件.
有没有办法减少py2exe生成的exe的大小?
这是我自己减少一点的方法:
options = {"py2exe":{"excludes" : ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
'Tkconstants', 'Tkinter'],
"dll_excludes": ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
'tk84.dll'],
Run Code Online (Sandbox Code Playgroud)
谢谢.
我刚刚创建了我的第一个py2exe可执行文件,并注意到使用EXE,创建了一个大小约为1.4 MB的ZIP文件.
我的问题是,我可以减小它的大小,或者预计使用py2exe生成的EXE的典型大小将是~4 MB(这意味着所有文件:python2.6dll,library.zip)
什么时候需要指定要包含的模块?是不是py2exe搜索并包含所需的任何内容:http://www.py2exe.org/index.cgi/FAQ?
为什么它包含未使用的模块,例如["Tkconstants","Tkinter","tcl","wx"](我使用Qt,但在我的电脑上安装了wx),然后需要被排除在外?
一直试图弄清楚如何让py2exe更优雅地处理错误.基本上发生了两件奇怪的事情:
1)关闭程序后弹出消息=>想要抑制(不显示)此弹出窗口
2)在c:\ Program Files\AppName\AppName.exe.log中创建日志文件(有时写入此文件夹有权限错误)=>将日志重定向到c:\ ProgramData
我想我可能只是将代码放在错误的位置并且py2exe引导程序代码在我设置它们之后触发但我不确定.我已经尝试在生成错误日志之前放置此代码,但它仍然会进入py2exe引导它们到的地方(StdErr对象)
我的程序结构如下
src/
python/
gui/
__main__.py
Run Code Online (Sandbox Code Playgroud)
主 .py
if __name__ == "__main__":
# Redirect py2exe log to somewhere else if windows
if hasattr(sys,"frozen") and sys.frozen in ("windows_exe", "console_exe"):
stdout_file = "c:\ProgramData\AppName\out.log"
stderr_file = "c:\ProgramData\AppName\err.log"
sys.stdout = open(stdout_file, "w")
sys.stderr = open(stderr_file, "w")
try:
gui = AppNameGui()
gui.main()
except:
traceback.print_exc()
Run Code Online (Sandbox Code Playgroud) 我在Python 2.x,PyQT4和MySQLdb中为我的公司编写了一个应用程序,并使用py2exe打包.
最近,我对应用程序进行了一些更新,将其移植到Python 3.4和PySide.我还删除了MySQLdb依赖项并添加了Requests.我用Python 3新推出的py2exe打包了这个.
突然间,我被Windows防御者标记为我的可执行文件是恶意软件.这是日志条目:
Windows Defender has detected spyware or other potentially unwanted software.
For more information please see the following:
http://go.microsoft.com/fwlink/?linkid=37020&name=BrowserModifier:Win32/Zwangi&threatid=144384
Name:BrowserModifier:Win32/Zwangi
ID:144384
Severity:High
Category:Browser Modifier
Path Found:file:C:\Users\alan.moore\Desktop\ticketuserclient3-beta1\ticketuserclient3\Contact tech support.exe
Detection Type:Concrete
Detection Source:Downloads and attachments
Status:Unknown
User:WILLIAMSON-TN\alan.moore
Process Name:C:\Windows\Explorer.EXE
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
谢谢你的帮助.
更新:显然我在python3.4下使用py2exe编译的任何内容都会被识别出来.
我试过这个脚本:
import sys
import platform
print (sys.platform)
print ("".join(platform.uname))
Run Code Online (Sandbox Code Playgroud)
而这个setup.py
from distutils.core import setup
import os
import py2exe
setup(
windows=[{"script":"test.py", "dest_base":"Contact tech support"},],
options= {
"py2exe" : {
"compressed":1,
"optimize":2,
"bundle_files":3 …Run Code Online (Sandbox Code Playgroud) 我有一个用PyQt4构建的小应用程序,我试图用cx_freeze冻结,但是我遇到了cx_freeze的问题,包括我自己的应用程序工作所需的模块.
我有两个在我的应用程序中导入的模块,这些模块位于应用程序所在的文件夹上方.即:
申请路径:
Python的\ DataViewer的-PyQt4的\ DataViewer.py
其他模块:
Python\My Analysis Packages\Ephystools
Python\My Analysis Packages\PrairieAnalysis
在我的应用程序中,我使用(如果它们不在我的python路径中)导入这些
sys.path.append(os.path.abspath('../My Analysis Packages'))
Run Code Online (Sandbox Code Playgroud)
我尝试在setup.py文件中的'includes'和'packages'中包含PrairieAnalysis和EphysTools.我也试过包括"我的分析包".我也试过提供这些路径.
它们都包含init .py文件,因为实际的应用程序能够很好地导入它们.
如果我将PrairieAnalysis和/或EphysTools放在'includes'列表中,那么setup.py build会返回一个ImportError:
File "C:\Anaconda3\lib\site-packages\cx_Freeze\finder.py", line 386, in _ImportModule
raise ImportError("No module named %r" % name)
ImportError: No module named 'PrairieAnalysis'
Run Code Online (Sandbox Code Playgroud)
如果我将它们从'includes'中取出,则setup.py构建完成,但是当我打开应用程序时,我得到同样的错误.
我查看了各种cx_freeze模块导入问题,但似乎没有人处理过这个特定的场景.
我的实际setup.py:
# -*- coding: utf-8 -*-
import sys
from cx_Freeze import setup, Executable
base = None
if sys.platform == 'win32':
base = 'Win32GUI'
options = {
'build_exe': {
'includes': ['atexit', 'PrairieAnalysis', 'EphysTools'],
}
}
executables = [ …Run Code Online (Sandbox Code Playgroud) 我已经彻底搜索了谷歌,但无法找到答案.当我尝试用py2app构建时,我得到了这个错误:它可能是由于在代码中使用诸如'gspread'之类的模块引起的吗?或者因为我正在使用wxpython?令人不安的是'python setup.py py2app -A'没有问题.
running py2app
creating /Users/Bailejor/Desktop/build/bdist.macosx-10.5-x86_64/python2.7-standalone/app
creating /Users/Bailejor/Desktop/build/bdist.macosx-10.5-x86_64/python2.7-standalone/app/collect
creating /Users/Bailejor/Desktop/build/bdist.macosx-10.5-x86_64/python2.7-standalone/app/temp
creating build/bdist.macosx-10.5-x86_64/python2.7-standalone/app/lib-dynload
creating build/bdist.macosx-10.5-x86_64/python2.7-standalone/app/Frameworks
*** using recipe: virtualenv ***
*** using recipe: ftplib ***
*** using recipe: lxml ***
*** using recipe: PIL ***
*** using recipe: xml ***
*** using recipe: sip ***
*** using recipe: matplotlib ***
*** using recipe: pydoc ***
*** using recipe: docutils ***
*** using recipe: scipy ***
Traceback (most recent call last):
File "setup.py", line 18, in <module>
setup_requires=['py2app'],
File "//anaconda/lib/python2.7/distutils/core.py", …Run Code Online (Sandbox Code Playgroud) py2exe ×10
python ×9
py2app ×2
cx-freeze ×1
cx-oracle ×1
executable ×1
filesize ×1
importerror ×1
malware ×1
oracle ×1
pyinstaller ×1
python-3.x ×1
winapi ×1
windows ×1