我一直试图完成这个简单的程序,并把它变成一个exe,但每次我运行exe我收到以下错误:
Traceback (most recent call last):
File "webtest.py", line 7, in <module>
File "PIL\Image.py", line 3227, in open
FileNotFoundError: [Errno 2] No such file or directory: 'gs-image.png'
"这是我的计划"
import webbrowser
import pystray
import PIL.Image
image = PIL.Image.open("gs-image.png")
def on_clicked(icon, item):
if str(item) == "Open GS Digi Ecosystem":
webbrowser.open_new("https://www.google.com/")
elif str(item) == "Close":
icon.stop()
icon = pystray.Icon("test", image, menu=pystray.Menu(
pystray.MenuItem("Open GS Digi Ecosystem", on_clicked),
pystray.MenuItem("Close", on_clicked)
))
icon.run()
这里是.spec文件夹
block_cipher = None
a = Analysis(
['webtest.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='webtest',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=['gs-icon.ico'],
)
我的图像都在原始脚本所在的文件夹中,我使用以下行创建exe
pyinstaller -i gs-icon.ico --onefile --noconsole webtest.py
我尝试将此行添加到.spec,但仍然收到相同的错误 Added Spec line
datas=[('gs-image.png','.')],
- 然后跑 *
pyinstaller webtest.spec
我注意到,如果图像文件与exe在同一个文件中,那么程序运行完美。
1条答案
按热度按时间waxmsbnn1#
这是因为
"gs-image.png"
是一个相对路径。相对路径相对于用户的当前工作目录。当您单击运行exe
文件时,当前工作目录是包含exe
文件的目录。这就是为什么如果映像与可执行文件位于同一目录中,则程序将正常运行。如果你想引用用程序编译的映像,你需要引导你的程序相对于pyinstaller创建的运行时目录进行查找。
例如: