我用pyInstaller编译的python程序结果超过400 MB.该程序的GUI基于htmlPY,它是"PySide的QtWebKit库的包装器".该程序的大尺寸部分归功于它利用numpy,scipy和nltk,部分原因是图形库.
为了最小化程序的大小,我安装了UPX.这将程序的大小减小到略超过100MB,这很大,但可以接受.
第一个问题是pyInstaller没有检测到htmlPy,并且没有将它包含在已编译的程序中.这可以通过将我的Python安装中的htmlPy模块复制到pyInstaller创建的'dist'目录中来解决.这样做之后,没有UPX编译的程序版本运行正常.
将htmlPy添加到'dist'目录后,运行可执行文件会在创建GUI时崩溃程序.我不确定这是否是由于UPX和QT之间或UPX,QT和htmlPy之间存在问题.Windows"问题签名"如下:
Problem signature:
Problem Event Name: APPCRASH
Application Name: main.exe
Application Version: 0.0.0.0
Application Timestamp: 00000000
Fault Module Name: QtCore4.dll
Fault Module Version: 4.8.7.0
Fault Module Timestamp: 561e435a
Exception Code: c0000005
Exception Offset: 000000000010883a
Run Code Online (Sandbox Code Playgroud)
关于这里发生了什么,以及如何解决它的想法?
编辑:
这些是我的.spec文件的内容:
# -*- mode: python -*-
block_cipher = None
added_files = [
( 'htmlPy/binder.js', 'htmlPy' ),
( 'templates/*', 'templates' ),
]
a = Analysis(['main.py'],
pathex=['C:\\..\\My_App'],
binaries=None,
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=['rthook_pyqt4.py'],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher) …Run Code Online (Sandbox Code Playgroud) 从字符串中删除子串列表的最有效方法是什么?
我想要一个更清洁,更快捷的方法来做到以下几点:
words = 'word1 word2 word3 word4, word5'
replace_list = ['word1', 'word3', 'word5']
def remove_multiple_strings(cur_string, replace_list):
for cur_word in replace_list:
cur_string = cur_string.replace(cur_word, '')
return cur_string
remove_multiple_strings(words, replace_list)
Run Code Online (Sandbox Code Playgroud) 在使用urllib2阅读网站时,我收到"WindowsError:[错误5]访问被拒绝"消息.
from urllib2 import urlopen, Request
from bs4 import BeautifulSoup
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11'}
req = Request('https://' + url, headers=hdr)
soup = BeautifulSoup( urlopen( req ).read() )
Run Code Online (Sandbox Code Playgroud)
完整的追溯是:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "C:\Python27\lib\urllib2.py", line 431, in open
response = self._open(req, data)
File "C:\Python27\lib\urllib2.py", line 449, in _open
'_open', req)
File "C:\Python27\lib\urllib2.py", line 409, …Run Code Online (Sandbox Code Playgroud) 我有一个脚本以下列方式获取DNS(CNAME,MX,NS)数据:
from dns import resolver
...
def resolve_dns(url):
response_dict = {}
print "\nResolving DNS for %s" % (url)
try:
response_dict['CNAME'] = [rdata for rdata in resolver.query(url, 'CNAME')]
except:
pass
try:
response_dict['MX'] = [rdata for rdata in resolver.query(url, 'MX')]
except:
pass
try:
response_dict['NS'] = [rdata for rdata in resolver.query(url, 'NS')]
except:
pass
return response_dict
Run Code Online (Sandbox Code Playgroud)
对于连续的URL,顺序调用此函数.如果可能的话,我想通过同时获取多个URL的数据来加快上述过程.
有没有办法完成上面的脚本为一批URL做的事情(可能返回一个dict对象列表,每个dict对应一个特定URL的数据)?
假设你有这样的情况:
_, _, _, substring_1, _, substring_2 = some_string.split(',')
Run Code Online (Sandbox Code Playgroud)
是否有表示前三个连续下划线的简写方式,表示要丢弃的值?我特别想知道是否存在这样的语法快捷方式,而不是关于完成相同任务的各种方法.
编辑 - 我对Python 2.7特定的答案很感兴趣.
假设您有一个 Leaflet 地图,带有一组自定义标记,每个标记都有一个唯一的 id 值:
var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
Run Code Online (Sandbox Code Playgroud)
通过“id”值访问标记的推荐方法是什么(特别是,我想修改标记的类)?
python ×4
dns ×1
javascript ×1
leaflet ×1
performance ×1
pyinstaller ×1
pyside ×1
python-2.7 ×1
qt ×1
string ×1
upx ×1
urllib2 ×1
windows ×1