cx_Freeze "ImportError: cannot import name 'vision"
cx_Freeze "ImportError: cannot import name 'vision"
我在我试图冻结的 Python 脚本中使用 TensorFlow。一切都很好,但是当我尝试 运行 它时,我得到这个错误:
Traceback (most recent call last):
File "C:\Users\.conda\envs\lib\site-packages\cx_Freeze\initscripts__startup__.py", line 14, in run module.run()
File "C:\Users\.conda\envs\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run exec(code, m.dict)
File "config.py", line 21, in
File "E:\Projects\test.py", line 7, in from google.cloud import vision
ImportError: cannot import name 'vision'
我正在使用 cx_Freeze。 google 库已成功添加到 Setup.py
脚本中。 __init__.py
也存在于 google 目录中。
Setup.py
:
from cx_Freeze import setup, Executable
import sys
import os
base = None
os.environ['TCL_LIBRARY'] = "C:\ProgramData\Anaconda3\tcl\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\ProgramData\Anaconda3\tcl\tk8.6"
os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(os.getcwd(), "cacert.pem")
if sys.platform == 'win32':
# base = "Win32GUI"
base = 'Console'
if sys.platform == 'win64':
# base = "Win64GUI"
base = 'Console'
include = ['numpy.core._methods', 'numpy.lib.format', 'jinja2', 'jinja2.ext', 'asyncio', 'constants', 'jinja2.debug']
packages = ['asyncio', 'jinja2', 'jinja2.ext', 'flask', 'numpy', 'pandas', 'connect_db', 'pymysql', 'pymysql.cursors',
'multiprocessing', 'multiprocessing.pool','google']
excludes = []
options = {'build_exe': {'packages': packages, 'includes': include, 'include_files': includefiles, 'excludes': excludes}}
flaskapp = Executable(script="config.py",
targetName="test.exe",
icon='test.ico'
)
setup(
name="",
version="1.0",
author="Test",
description="Test",
options={
'build_exe': {
'include_files': includefiles,
'includes': include,
'packages': packages,
'excludes': excludes,
'build_exe': "build"
}
},
executables=[flaskapp]
)
提前致谢
根据 GitHub 存储库,google/cloud/__init__.py
包含以下代码:
try:
import pkg_resources
pkg_resources.declare_namespace(__name__)
except ImportError:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
可能 cx_Freeze 无法识别此动态导入。尝试将 'pkg_resources'
或 'pkgutil'
添加到安装脚本中的 'packages'
列表。
编辑:
显然 __init__.py
文件也从 path_to_python_lib/site-packages/google/cloud/
目录中丢失,当 google-cloud-vision
使用 pip 安装时。尝试在冻结之前手动向该目录添加一个空的 __init__.py
文件。
谢谢@jpeg 我终于找到了解决方案。
- 我在
/site-packages/google
中也添加了 __init__.py
/site-packages/google/cloud
- 错误:
DistributionNotFound: The 'google-api-core' distribution was not found and is required by the application
编辑了 /site-packages/google/api_core/__init__.py
import requests_toolbelt.adapters.appengine
requests_toolbelt.adapters.appengine.monkeypatch()
import pkg_resources
old_get_distribution = pkg_resources.get_distribution
from pkg_resources import parse_version
def mp_get_distribution(*args, **kwargs):
# print args
# print kwargs
try:
res = old_get_distribution(*args, **kwargs)
except:
class Mock(object):
pass
mock = Mock()
mock.parsed_version = parse_version("2.6.1") #add sensible value
mock.version = parse_version("2.6.1") #add sensible value
return mock
return res
pkg_resources.get_distribution = mp_get_distribution
from google import api_core
我不得不修改 A14 提出的解决方案如下。
- 在/site-packages/google中添加init.py也在/site-packages/google/cloud中(相同)
in init.py in /site-packages/pkg_ressources import
后添加这一行
from pkg_resources import py2_warn
对于 Error:DistributionNotFound:未找到 'google-api-core' 分布,并且编辑 /site-packages/google/api_core/[=18 的应用程序需要该分布=]init.py
import pkg_resources
old_get_distribution = pkg_resources.get_distribution
from pkg_resources import parse_version
def mp_get_distribution(*args, **kwargs):
# print args
# print kwargs
try:
res = old_get_distribution(*args, **kwargs)
except:
class Mock(object):
pass
mock = Mock()
mock.parsed_version = parse_version("1.16.0") #add sensible value
mock.version = parse_version("1.16.0") #add sensible value
return mock
return res
pkg_resources.get_distribution = mp_get_distribution
from google import api_core
我在我试图冻结的 Python 脚本中使用 TensorFlow。一切都很好,但是当我尝试 运行 它时,我得到这个错误:
Traceback (most recent call last):
File "C:\Users\.conda\envs\lib\site-packages\cx_Freeze\initscripts__startup__.py", line 14, in run module.run()
File "C:\Users\.conda\envs\lib\site-packages\cx_Freeze\initscripts\Console.py", line 26, in run exec(code, m.dict)
File "config.py", line 21, in
File "E:\Projects\test.py", line 7, in from google.cloud import vision
ImportError: cannot import name 'vision'
我正在使用 cx_Freeze。 google 库已成功添加到 Setup.py
脚本中。 __init__.py
也存在于 google 目录中。
Setup.py
:
from cx_Freeze import setup, Executable
import sys
import os
base = None
os.environ['TCL_LIBRARY'] = "C:\ProgramData\Anaconda3\tcl\tcl8.6"
os.environ['TK_LIBRARY'] = "C:\ProgramData\Anaconda3\tcl\tk8.6"
os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(os.getcwd(), "cacert.pem")
if sys.platform == 'win32':
# base = "Win32GUI"
base = 'Console'
if sys.platform == 'win64':
# base = "Win64GUI"
base = 'Console'
include = ['numpy.core._methods', 'numpy.lib.format', 'jinja2', 'jinja2.ext', 'asyncio', 'constants', 'jinja2.debug']
packages = ['asyncio', 'jinja2', 'jinja2.ext', 'flask', 'numpy', 'pandas', 'connect_db', 'pymysql', 'pymysql.cursors',
'multiprocessing', 'multiprocessing.pool','google']
excludes = []
options = {'build_exe': {'packages': packages, 'includes': include, 'include_files': includefiles, 'excludes': excludes}}
flaskapp = Executable(script="config.py",
targetName="test.exe",
icon='test.ico'
)
setup(
name="",
version="1.0",
author="Test",
description="Test",
options={
'build_exe': {
'include_files': includefiles,
'includes': include,
'packages': packages,
'excludes': excludes,
'build_exe': "build"
}
},
executables=[flaskapp]
)
提前致谢
根据 GitHub 存储库,google/cloud/__init__.py
包含以下代码:
try:
import pkg_resources
pkg_resources.declare_namespace(__name__)
except ImportError:
import pkgutil
__path__ = pkgutil.extend_path(__path__, __name__)
可能 cx_Freeze 无法识别此动态导入。尝试将 'pkg_resources'
或 'pkgutil'
添加到安装脚本中的 'packages'
列表。
编辑:
显然 __init__.py
文件也从 path_to_python_lib/site-packages/google/cloud/
目录中丢失,当 google-cloud-vision
使用 pip 安装时。尝试在冻结之前手动向该目录添加一个空的 __init__.py
文件。
谢谢@jpeg 我终于找到了解决方案。
- 我在
/site-packages/google
中也添加了__init__.py
/site-packages/google/cloud
- 错误:
DistributionNotFound: The 'google-api-core' distribution was not found and is required by the application
编辑了/site-packages/google/api_core/__init__.py
import requests_toolbelt.adapters.appengine
requests_toolbelt.adapters.appengine.monkeypatch()
import pkg_resources
old_get_distribution = pkg_resources.get_distribution
from pkg_resources import parse_version
def mp_get_distribution(*args, **kwargs):
# print args
# print kwargs
try:
res = old_get_distribution(*args, **kwargs)
except:
class Mock(object):
pass
mock = Mock()
mock.parsed_version = parse_version("2.6.1") #add sensible value
mock.version = parse_version("2.6.1") #add sensible value
return mock
return res
pkg_resources.get_distribution = mp_get_distribution
from google import api_core
我不得不修改 A14 提出的解决方案如下。
- 在/site-packages/google中添加init.py也在/site-packages/google/cloud中(相同)
in init.py in /site-packages/pkg_ressources import
后添加这一行from pkg_resources import py2_warn
对于 Error:DistributionNotFound:未找到 'google-api-core' 分布,并且编辑 /site-packages/google/api_core/[=18 的应用程序需要该分布=]init.py
import pkg_resources old_get_distribution = pkg_resources.get_distribution from pkg_resources import parse_version def mp_get_distribution(*args, **kwargs): # print args # print kwargs try: res = old_get_distribution(*args, **kwargs) except: class Mock(object): pass mock = Mock() mock.parsed_version = parse_version("1.16.0") #add sensible value mock.version = parse_version("1.16.0") #add sensible value return mock return res pkg_resources.get_distribution = mp_get_distribution from google import api_core