PyInstaller ImportError:无法导入名称'SelectorEventLoop'

时间:2018-04-17 12:36:44

标签: python python-3.x pyinstaller python-asyncio

使用PyInstaller在Windows平台上生成.exe,运行.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.4pyinstaller 3.3 我刚刚将ayncio 3.4.3添加到项目中(之前一切正常)

任何想法都会受到欢迎

1 个答案:

答案 0 :(得分:0)

经过深入挖掘后,我想出了一个解决方案。

问题的根源是:

  • 我使用的zmqzeromq)。它嵌入了自己的asyncio
  • PyInstaller修改sys.path以添加zeromq中的库。

在我的代码中导入asyncio时,它会尝试从zeromq导入一个并失败。

我做了一个丑陋的黑客来解决这个问题。我发布它可能会帮助某人

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

到目前为止,我找不到任何副作用