无法使用torchaudio(CPU)从.py使用pyinstaller创建.exe:AttributeError:'_OpNamespace''torchaudio'对象没有属性'cuda_version'

问题描述 投票:0回答:2

我有一个 .py 脚本,它使用 torchaudio (没有 GPU)来处理 Windows 中的一些声音。为了分发它,我使用 pyinstaller 将其转换为 .exe。您可以使用这个简单的脚本重现该问题:

import torchaudio
import time

if __name__ == '__main__':
    t = torchaudio.transforms
    time.sleep(3)
    print("Success")

这个脚本可以从Python控制台正确运行

python test.py
,但我想创建一个在Windows中工作的
test.exe
(无需安装Python)。我使用 pyinstaller 创建
test.exe
pyinstaller test.py
。这将创建一个
build/test
文件夹,其中包含所有必需的依赖项(大约 1GB)。
test.exe
位于该文件夹内,但是当我双击它时,它失败并出现以下错误:

Traceback (most recent call last):
  File "torch\_ops.py", line 501, in __getattr__
    op, overload_names = torch._C._jit_get_operation(qualified_op_name)
RuntimeError: No such operator torchaudio::cuda_version

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "test.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
  File "torchaudio\__init__.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 499, in exec_module
  File "torchaudio\_extension.py", line 136, in <module>
  File "torchaudio\_extension.py", line 121, in _check_cuda_version
  File "torch\_ops.py", line 505, in __getattr__
    raise AttributeError(
AttributeError: '_OpNamespace' 'torchaudio' object has no attribute 'cuda_version'
[11648] Failed to execute script 'test' due to unhandled exception!

环境使用:

python==3.9.15
torch==1.13.0
six==1.15.0
numpy==1.22.4
scipy==1.6.0
sounddevice==0.4.5
torchaudio==0.13.0
pyinstaller==5.6.2

注意:我尝试使用 cuda 安装相同的 torch,最终出现相同的错误,并且版本增大了 4 倍。

python pytorch pyinstaller torchaudio
2个回答
1
投票

我能够使脚本发挥作用。以下是我为其运行所采取的步骤。

  1. 创建一个新的空目录并将脚本粘贴为

    main.py

  2. py -m venv venv
    &&
    venv\scripts\activate
    &&
    py -m pip install --upgrade pip pyinstaller

  3. pip install torchaudio==0.13.0 torch==1.13.0 numpy=1.22.4 sounddevice==0.4.5 six==1.15.0 scipy

  4. pyinstaller -F main.py

  5. 进入 venv\Lib\site-packages 并复制整个

    torchaudio
    文件夹并将其与
    venv
    main.py

    一起粘贴到顶级目录中
  6. 在main.spec中设置

    datas=[('./torchaudio','./torchaudio')]

  7. pyinstaller main.spec

编译可执行文件后运行...它仍然发出一些警告,但它运行并打印成功消息。


0
投票

AttributeError:'_OpNamespace''torchaudio'对象没有属性'cuda_version'

如果您的 CWD 是 torchaudio 存储库,则可能会发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.