现在我正在使用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文件夹,包含我拥有的所有图标或位图文件应用
由于
答案 0 :(得分:16)
2013年12月19日更新
最后,我们明白了!
0.我正在使用当前版本的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\\'),
....
请记住,在树(...)函数中,第一个参数是要放在外面的文件夹:表示我想要包含此文件夹的所有内容(请注意,我将相对路径视为AppStart.py文件)放入我的.EXE文件的文件容器中。
4.在该修改之后重新执行pyinstaller命令,但在这种情况下指向我的.SPEC文件:
pyinstaller.py --windowed --noconsole --clean --onefile AppStart\AppStart.spec
最后,我的应用程序可以作为可执行文件执行,而无需像所提到的那样复制和粘贴所有外部文件夹。 但我一如既往地考虑好的实用方法。
感谢您的支持。
答案 1 :(得分:0)
您必须解决许多问题才能使其正常运行。例如:
(如前所述)第一个问题是通过根据执行模式调整路径来解决的。
NavigationController
对于第二个问题而不是树,我使用通配符(*)添加我需要的内容。
Editor > Embed In > Navigation Controller
然后在分析中
def app_path(path):
frozen = 'not'
if getattr(sys, 'frozen', False):
# we are running in executable mode
frozen = 'ever so'
app_dir = sys._MEIPASS
else:
# we are running in a normal Python environment
app_dir = os.path.dirname(os.path.abspath(__file__))
return os.path.join(app_dir, path)
一个彻底的答案很长。我已经写过this article,以详细说明如何解决此问题。
答案 2 :(得分:0)
您还可以在另一个 python 脚本中运行 pyinstaller,然后使用 shutil.copytree() 将文件夹移过去。或者对单个文件使用shutil.copyfile()。
import PyInstaller.__main__
import shutil
PyInstaller.__main__.run([
'YourProgram.py',
'--icon=UI/Your_Icon.ico',
'--onefile',
'--noconsole',
], )
shutil.copytree('path/', 'dist/path')