命令: pyinstaller --windowed --onefile --clean --noconfirm target.py
问题: 如果,打包使用绝对路径会出现每更换一台电脑,而且脚本中需要调用资源文 件,就要重新进行配置路径;
解决方法:获取脚本运行的当前路径,在用于其他资源调取的路径
命令:import os, sys
path = os.path.dirname(os.path.dirname(os.path.realpath(sys.executable)))
path 获取的是脚本运行当前路径的上一级路径;
后面调用文件路径根据文件夹和脚本的层级关系,随意更换path
比如你在和当前文件并列的"game"文件夹下有"score.txt"文件,那么相对路径表示为:"game/score.txt"
就是和这个py文件并列的文件夹前面不需要加"/",后面的都需要加,别忘了加上后缀。
例:
with open("game/score.txt", mode = "a+", encoding = "utf-8") as f:
score = f.readline()
相对路径是相对脚本文件来的。
比如脚本在C:/python目录下,相同目录下有一个文件叫test.txt
那么绝对路径就是 C:/python/test.txt,相对路径就是test.txt
使用脚本 open('C:/python/test.txt','r') 和 open('test.txt','r')效果都是一样的
我们可以多做几次试验,把”Example.class”移动到不同路径下,同时在那些路径下,执行”java Example”命令启动jvm,我们会发现这个”当前用户目录”是不断变化的,它的路径始终和我们在哪启动jvm的路径是一致的.
搞清了这些,我们可以使用相对路径来创建文件,例如:
File file = new File(“a.txt”)
File.createNewFile()
假设jvm是在”D:\”下启动的,那么a.txt就会生成在D:\a.txt
此外,这个参数还可以使用一些常用的路径表示方法,例如”.”或”.\”代表当前目录,这个目录也就是jvm启动路径.所以如下代码能得到当前目录完整路径:
File f = new File(“.”)
String absolutePath = f.getAbsolutePath()
System.out.println(absolutePath)//D:\
最后要说说在eclipse中的情况:
Eclipse中启动jvm都是在项目根路径上启动的.比如有个项目名为blog,其完整路径为:D:\work\IDE\workspace\blog.那么这个路径就是jvm的启动路径了.所以以上代码如果在eclipse里运行,则输出结果为” D:\work\IDE\workspace\blog.”