首页 > 解决方案 > 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]
)

先感谢您

标签: python-3.xcx-freeze

解决方案


根据 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'

编辑:

显然,当使用 pip 安装时,目录__init__.py中也缺少该文件。尝试在冻结之前手动将空文件添加到此目录。path_to_python_lib/site-packages/google/cloud/google-cloud-vision__init__.py


推荐阅读