ImportError:运行我的应用程序时没有名为“队列”的模块被 cx_freeze 冻结

Posted

技术标签:

【中文标题】ImportError:运行我的应用程序时没有名为“队列”的模块被 cx_freeze 冻结【英文标题】:ImportError: No module named 'queue' while running my app freezed with cx_freeze 【发布时间】:2016-11-23 15:40:02 【问题描述】:

我正在使用 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'

甚至尝试在没有帮助的情况下安装包“六”。 我的 setup.py 是 从 cx_Freeze 导入设置,可执行文件 导入 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的新手

【问题讨论】:

我遇到了完全相同的问题。你搞清楚了吗? 【参考方案1】:

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

导入Queuerequests 对我有用,所以:

import requests
from multiprocessing import Queue

而且我认为没有必要在 "packages": ["urllib", "requests"] 中指定 urllib

【讨论】:

在 setup.py 中,options="build_exe": "packages": ["multiprocessing"] 也可以解决问题(我正在运行 cx_Freeze 6.0b1)【参考方案2】:

有几个基于项目包的选项:

方法一:

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

方法二: 队列在多处理模块中,所以:

from multiprocessing import Queue

方法3: 将点子从 1.5.6 更新到 8.1.2

`sudo python -m pip install -U pip`

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

from Six.moves.queue import Queue //不知道你是怎么导入六个包的

【讨论】:

【参考方案3】:

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

【讨论】:

至少使用 cx_Freeze 6.0b1【参考方案4】:

除了

from multiprocessing import Queue

我回滚到旧版本的 cx_freeze:

pip install cx-freeze==4.3.3

此外,“请求”库抱怨缺少“urllib3”模块。我将其升级到 requests==2.13.0,现在一切正常。

我在 Win10 上使用 Python 3.4。希望这会有所帮助。

【讨论】:

我试过 "pip install cx-freeze==4.3.3" 现在我什至不能使用 cx_freeze: "No module named cx_freeze" 请帮忙。如何将其恢复为最新版本?! pip install cx-freeze --upgrade

以上是关于ImportError:运行我的应用程序时没有名为“队列”的模块被 cx_freeze 冻结的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:在 Heroku 上部署时没有名为“解耦”的模块

ImportError:没有名为“appdirs”的模块

ImportError:没有名为 redis 的模块

ImportError:没有名为 solcx 的模块

使用 Pmw 时出现“ImportError:没有名为 tkinter 的模块”

ImportError:尝试运行 Pythontex 时没有名为 pygments.styles 的模块