Python cx_Freeze ImportError cannot import name idnadata

2024-05-29 09:51:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个简单的脚本来表示文本,如下所示:

from gtts import gTTS
import os
import random
from playsound import playsound

def say(voice_text, capitalize = True):

    voice = gTTS(text = (voice_text), lang = "en")
    fileName = "%d.mp3" %random.randint(1, 999999999)
    voice.save(fileName)
    if capitalize == True:
        print(voice_text.capitalize()+"...")
    else:
        print(voice_text+"...")

    playsound(fileName)

    os.remove(fileName)

我在一个外部文件中运行该函数,然后将其构建到用于cx\u冻结的setup.py中。在

^{pr2}$

以上代码用于设置。 在以下位置执行exe后:

build
+-exe.win-amd64-3.6
| -main.exe

在cmd中,我得到以下错误:

Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run
    module.run()
  File "C:\Python36\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run
    exec(code, m.__dict__)
  File "main.py", line 1, in <module>
  File "C:\Users\name\Desktop\pyExe test\other.py", line 2, in <module>
    from say import say
  File "C:\Users\name\Desktop\pyExe test\say.py", line 1, in <module>
    from gtts import gTTS
  File "C:\Python36\lib\site-packages\gtts\__init__.py", line 2, in <module>
    from .tts import gTTS
  File "C:\Python36\lib\site-packages\gtts\tts.py", line 2, in <module>
    import re, requests, warnings
  File "C:\Python36\lib\site-packages\requests\__init__.py", line 98, in <module>
    from . import packages
  File "C:\Python36\lib\site-packages\requests\packages.py", line 7, in <module>
    locals()[package] = __import__(package)
  File "C:\Python36\lib\site-packages\idna\__init__.py", line 2, in <module>
    from .core import *
  File "C:\Python36\lib\site-packages\idna\core.py", line 1, in <module>
    from . import idnadata
ImportError: cannot import name 'idnadata'

有人能解释一下我为什么会犯这个错误吗?在


Tags: textinfrompyimportlibpackagesline
2条回答

FWIW,我今天在RHEL7.5上的cxu Freeze 5.1.1和python3.6.0(ActivePython)中遇到了这个问题。在经历了很多次尝试和失败之后设置.py,我通过以下方式运行cxfreeze脚本来解决这个问题:

cxfreeze myscript.py  include-modules=requests,requests.packages.idna,requests.packages.idna.idnadata

我发现在我的设置.py文件也被忽略了,这种将它们添加到include modules列表中的技术对它们也是有效的。在

就像我说的,FWIW。在

更新:我发现手动将依赖项复制到构建的lib文件夹中修复了这个问题,因为它只复制了idna模块的一半。在

相关问题 更多 >

    热门问题