我正在尝试使用twisted和Queue编译一些脚本。
pyinstaller sample.py --onefile
# -*- coding: utf-8 -*-#
from twisted import *
import queue as Queue
a = Queue.Queue()
不幸的是,生成的文件因ImportError: No module named queue
而失败。
答案 0 :(得分:8)
我认为这根本不是PyInstaller或Twisted相关的问题。 Queue
模块是标准库的一部分,问题在于您如何命名它。在Python 2中,它是带有大写字母的Queue
,但在Python 3中,它被重命名为queue
以遵循更标准的命名约定,其中模块具有小写名称。
你的脚本看起来像是Python 3的Python 2代码的端口(因此是as Queue
的{{1}}部分),但你仍然使用Python 2运行它。除了import
导入错误之外,这可能会以其他更微妙的方式失败(例如,它的Unicode处理可能都是错误的。)
答案 1 :(得分:6)
pip install twisted --upgrade
修复了一切。
<强>更新强>
也不要忘记在cmdline中使用 - hidden-import = queue 。
答案 2 :(得分:2)
通过使用此命名我获得了成功。我使用Python 2.7
import Queue
queue = Queue.Queue()
并使用pyinstaller传递此参数:
--hidden-import=Queue
它有效。
答案 3 :(得分:1)
在使用Python 2.7的Windows上,高达3.2的pyinstaller可能会被具有相似名称的队列和队列模块混淆。 https://github.com/pyinstaller/pyinstaller/issues/1935
这是在pyinstaller的主干上修复的。我不得不从源代码安装pyinstaller来解决这个问题。
git clone https://github.com/pyinstaller/pyinstaller
cd pyinstaller
python setup.py install