Python cx_Freeze ImportError: cannot import name 'idnadata'
Python cx_Freeze ImportError: cannot import name 'idnadata'
我做了一个简单的脚本来表达文字,如下:
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_Freeze 的 setup.py
中。
from cx_Freeze import setup, Executable
executables = [
Executable('main.py',
shortcutName="test",
shortcutDir="DesktopFolder",
icon="icon.ico")
]
setup(name='hello',
version='0.1',
description='Sample cx_Freeze script',
executables=executables
)
以上代码用于设置。
在下执行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'
任何人都可以解释为什么我会收到此错误消息吗?
更新:我发现手动将依赖项复制到构建的 lib 文件夹中解决了问题,因为它只复制了 idna 模块的一半。
FWIW,我今天 运行 在 RHEL 7.5 上使用 cx_Freeze 5.1.1 和 Python 3.6.0 (ActivePython) 解决了这个问题。在 setup.py 中尝试了许多排列但失败后,我通过 运行 cxfreeze 脚本以这种方式解决了它:
cxfreeze myscript.py --include-modules=requests,requests.packages.idna,requests.packages.idna.idnadata
我发现我的 setup.py 文件中声明的其他包和模块也被忽略了,这种将它们添加到 --include-modules 列表的技术对它们也很有效。
正如我所说,FWIW。
我做了一个简单的脚本来表达文字,如下:
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_Freeze 的 setup.py
中。
from cx_Freeze import setup, Executable
executables = [
Executable('main.py',
shortcutName="test",
shortcutDir="DesktopFolder",
icon="icon.ico")
]
setup(name='hello',
version='0.1',
description='Sample cx_Freeze script',
executables=executables
)
以上代码用于设置。 在下执行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'
任何人都可以解释为什么我会收到此错误消息吗?
更新:我发现手动将依赖项复制到构建的 lib 文件夹中解决了问题,因为它只复制了 idna 模块的一半。
FWIW,我今天 运行 在 RHEL 7.5 上使用 cx_Freeze 5.1.1 和 Python 3.6.0 (ActivePython) 解决了这个问题。在 setup.py 中尝试了许多排列但失败后,我通过 运行 cxfreeze 脚本以这种方式解决了它:
cxfreeze myscript.py --include-modules=requests,requests.packages.idna,requests.packages.idna.idnadata
我发现我的 setup.py 文件中声明的其他包和模块也被忽略了,这种将它们添加到 --include-modules 列表的技术对它们也很有效。
正如我所说,FWIW。