You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取已执行的.pex文件的名称与路径?

如何获取已执行的.pex文件的名称与路径?

我懂你现在的困惑——用pex打包后,脚本里的__file__和sys.argv[0]指向的都是缓存目录里的临时文件,完全拿不到你实际运行的那个.pex文件的路径对吧?

先还原下你的场景,方便其他同学理解:
你有这样一个脚本/tmp/test.py:

import os
import sys
print(__file__)
print(os.path.dirname(os.path.realpath(__file__)))
print(sys.argv)

用这条命令打包:

python -m pex --exe test.py -o test.pex

执行./test.pex后,输出的都是pex缓存目录里的路径,完全看不到test.pex的影子。

其实解决方法很简单,pex在运行时会自动帮你设置一个环境变量PEX_EXECUTABLE,这个变量的值就是你实际执行的.pex文件的完整绝对路径。

你只需要修改脚本,读取这个环境变量就行,比如把你的test.py改成这样:

import os
import sys

# 获取完整的pex文件路径
pex_path = os.environ.get('PEX_EXECUTABLE')
if pex_path:
    print("已执行的PEX文件路径:", pex_path)
    # 单独提取文件名
    pex_filename = os.path.basename(pex_path)
    print("PEX文件名:", pex_filename)
else:
    print("未检测到PEX环境")

# 保留你原来的输出,方便对比
print("\n原输出内容:")
print(__file__)
print(os.path.dirname(os.path.realpath(__file__)))
print(sys.argv)

重新打包执行后,就能看到你想要的.pex文件的路径和名称了。

这个方法比去解析pex的内部缓存结构靠谱多了,因为环境变量是pex官方明确提供的,不会因为pex版本更新而轻易失效。

备注:内容来源于stack exchange,提问作者spinkus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:58:06