【问题标题】:cxfreeze aiohttp cannot import compatcxfreeze aiohttp 无法导入 compat
【发布时间】:2017-05-30 20:53:54
【问题描述】:

我正在尝试使用 cx_freeze 为使用 aiohttp 包的 Python 3 编写的 Web 应用程序构建二进制 dist。

基本上我做到了:

cxfreeze server.py

得到一个dist 输出

但是在运行./server 二进制文件时,我收到以下消息:

  File "/usr/local/lib/python3.5/dist-packages/cx_Freeze/initscripts/__startup__.py", line 12, in <module>
    __import__(name + "__init__")
  File "/usr/local/lib/python3.5/dist-packages/cx_Freeze/initscripts/Console.py", line 24, in <module>
    exec(code, m.__dict__)
  File "server.py", line 1, in <module>
  File "/usr/local/lib/python3.5/dist-packages/aiohttp/__init__.py", line 10, in <module>
    from .protocol import *  # noqa
  File "/usr/local/lib/python3.5/dist-packages/aiohttp/protocol.py", line 17, in <module>
    from . import errors, hdrs
  File "/usr/local/lib/python3.5/dist-packages/aiohttp/errors.py", line 3, in <module>
    from asyncio import TimeoutError
  File "/usr/lib/python3.5/asyncio/__init__.py", line 21, in <module>
    from .base_events import *
  File "/usr/lib/python3.5/asyncio/base_events.py", line 32, in <module>
    from . import compat

ImportError: cannot import name 'compat'

【问题讨论】:

    标签: python python-3.5 cx-freeze


    【解决方案1】:

    希望你已经能够解决这个问题,但是对于像我一样搜索这个问题的人,我会回答:

    这个compat 模块是asyncio 的一部分,不会被cx_Freeze 发现。我必须将asyncio 添加到setup.pybuild_exe 选项的packages 列表中才能将其包含在内:

    setup(
        ...
        options = {
            'build_exe': {
                'packages': ['encodings', 'asyncio']
            },
        }
    )
    

    【讨论】:

    • 以下在setup.py 中为我修复了它:buildOptions = dict(packages = ['asyncio'], excludes = [])
    • setup.py 是什么?使用它的应用程序?
    • cxfreeze 是否以某种方式检测到目录中的 setup.py?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多