Bonjour, ravi de vous rencontrer, bonne nuit. Je suis désolé.
Les informations disponibles dans cet article sont:
Installez Tesseract-OCR séparément (Professeur! Je pense que c'est la cause numéro un!)
Écrivez * .py avec le pyocr approprié
pyinstaller hoge.py
Lorsque vous démarrez foo.exe crache avec dist, le journal suivant est généré ...
Running from container, but no tessdata (C:\Users\{user}\AppData\Local\Temp\_MEI{tempnumber}\data) found !
Running from container, but no tessdata (C:\Users\{user}\AppData\Local\Temp\_MEI{tempnumber}\data) found !
Eh bien, même si cela se produit, il peut être exécuté si Tesseract-OCR est installé séparément sur le PC cible, donc il n'y a pas beaucoup de gens qui sont fondamentalement en difficulté ...
Cependant, comme il est sale, je vais l'effacer.
Un rapide coup d'œil sur pyocr révèle tesseract.py près de la ligne: 120.
Telle est la cause.
if getattr(sys, 'frozen', False): # pragma: no cover
# Pyinstaller support
path = os.environ["PATH"]
if sys._MEIPASS in path:
# already changed
return
tesspath = os.path.join(sys._MEIPASS, "tesseract")
tessprefix = os.path.join(sys._MEIPASS, "data")
logger.info("Running in packaged environment")
if not os.path.exists(os.path.join(tessprefix, "tessdata")):
logger.warning(
"Running from container, but no tessdata ({}) found !".format(
tessprefix
)
)
else:
logger.info("TESSDATA_PREFIX set to [{}]".format(tessprefix))
os.environ['TESSDATA_PREFIX'] = tessprefix
if not os.path.exists(tesspath):
logger.warning(
"Running from container, but no tesseract ({}) found !".format(
tesspath
)
)
else:
logger.info("[{}] added to PATH".format(tesspath))
os.environ['PATH'] = (
tesspath + os.pathsep + os.environ['PATH']
)
Il semble qu'ils font diverses choses, mais l'utilisateur ne le sait pas (pleurs)
Apparemment, ce serait bien si sys._MEIPASS avait tesseract et data.
Ensuite, vous pouvez ajouter tesseract et des données à sys._MEIPASS! Solution! Enthousiasme! Prêt à combattre!
Ajoutez ce qui suit à * .spec
Tree('{Tesseract-Chemin OCR}',prefix='tesseract'),
Tree('{Tesseract-Chemin OCR}',prefix='data'),
Running from container, but no tessdata (C:\Users\{user}\AppData\Local\Temp\_MEI{tempnumber}\data) found !
Running from container, but no tessdata (C:\Users\{user}\AppData\Local\Temp\_MEI{tempnumber}\data) found !
Il semble que la puissance de combat soit encore insuffisante.
Finalement, c'est devenu comme ça.
Je dois avoir plus de données tessdata dans les données, et je ne comprends pas la signification car le contenu est dupliqué. (Il y a peut-être une meilleure solution ...)
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['{main}.py'],
pathex=['{src_dir}'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
Tree('{data}',prefix='data'),
Tree('{tesseract}',prefix='tesseract'),
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='{appname}',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True , icon='icon.ico')
Il n'y a aucun changement ici.
{main}.py {} .py Aucune description particulière requise
pyinstaller! Maintenant que tu es prêt
$> pyinstaller --onefile --clean --icon={icon}.ico -n {appname} {main}.py
Et faites de {appname} .spec comme ci-dessus
$> pyinstaller {appname}.spec
Et distribuez {appname} .exe sous dist et vous êtes prêt à partir!
Il ne s'agit que d'une méthode d'environnement Windows, mais bien sûr, vous n'avez pas besoin d'installer Tesseract-OCR séparément sur le PC cible.
S'il y a un meilleur moyen, je vous serais reconnaissant si vous pouviez m'apprendre dans les commentaires sur Twitter ou ici!
Puis Otonoshi
Recommended Posts