PyInstaller不会导入队列

时间:2016-04-04 10:25:12

标签: python pyinstaller

我正在尝试使用twisted和Queue编译一些脚本。

pyinstaller sample.py --onefile
# -*- coding: utf-8 -*-#
from twisted import *
import queue as Queue
a = Queue.Queue()

不幸的是,生成的文件因ImportError: No module named queue而失败。

4 个答案:

答案 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