python - Pyinstaller,规范,包含不同的文件
问题描述
试图包含脚本中使用的 3 个文件scriptName
。
JSON 文件。
驱动文件。
徽标图标
尝试这样做,--add-data
但此选项适用于非代码使用文件。所以我尝试了spec
文件。
##specName.py##
block_cipher = None
added_files =
[
( 'jsonfile.json', '.D:\\Directory\\jsonfile'),
( 'logo1.ico', '.D:\\Directory\\logo1'),
( 'chromedriver.exe', '.D:\\Directory\\chromedriver')
]
a = Analysis(['gui.pyw'],
pathex=['D:\\Pyton\\...\\scriptName'],
binaries=[],
datas=added_files,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='MyExcutable.exe',
debug=False,
strip=False,
upx=True,
console=False, icon='D:\\Pyton\\...\\logo1.ico' )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='gui')
最后--pyi-build specName.spec
在制作一个可执行文件之后
pyinstaller.exe --onefile --windowed --icon=logo1.ico scriptName.py
编辑顺便说一句,在脚本上我使用这个函数作为相对路径 -
def resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
(它得到了原始路径)
但是exe不起作用。有任何想法吗?
解决方案
我想我
pyinstaller
像这样直接在规范文件上 调用pyinstaller.exe specName.spec
。spec 文件说明了脚本名称,无论是 onefile 等。我猜你上面写的最后一行实际上会生成一个新的 spec 文件。据我记得,作为
datas
参数传递的元组中的第二个元素应该包含一个相对路径(将相对于临时文件夹解释/创建到可执行文件将“自解压”的位置。参见例如here on how to find these files/之后的路径。如果您需要引用外部文件,则应在应用程序的配置/代码中使用直接路径。或者,您可以将其包含在包中并手动将其复制到外部位置(这似乎有点奇怪虽然做)。正如 pyinstaller 手册所述,首先在“单一目录”设置中进行调试可能是值得的,包括确保包含所有相关文件,然后才传递到单一文件模式(此时相对简单)
推荐阅读
- apache-nifi - 如何使用 Apache Nifi 删除重复文件?
- python - 修复了“ValueError: no enough values to unpack (expected 3, got 2)”但仍然出现错误
- mysql - 每周更新 MYSQL 字段的最佳方法?
- java - Java中的WeakHashMap如何泄漏内存?
- python - 如何在 django 中获得一周内每小时的平均值?
- mongodb - 什么是 MongoDB 基于角色的访问控制?
- docker - docker - 如何在 docker down 和 up 之后保持数据?
- c# - DSA - 在 Python 中签署消息以在 C# 中进行验证
- django - 当参数数量可能发生变化时,如何编写 OR 查询?
- powerline - 配置 powerline 以显示 git 状态