回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个使用Jinja2模板的python脚本,并尝试使用Pyinstaller创建一个单文件夹分发版。在</p>
<p>在Jinja中,我让程序通过使用<code>PackageLoader</code>类来理解模板的位置。下面的代码显示它指向的是<code>pycorr</code>Python包下的<code>templates</code>文件夹。在</p>
<pre><code>env = Environment(loader=PackageLoader('pycorr', 'templates'))
template = env.get_template('child_template.html')
</code></pre>
<p>下面是我的文件夹结构:</p>
^{pr2}$
<p>当我使用Pyinstaller将包编译到一个文件夹中时,我没有看到任何与Jinja2相关的警告/错误,我可以启动.exe文件。但是,当程序开始查找Jinja2模板时,它将失败,控制台窗口上显示以下错误消息:</p>
<pre><code>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
</code></pre>
<p>我不太理解错误消息,但我猜Pyinstaller需要找到<code>templates</code>文件夹。所以我在Pyinstaller.spec文件中添加了以下行:</p>
<pre><code>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')
</code></pre>
<p>但这似乎不能解决问题。在</p>
<p>有人能帮忙吗?我把Pyinstaller手册读了好几遍,但就是搞不懂。在</p>