mac打包python + pyinstaller,解决相对路径问题

Python07

mac打包python + pyinstaller,解决相对路径问题,第1张

            命令: pip pyinstaller

            命令: pyinstaller --windowed --onefile --clean --noconfirm target.py

            注: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.”