如何获取已执行的.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
相关产品推荐
相关产品推荐

