我在同一目录中有两个python文件outfile = open("userInput.txt","w")
userInput = int(input("Enter a number to the text file: "))
count = 0
while(userInput != -1)
outfile.write(str(userInput) + "\n")
userInput = int(input("Enter a number to the text file: "))
count+=1
if count == 0:
print("There is no numbers in the text file")
outfile.write("There is no numbers in the text file")
outfile.close()
和main.py
。
aux.py
包含以下代码:
main.py
import aux
print "aux imported"
包含以下代码:
aux.py
现在,当我使用import os
current_path = os.path.dirname(os.path.realpath(__file__))
print current_path
将main.py捆绑到.exe并尝试运行生成的main.exe时,我得到以下输出:
pyinstaller --onefile main.py
可以看出,pyinstaller使用临时文件夹定位我的aux.py,这对我来说造成了很多问题,因为实际代码中的C:\Users\vimanyua\AppData\Local\Temp\3\_MEI90~1
aux imported
会读取其当前目录中的其他同级文件。如果我像aux.py
一样为aux.py
创建一个.exe,它将输出正确的路径
pyinstaller --onefile aux.py
我阅读了this link的文档,并且由于我想先运行C:\Users\vimanyua\Documents\pyinstaller test\dist
,所以我尝试创建一个像这样的exe文件-
aux.py
它将创建一个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
语句,我真的不想合并代码成一个文件。
任何人都可以向我提供任何指导吗?谢谢!
答案 0 :(得分:0)
请不要使用__file__
来引用路径,而应使用sys._MEIPASS
。
要引用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。