cx_Freeze:在其他PC上使用pytesseract可执行文件失败 [英] cx_Freeze: Executable with pytesseract fails on other PC

查看:111
本文介绍了cx_Freeze:在其他PC上使用pytesseract可执行文件失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经使用cx_Freeze从我的Python-OCR程序(导入pytesseract )制作了一个可执行文件。生成的.exe在我自己的计算机上工作正常。为了测试该程序,我制作了一个zip文件夹,并在共享点上与一些朋友和同事共享。
现在可执行文件存在以下问题。似乎pytesseract没有包含在可执行文件/ zip文件夹中。

I've made an executable file from my Python - OCR program (import pytesseract) using cx_Freeze. The resulting .exe works fine on my own machine. To test the program I made a zip-folder and shared it with some friends and colleagues on a share point. Now there is the following problem with the executable. It seems like pytesseract isn't included in the executable / zip-folder.

这是ErrorLog:

Here is the ErrorLog:

The file is not a PNG-file:  20181108 Kontaktanzeigen-Er_sucht_sie.jpg
The file is not a PNG-file:  20181108 Kontaktanzeigen-Sie_sucht_ihn.jpg
The file is not a PNG-file:  20181108 Language family tree.jpg
The file is not a PNG-file:  20181108 relax.jpg
The file is not a PNG-file:  20181109 Essen wie Gott am Südpol S1.JPG
The file is not a PNG-file:  20181109 Fahrzeugschein1.jpg
The file is not a PNG-file:  20181112 sie_sind_alle_so_dumm.jpg
Exception in thread Thread-3:
Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 170, in run_tesseract
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\subprocess.py", line 707, in __init__
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\subprocess.py", line 992, in _execute_child
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\threading.py", line 916, in _bootstrap_inner
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\threading.py", line 864, in run
  File "C:\Users\TFischer\PycharmProjects\Test_Project\OCR.py", line 67, in img_to_text
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 294, in image_to_string
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 202, in run_and_get_output
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 172, in run_tesseract
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 170, in run_tesseract
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\subprocess.py", line 707, in __init__
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\subprocess.py", line 992, in _execute_child
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\threading.py", line 916, in _bootstrap_inner
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\threading.py", line 864, in run
  File "C:\Users\TFischer\PycharmProjects\Test_Project\OCR.py", line 73, in img_to_text1
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 294, in image_to_string
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 202, in run_and_get_output
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\site-packages\pytesseract\pytesseract.py", line 172, in run_tesseract
pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your path

第一行绝对清楚。我发现了一些修改 setup.py 的想法,以将所有导入内容包含在cx_Freeze创建的可执行文件中。这是最新版本。

The first lines are absolute clear. I've found some ideas to modify setup.py to include all imports in the executable created by cx_Freeze. Here is the latest version.

from cx_Freeze import setup, Executable
import os.path

PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')

additional_mods = ['numpy.core._methods', 'numpy.lib.format']
additional_files = [os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
            os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll')]

options = {
    'build_exe': {'include_files': additional_files, 'includes': additional_mods}
    }

setup(options = options,
      name = "main" ,
      version = "0.1" ,
      description = "" ,
      executables = [Executable("main.py")])


推荐答案

pytesseract 是Google Tesseract-OCR的包装引擎为了使 pytesseract 正常工作,需要安装Tesseract-OCR引擎,并且必须能够以 tesseract (这意味着Tesseract-OCR安装目录需要位于PATH中)。

pytesseract is a wrapper for Google's Tesseract-OCR Engine. In order that pytesseractworks, the Tesseract-OCR engine needs to be installed and one must be able to invoke the tesseract command as tesseract (this means that the Tesseract-OCR installation directory needs to be in the PATH).

我相信 pytesseract 已正确包含在可执行文件中,但 tesseract 命令在另一台PC上不起作用(未在其中安装Tesseract-OCR或Tesseract- OCR安装目录不在PATH中。)

I believe that pytesseract has been properly included in the executable but that the tesseract command does not work on the "other PC" (either Tesseract-OCR is not installed there or the Tesseract-OCR installation directory is not in the PATH there).

您需要告诉另一台PC的所有者安装Tesseract-OCR并检查是否可以从任何位置使用命令 tesseract 开始。

You need to tell the owner of the "other PC" to install Tesseract-OCR and to check that it can be started with the command tesseract from any location.

另一个选择是包括整个Tesseract-OCR安装目录在冻结的可执行文件中,使用 build_exe 选项 include_files (您的变量 additional_files ),并确保该公司包含的目录包含在目标PC的PATH中,但这可能与平台无关,因此不建议这样做。

Another option would be to include the whole Tesseract-OCR installation directory in the frozen executable using the build_exeoption include_files (your variable additional_files) and to make sure that this included directory gets included in the PATH on the target PC, but this is probably not platform-independent and thus not recommended.

这篇关于cx_Freeze:在其他PC上使用pytesseract可执行文件失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆