问题 Pyinstaller:生成-exe文件+文件夹(在--onefile模式下)


现在我正在使用Pyinstaller。 我有一个脚本从img文件夹中获取图像..

/python
|----/img
|----|----icon1.ico
|----|----icon2.ico
|----maint.py

我生成.exe的脚本是

pyinstaller.py --windowed --noconsole --clean --onefile maint.py

问题是只生成.exe文件,但省略了整个文件夹/ img。

问题:为了自动获取.exe文件+ / img文件夹,我需要在上一行中添加哪种附加语法?

2013年12月18日更新

我的意思是:执行pyinstaller.py脚本后,所有参数,我必须在/ dist文件夹中看到:.exe文件+ / img文件夹,包含我的应用程序的所有图标或位图文件

谢谢


2631
2017-12-16 02:54


起源

“自动获取.exe文件+ / img文件夹”是什么意思? - Blender
只需将该文件夹复制到 /dist 一旦编译过程成功。 - poke
@Blender我的意思是:在执行pyinstaller.py脚本后,使用所有参数,我必须在/ dist文件夹中看到:.exe文件+ / img文件夹,包含我的应用程序的所有图标或位图文件 - MigRome
@poke是的,这是另一种选择,但是手动。我正在寻找具有相同命令的解决方案。有时,我没有权限将文件夹复制并粘贴到/ dist文件夹中。 - MigRome
如果 您 没有这样做的特权,那么 pyinstaller.py 哪一个 你跑 也没有这些特权。在任何情况下,只需编写一个部署脚本(a)调用pyinstaller和(b)复制文件。 - poke


答案:


2013年12月19日更新

最后,我们得到了它!

我正在使用当前版本的PYInstaller + Python 2.67和Sublime Text作为编辑器。

1.如果您的Py脚本需要一些文件,图标,图像,您必须包含一个从项目文件夹(开发中)检索这些文件的功能,或者形成临时数据文件夹(如果部署)。此脚本必须完全位于您放置亲属路径以获取资源的部分中。请严格遵循本指南: https://stackoverflow.com/a/13790741

2.在上一个代码之后,你必须首次执行pyinstaller命令 - 我在我的问题后发布。

3.现在,打开执行PYInstaller(位于PYinstaller /)命令后生成的.spec文件,并在“a.binaries”行之后将下一行添加到EXE()函数中:

exe = EXE(pyz,
          a.scripts,
          a.binaries,
          Tree('..\\python\\images', prefix='images\\'),
....

请记住,在 树(...) function第一个参数是放在外面的文件夹: 这意味着我想要包含此文件夹的所有内容 (请注意,我正在为AppStart.py文件设置相对路径) 进入我的.EXE文件的文件容器。

4.在该修改之后重新执行pyinstaller命令,但在这种情况下指向我的.SPEC文件:

pyinstaller.py --windowed --noconsole --clean --onefile AppStart\AppStart.spec

最后,我的应用程序可以作为可执行文件执行,而无需像所提到的那样复制和粘贴所有外部文件夹。 但一如既往,我认为这是一种实用的方法。

感谢您的支持。


13
2017-12-19 08:54



这是我发现包含完整目录的最可靠方式!看看没有这个选项人们在做什么:) stackoverflow.com/a/12033695/2230844 - denfromufa
答案没有回答最初的问题。有没有办法告诉pyinstaller自己复制dist目录中的文件或目录,而不是将它们添加到bundle? - bitek