Jinja2 şablonunu kullanan bir python betiğiyim ve Pyinstaller kullanarak bir tek klasör dağıtımı oluşturmaya çalışıyorum.Jinja2 Şablonunu Pyinstaller Dağıtımına İçermiyor
Jinja'da, programın şablonların konumunu bir PackageLoader
sınıfı kullanarak anlamasına izin veriyorum. Aşağıdaki kod, pycorr
Python paketinin altındaki templates
klasörüme işaret ettiğini gösterir.
env = Environment(loader=PackageLoader('pycorr', 'templates'))
template = env.get_template('child_template.html')
Ve burada gibi benim klasör yapısı görünüyor: Ben Pyinstaller kullanarak tek bir klasöre paket derlemek zaman
pycorr
| |
| + templates
| |
| + base.html
| + child.html
, ben jinja2 ile ilgili herhangi bir uyarı/hata görmüyorum ve ben .exe dosyasını başlatabiliyorum. Program jinja2 şablonuna aramaya başlar Ancak, bunun konsol penceresinde görüntülenen bu hata iletisiyle başarısız olur:
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
Gerçekten hata mesajı anlamıyorum ama benim tahminim Pyinstaller bulmalıyız olmasıdır templates
klasörü. Bu yüzden bu satırları Pyinstaller .spec dosyasına ekledim:
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')
Ancak sorunu çözmüyor gibi görünüyor.
Herkes yardımcı olabilir mi? Pyinstaller kılavuzunu birkaç kez okudum ama anlayamıyorum.
Bu soruna rağmen oldukça eski ve yazar belki de kendisi tarafından çözülmüş, 'pkg_resources' belirtildiği gibi pyinstaller tarafından desteklenmiyor (https://github.com/pyinstaller/pyinstaller/wiki/FAQ#misc). Bu nedenle Jinja2 Paket Yükleyici kullanılamaz. – jrast