pyinstaller打包exe,获取程序路径出错

pyinstaller打包exe后在非开发电脑上运行,报错找不到文件,添加打印后发现运行在了(win10)user/local/temp路径下,由于使用的相对路径,导致找不到程序目录下的文件了

解决方式:

不让它在local/temp下运行暂时不好处理,因此想办法使用绝对路径

最开始使用的方法是:

file_path = Path(__file__).resolve()
dir_path = file_path.parent

发现再运行依然获取到的路径是local/temp

后来发现可以换这种方式:

path, app_name = os.path.split(sys.argv[0])
os.chdir(path)

问题解决    Hi~ o(* ̄▽ ̄*)ブ


下面介绍一下python的sys.argv

sys.argv 是 Python 的 sys 模块中的一个非常有用的列表,它包含了从命令行传递给 Python 脚本的参数。sys.argv 的第一个元素(sys.argv[0])通常是执行脚本的名称(可能是脚本的路径,取决于你如何调用它)。其余的元素(sys.argv[1:])则是任何附加的命令行参数。

示例

假设你有一个名为 script.py 的 Python 脚本,内容如下:

import sys  
  
print("脚本名称:", sys.argv[0])  
print("参数列表:", sys.argv[1:])  
  
for i, arg in enumerate(sys.argv[1:], start=1):  
    print(f"参数 {i}: {arg}")

如果你在命令行中这样运行这个脚本:

python script.py arg1 arg2 arg3

输出将会是:

脚本名称: script.py  
参数列表: ['arg1', 'arg2', 'arg3']  
参数 1: arg1  
参数 2: arg2  
参数 3: arg3

注意事项

  • sys.argv 是一个列表,所以你可以使用所有列表操作来访问和处理它。
  • 当你从命令行传递参数时,它们通常是字符串。
  • 如果你的脚本被用作其他脚本或应用程序的一部分(例如,通过 subprocess 模块调用),那么 sys.argv[0] 可能会是不同于你期望的值。
  • 在编写需要命令行参数的脚本时,最好为这些参数提供默认值或使用命令行解析库(如 argparse),以便在参数缺失或格式不正确时提供有用的反馈。

使用 argparse 模块

对于更复杂的命令行参数处理,Python 的 argparse 模块提供了强大的功能。这个模块允许你定义参数的类型、默认值、帮助消息等,并可以自动生成帮助文档。以下是一个简单的 argparse 示例:

import argparse  
  
parser = argparse.ArgumentParser(description='一个简单的命令行参数示例')  
parser.add_argument('integers', metavar='N', type=int, nargs='+', help='一个或多个整数')  
parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max,  
                    help='求和(默认:求最大值)')  
args = parser.parse_args()  
print(args.accumulate(args.integers))

这个脚本定义了两个参数:一个是位置参数(需要至少一个整数),另一个是可选的 --sum 标志。你可以像这样运行它:

python script.py 1 2 3 4 --sum

 

或者简单地:

python script.py 1 2 3 4

在第二种情况下,脚本将使用 max 函数(因为 --sum 标志没有提供)。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值