Ste*_*ldi 9 python pyinstaller
我在Windows上使用Pyinstaller来制作我项目的.exe文件.
我想使用--onefile
选项来获得干净的结果和易于分发的文件/程序.
我的程序使用一个config.ini
文件来存储配置选项.该文件可由用户自定义.
使用--onefile
选项Pyinstaller将所有声明的"data-file"放在单个.exe
文件文件中.
我已经看到了这个请求,但它给istructions添加一个包文件的onefile内部,而不是外部的,在与同级别.exe
,并在同一dist
目录下.
在某些时候,我曾想过在.spec文件中使用shutil.copy命令来复制这个文件......但我认为是错误的.
有人能帮我吗?我会很感激的:-)
Github上的一个存储库帮助我找到了我的问题的解决方案.
我使用shutil
模块和.spec
文件config-sample.ini
使用Pyinstaller --onefile
选项将额外的数据文件(在我的情况下是一个文件)添加到dist文件夹.
首先,我使用我需要的选项创建一个makepec文件:
$ pyi-makespec --onefile --windowed --name exefilename scriptname.py
Run Code Online (Sandbox Code Playgroud)
此命令创建一个exefilename.spec
与Pyinstaller一起使用的文件
现在我已经编辑了exefilename.spec
文件末尾添加以下代码.
import shutil
shutil.copyfile('config-sample.ini', '{0}/config-sample.ini'.format(DISTPATH))
shutil.copyfile('whateveryouwant.ext', '{0}/whateveryouwant.ext'.format(DISTPATH))
Run Code Online (Sandbox Code Playgroud)
此代码复制编译过程结束时所需的数据文件.您可以使用shutil
包中提供的所有方法.
最后一步是运行编译过程
pyinstaller --clean exefilename.spec
Run Code Online (Sandbox Code Playgroud)
结果是在dist文件夹中,您应该将已编译的.exe文件与复制的数据文件一起使用.
在Pyinstaller的官方文档中,我没有找到获得此结果的选项.我认为它可以被认为是一种解决方法......有效.
以下是如何访问与输出文件处于同一级别的文件。诀窍在于 sys.executable 是单文件 .exe 所在的位置。所以简单地这样做就可以了:
import sys
import os.path
CWD = os.path.abspath(os.path.dirname(sys.executable))
Run Code Online (Sandbox Code Playgroud)
使用它,例如
with open(os.path.join(CWD, "config.ini")) as config_file:
print(config_file.read())
Run Code Online (Sandbox Code Playgroud)
os.getcwd()
/relative 路径不起作用的原因可执行文件只是一个可执行存档,在执行时被提取到临时目录,.pyc文件在该目录中执行。因此,当您调用os.getcwd()
而不是可执行文件的路径时,您将获得临时文件夹的路径。
归档时间: |
|
查看次数: |
4675 次 |
最近记录: |