为了创建一个python .exe文件,我一直在使用pyinstaller和这个命令:
pyinstaller --onefile -w -i favicon.ico "program.py"
这会创建一个/ dist文件夹,其中包含生成的.exe文件。 问题是我无法运行此.exe文件而不在.exe启动文件夹中包含以下程序文件。
+ Dir
- favicon.ico
- logo.gif
- data.csv
- program.exe
如何在.exe中包含.ico,.gif和.csv,以便真正成为" onefile"?
答案 0 :(得分:1)
我对python很新,所以如果代码有点乱,我会提前道歉。我遇到了与.csv文件类似的问题。我设法通过运行此代码将它们打包成.py文件:
import csv
myfinalvariable=[]
with open(PathToOriginalCsv + '\\' + 'NameOfCsv.csv', newline='') as csvfile:
myfirstvariable = csv.reader(csvfile, delimiter=',', quotechar='|')
for line in myfirstvariable:
myfinalvariable.append(' '.join(line).split())
pyfile=open('PathToDesiredFile\mynewfile.py', 'w')
pyfile.write('newcsv=%s' %(myfinalvariable))
pyfile.close
如果你有多个csv文件,你可以迭代这个。现在你有了'变量'的py文件,你可以'忘记'关于csv文件。因为如果将创建的py文件放入“项目文件夹”并放入:
from mynewfile import newcsv, newcsv2, ...
在您的代码中,您可以修改代码以使用变量'newcsv','newcsv2'等,而不是加载原始的csv文件。当您使用带有--onefile
参数的pyinstaller时,它会将'mynewfile.py'文件打包到创建的exe文件中。使用参数--icon=favicon.ico
时,Pyinstaller 3.0还会打包.ico文件。在Windows,Python3.4,Pyinstaller3.0上测试。我知道这是一个老问题,我希望这可以帮助那些偶然发现它的人。
答案 1 :(得分:0)
通过编写shell脚本,可由powershell执行,
该文件可以作为.exe文件制作和编写
其他文件可以moved
到新目录中。
现在所需要做的就是让Powershell脚本运行。
答案 2 :(得分:0)
您可以使用pyinstaller的--add-data
选项打包文件。例如,对于文件,您应该尝试:
> pyinstaller --onefile -w -i favicon.ico "program.py" --add-data "favicon.ico:favicon.ico'\
--add-data "lgog.gif:logo.gif" --add-data "data.csv:data.csv"
在其他操作系统上,可能需要将\
替换为^
(或全部在一行上完成。)
这应该将所有文件打包到exe中。
如果要从代码访问这些文件,则需要添加一些额外内容,否则程序将找不到它们。
import os, sys
def resource(relative_path):
if getattr(sys, 'frozen', False):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath('.'), relative_path)
当pyinstaller编译脚本时,它将在运行时将_MEIPASS
变量设置为所创建文件的临时路径。该脚本利用它来定位这些文件,并以未编译模式read more的默认默认路径返回到普通路径。
要通过代码访问文件,只需将所有指向文件的链接替换为resource('myfile.etc')
。例如,使用您的data.csv
文件
with open(resource('data.csv'), 'r') as csvfile:
# do stuff