Mam skrypt Pythona, który używa szablonu Jinja2, i próbuję utworzyć dystrybucję jednego folderu za pomocą Pyinstaller.Nie można dołączyć szablonu Jinja2 do dystrybucji Pyinstaller
W języku Jinja pozwolę programowi zrozumieć położenie szablonów przy użyciu klasy PackageLoader
. Poniższy kod pokazuje, że wskazuje na mój folder templates
pod pakietem Python pycorr
.
env = Environment(loader=PackageLoader('pycorr', 'templates'))
template = env.get_template('child_template.html')
A oto co moja struktura folderów wygląda następująco:
pycorr
| |
| + templates
| |
| + base.html
| + child.html
Kiedy skompilować pakiet w jednym folderze, używając Pyinstaller, nie widzę żadnego ostrzeżenia/błąd związany Jinja2, a ja "Jestem w stanie uruchomić plik .exe. Jednak, gdy program zacząć szukać Jinja2 szablon, nie jest on z tego komunikatu o błędzie wyświetlanego w oknie konsoli:
Traceback (most recent call last):
...
File "C:\Users\ ... \out00-PYZ.pyz\pycorr.WriterToHTML", line 96, in htmlout_table
File "C:\Users\ ... \out00-PYZ.pyz\pycorr.WriterToHTML", line 13, in __init__
File "C:\Users\ ... \out00-PYZ.pyz\pycorr.WriterToHTML", line 48, in __set_template
File "C:\Users\ ... \out00-PYZ.pyz\jinja2.environment", line 791, in get_template
File "C:\Users\ ... \out00-PYZ.pyz\jinja2.environment", line 765, in _load_template
File "C:\Users\ ... \out00-PYZ.pyz\jinja2.loaders", line 113, in load
File "C:\Users\ ... \out00-PYZ.pyz\jinja2.loaders", line 224, in get_source
File "C:\Users\ ... \dist\OCA_CO~1\eggs\setuptools-14.3-py2.7.egg\pkg_resources\__init__.py", line 1572, in has_resource
return self._has(self._fn(self.module_path, resource_name))
File "C:\Users\ ... \dist\OCA_CO~1\eggs\setuptools-14.3-py2.7.egg\pkg_resources\__init__.py", line 1627, in _has
"Can't perform this operation for unregistered loader type"
NotImplementedError: Can't perform this operation for unregistered loader type
ja naprawdę nie rozumiem komunikat o błędzie, ale wydaje mi się, że Pyinstaller trzeba znaleźć templates
folder. Więc dodałem te linie w .spec pliku Pyinstaller:
a.datas += [('BASE', './pycorr/templates/base.html', 'DATA')]
a.datas += [('TABLE', './pycorr/templates/table_child.html', 'DATA')]
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=None,
upx=False,
name='OCA_correlation')
Ale to nie wydaje się, aby rozwiązać ten problem.
Czy ktoś może pomóc? Przeczytałem instrukcję PyCryptera kilka razy, ale po prostu nie mogę tego rozgryźć.
Mimo, że to pytanie jest dość stare, a autor mógł to sobie wyobrazić, 'pkg_resources' nie jest obsługiwane przez program usuwający pismo, jak podano [tutaj] (https://github.com/pyinstaller/pyinstaller/wiki/FAQ#misc). Dlatego nie można użyć programu ładującego pakiety Jinja2. – jrast