使用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.4
和pyinstaller 3.3
我刚刚将ayncio 3.4.3
添加到项目中(之前一切正常)
任何想法都会受到欢迎
答案 0 :(得分:0)
经过深入挖掘后,我想出了一个解决方案。
问题的根源是:
zmq
(zeromq
)。它嵌入了自己的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
到目前为止,我找不到任何副作用