使用 cx_freeze 冻结应用程序时出现 ImportError: No module named 'queue' 错误。

7

我正在使用Python 3.4。我能够顺利运行我的Python脚本。 但是,当我运行我的冻结Python脚本时,出现了以下错误。 我也能够成功地使用cx_freeze冻结我的脚本。

C:\Program Files (x86)\utils>utils.exe
Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\requests\packages\__init__.py", line 27, i
n <module>
    from . import urllib3
  File "C:\Python34\lib\site-packages\requests\packages\urllib3\__init__.py", line 8, in <module>
    from .connectionpool import (
  File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 28, in <module>
    from .packages.six.moves.queue import LifoQueue, Empty, Full
  File "C:\Python34\lib\site-packages\requests\packages\urllib3\packages\six.py", line 203, in load_module
    mod = mod._resolve()
  File "C:\Python34\lib\site-packages\requests\packages\urllib3\packages\six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "C:\Python34\lib\site-packages\requests\packages\urllib3\packages\six.py", line 82, in _import_module
    __import__(name)
ImportError: No module named 'queue'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 12, in <module>
    __import__(name + "__init__")
  File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\Console.py", line 21, in <module>
    scriptModule = __import__(moduleName)
  File "utils.py", line 3, in <module>
  File "C:\Python34\lib\site-packages\requests\__init__.py", line 63, in <module>
    from . import utils
  File "C:\Python34\lib\site-packages\requests\utils.py", line 24, in <module>
    from ._internal_utils import to_native_string
  File "C:\Python34\lib\site-packages\requests\_internal_utils.py", line 11, in <module>
    from .compat import is_py2, builtin_str
  File "C:\Python34\lib\site-packages\requests\compat.py", line 11, in <module>
    from .packages import chardet
  File "C:\Python34\lib\site-packages\requests\packages\__init__.py", line 29, in <module>
    import urllib3
  File "C:\Python34\lib\site-packages\urllib3\__init__.py", line 8, in <module>
    from .connectionpool import (
  File "C:\Python34\lib\site-packages\urllib3\connectionpool.py", line 28, in <module>
    from .packages.six.moves.queue import LifoQueue, Empty, Full
  File "C:\Python34\lib\site-packages\urllib3\packages\six.py", line 203, in load_module
    mod = mod._resolve()
  File "C:\Python34\lib\site-packages\urllib3\packages\six.py", line 115, in _resolve
    return _import_module(self.mod)
  File "C:\Python34\lib\site-packages\urllib3\packages\six.py", line 82, in _import_module
    __import__(name)
ImportError: No module named 'queue'

即使尝试安装“six”软件包也没有帮助。 我的setup.py文件是 from cx_Freeze import setup, Executable import requests.certs

setup(
name = "utils" ,
version = "0.1" ,
description = " utils for accounts" ,
executables = [Executable("utils.py")],
options = {"build_exe": {"packages": ["urllib", "requests"],"include_files":[(requests.certs.where(),'cacert.pem')]}},

脚本导入以下模块

import requests
import urllib.request
import uuid
import json
import http.client
from xml.dom import minidom

任何帮助都将不胜感激,请把我看作是Python的初学者。

我遇到了完全相同的问题。你解决了吗? - Mac
4个回答

15

我在Ubuntu上使用Python 3.5时遇到了同样的问题。似乎cx_freeze与导入其他文件的库存在问题。

Queuerequests一起导入对我有用,因此:

import requests
from multiprocessing import Queue

我认为在 "packages": ["urllib", "requests"] 中指定 urllib 是不必要的。


1
{btsdaf} - Toilal

4
在setup.py中,options={"build_exe": {"packages": ["multiprocessing"]}}也可以解决问题。

At least with cx_Freeze 6.0b1 - Toilal

4

根据项目包,有几个选项可供选择:

方法1:

答案:我解决了问题,我的问题是在同一个目录下有一个名为queue.py的文件

方法2: 队列在multiprocessing模块中,因此:

from multiprocessing import Queue

方法3:将pip从1.5.6更新到8.1.2

`sudo python -m pip install -U pip`

重启系统(不确定是否必要,但只有在重启后才能列出新版本的pip) 方法4:

从six.moves.queue中导入队列(我不知道您如何导入six包)


1
此句为HTML代码,翻译为:除此之外。
from multiprocessing import Queue

我回滚到了旧版本的cx_freeze:

pip install cx-freeze==4.3.3

此外,“requests”库抱怨缺少“urllib3”模块。我将其升级到requests == 2.13.0,现在一切都正常了。
我正在使用Python 3.4和Win10。希望这可以帮到您。

我尝试了 "pip install cx-freeze==4.3.3",现在我甚至无法使用cx_freeze: "No module named cx_freeze"。请帮忙! 我该如何将它恢复到最新版本?! - Sebastian Nielsen
pip install cx-freeze --upgrade - RdB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接