我已经使用cx_Freeze从我的Python-OCR程序(import pytesseract
)中创建了一个可执行文件。生成的.exe在我自己的计算机上可以正常工作。为了测试该程序,我制作了一个zip文件夹,并在共享点上与一些朋友和同事共享。
现在,可执行文件存在以下问题。似乎pytesseract没有包含在可执行文件/ zip文件夹中。
这是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创建的可执行文件中。这是最新版本。
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")])
答案 0 :(得分:1)
pytesseract
是Google Tesseract-OCR引擎的包装。为了使pytesseract
正常运行,需要安装Tesseract-OCR引擎,并且必须能够以tesseract
的身份调用tesseract命令(这意味着Tesseract-OCR安装目录必须位于路径)。
我认为可执行文件中已正确包含pytesseract
,但是tesseract
命令在“另一台PC”上不起作用(未在其中安装Tesseract-OCR或Tesseract-OCR安装目录不在PATH中。)
您需要告诉“另一台PC”的所有者安装Tesseract-OCR,并检查其是否可以从任何位置使用命令tesseract
启动。
另一种选择是使用build_exe
选项include_files
(您的变量additional_files
)将整个Tesseract-OCR安装目录包含在冻结的可执行文件中,并确保包含此目录已包含在目标PC的PATH中,但这可能与平台无关,因此不建议这样做。