擅长:python、mysql、java
<p>在创建可执行文件时,我也遇到了这个问题。因为.spec文件使用的是python,所以glob模块是我的解决方案。在</p>
<pre><code>imagesList = []
imagesList.append( ('icon.ico', '..\\pathfinder\\icon.ico', 'DATA') )
import glob
allImages = glob.glob('..\\pathfinder\\*.png')
for eachImage in allImages:
imageParts = eachImage.split('\\')
imagesList.append( (imageParts[-1], eachImage, 'DATA') )
print imagesList
a.datas += imagesList
</code></pre>
<p>第2行关于图标.ico是分开的,因为它具有不同的文件扩展名,因此可以排除在外。。\pathfinder'是所有程序文件的路径(相对于pyinstaller目录)。glob在目录中搜索所有的.png文件(我有65个文件,并且拒绝手工编写这些文件),并以字符串形式返回这些文件的列表,完整的相对目录完好无损。为了把它分成一个文件名列表,我使用字符串.拆分()反斜杠。然后,对于每一个,将字符串分割的最后一部分的元组(最终只会是图像的文件名)和完整路径名附加到用户创建的列表中。最后,使用所有文件的列表,将其添加到a.datas中。在</p>
<p>我已经通过命令行确认了这确实可以正常工作,并且您可以为任何其他文件扩展名重新复制循环。在</p>
<p>不幸的是,尽管我的可执行文件似乎正确地拉取和附加了文件名,但我的可执行文件似乎并不是用这些文件创建的(或者可执行文件在它自己的数据中找不到文件),而且我仍然需要在同一个目录中保存原始图像才能正常工作;也许我的元组元素排序不正确(因此,如果是这样的话,您应该相应地调整我的代码)。不过,希望这种动态负载仍然适用于您。imageParts[-1]表示每个.png的文件名,而eachImage代表其完整路径(或者相对路径,如果这是glob中使用的)。在</p>