小编Boa*_*Boa的帖子

使用pyInstaller/UPX进行的可执行文件遇到QtCore4.dll错误

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

python qt pyinstaller upx pyside

15
推荐指数
1
解决办法
1194
查看次数

从字符串中删除多个子字符串的最有效方法?

从字符串中删除子串列表的最有效方法是什么?

我想要一个更清洁,更快捷的方法来做到以下几点:

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)

python string performance

14
推荐指数
1
解决办法
7461
查看次数

"WindowsError:[错误5]访问被拒绝"使用urllib2

在使用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)

python windows urllib2

6
推荐指数
1
解决办法
2191
查看次数

在python中批量/批量DNS查找?

我有一个脚本以下列方式获取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的数据)?

python dns

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

是否有一系列一次性变量的简写语法?

假设你有这样的情况:

_, _, _, substring_1, _, substring_2 = some_string.split(',')
Run Code Online (Sandbox Code Playgroud)

是否有表示前三个连续下划线的简写方式,表示要丢弃的值?我特别想知道是否存在这样的语法快捷方式,而不是关于完成相同任务的各种方法.

编辑 - 我对Python 2.7特定的答案很感兴趣.

python-2.7

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

按选项值查找标记

假设您有一个 Leaflet 地图,带有一组自定义标记,每个标记都有一个唯一的 id 值:

var marker = new L.marker(latlong, {id: id, icon: icon}).addTo(map);
Run Code Online (Sandbox Code Playgroud)

通过“id”值访问标记的推荐方法是什么(特别是,我想修改标记的类)?

javascript leaflet

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