代码之家  ›  专栏  ›  技术社区  ›  Sylvain Biehler

PyInstaller导入错误:无法导入名称“SelectorEventLoop”

  •  2
  • Sylvain Biehler  · 技术社区  · 6 年前

    使用PyInstaller生成。在windows平台上,我在运行时出错。exe文件:

    > (venv) ...>my.exe Traceback (most recent call last):   File ".\my.py",
    > line 6, in <module>   File
    > ".\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py",
    > line 631, in exec_module exec(bytecode, module.__dict__)   File
    > "site-packages\websockets\__init__.py", line 3, in <module>   File
    > ".\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py",
    > line 631, in exec_module exec(bytecode, module.__dict__)   File
    > "site-packages\websockets\client.py", line 6, in <module>   File
    > ".\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py",
    > line 631, in exec_module exec(bytecode, module.__dict__)   File
    > ".\venv\Lib\site-packages\zmq\asyncio\__init__.py", line 18, in
    > <module> ImportError: cannot import name 'SelectorEventLoop' [3696]
    > Failed to execute script My
    

    我正在使用 python 3.6.4 pyinstaller 3.3 我刚刚加上 ayncio 3.4.3 项目(在此之前,所有工作都已完成)

    任何想法都会受到欢迎

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sylvain Biehler    6 年前

    在进行了大量挖掘之后,我想出了一个解决方案。

    问题的来源是:

    • 这个 zmq (用于 zeromq )我使用。它嵌入了自己的 asyncio
    • PyInstaller 修改 sys.path 从中添加库的步骤 zeromq

    导入时 异步IO 在我的代码中,它尝试从 zeromq 失败了。

    为了避开这一点,我做了一个丑陋的尝试。我发布它是为了帮助别人

    former_path = sys.path[:]
    sys.path = [v for v in sys.path if 'zmq' not in v]
    import asyncio
    sys.path = former_path
    

    到目前为止,我没有发现任何副作用