gpt4 book ai didi

python - os.path 在多个文件导入中使用 Pyinstaller 指向错误的位置

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:31 27 4
gpt4 key购买 nike

我有两个 python 文件 main.pyaux.py位于同一目录中。

main.py包含以下代码:

import aux
print "aux imported"

aux.py包含以下代码:

import os
current_path = os.path.dirname(os.path.realpath(__file__))
print current_path

现在,当我使用 pyinstaller --onefile main.py 将 main.py 捆绑到 .exe 时并尝试运行生成的 main.exe,我得到以下输出:

C:\Users\vimanyua\AppData\Local\Temp\3\_MEI90~1
aux imported

可以看出,pyinstaller 使用临时文件夹来定位我的 aux.py,这给我带来了很多问题,因为 aux.py在我的实际代码中读取位于当前目录中的其他同级文件。如果我只是为 aux.py 创建一个 .exe喜欢 pyinstaller --onefile aux.py - 它输出正确的路径

C:\Users\vimanyua\Documents\pyinstaller test\dist

我阅读了 this link 上的文档正如我想运行 aux.py首先,我尝试创建一个像这样的 exe 文件 -

pyinstaller --onefile --runtime-hook=aux.py main.py

它创建一个main.exe运行 aux.py首先运行 main.exe 。当它运行 aux.py 时,我得到以下输出:

C:\Users\vimanyua\Documents\pyinstaller test\dist
C:\Users\vimanyua\AppData\Local\Temp\3\_MEI90~1
aux imported

我的main.py实际上使用 aux.py 中的多个函数/变量所以我无法摆脱 import aux main.py中的声明我真的不想将代码合并到一个文件中。

有人可以给我任何指导吗?谢谢!

最佳答案

请使用sys._MEIPASS,而不是使用__file__来引用路径。要引用 aux.py 文件的同级文件,请使用此辅助函数:

import sys
import os

def resource_path(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)

例如,如果在 aux.py 中您想读取名为 readme.txt 的同级文件,您可以引用:

filepath = resource_path('readme.txt')

请参阅文档 here .

关于python - os.path 在多个文件导入中使用 Pyinstaller 指向错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55032830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com