为什么我得到Pyinstaller FileNotFoundError。[Errno 2] 没有这样的文件或目录。

0 人关注

我正试图从我的Python脚本中创建一个独立的应用程序 login.py 尽管我在运行时遇到了错误。

我已经改变了 login.spec 并添加了官方文档中的数据列表 Using Spec Files

替换代码0】只是为了让它在这里可读而总结的路径,它在我的文件中是完整的。

datas=[ ('/Users.../tiktok/*.png', '.' ) , ('/Users/.../tiktok/*.jpg', '.' ) ],

命令来创建捆绑。

pyinstaller -D -F -w login.spec login.py

Traceback (most recent call last):
  File "login.py", line 126, in <module>
  File "login.py", line 82, in main
  File "PIL/Image.py", line 2904, in open
FileNotFoundError: [Errno 2] No such file or directory: '/liberty.jpg'
[53518] Failed to execute script login
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]

这意味着,.jpg.png没有被捆绑。

login.py

from tkinter import *
from PIL import Image, ImageTk
import requests
import json
def main():
    global rootLogin
    rootLogin = Tk()
    rootLogin.geometry("720x540")
    rootLogin.eval('tk::PlaceWindow . center')
    rootLogin.title("Login | bla bla bla")
    # Logo
    load = Image.open(curPath + "/liberty.jpg")
    load = load.resize((136, 84), Image.ANTIALIAS)
    render = ImageTk.PhotoImage(load)
    img = Label(rootLogin, image=render)
    img.image = render
    img.place(x=293, y=86)
    # Username
    # Password
    # Forgot password
    # Login
    rootLogin.mainloop()
if __name__ == '__main__':
    import os
    curPath = os.path.dirname(__file__)
    print(curPath)
    main()

login.spec

# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['login.py'],
             pathex=['/Users/.../tiktok'],
             binaries=[],
             datas=[ ('/Users.../tiktok/*.png', '.' ) , ('/Users/.../tiktok/*.jpg', '.' ) ],
             hiddenimports=[],
             hookspath=[],
             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='login',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=False )
app = BUNDLE(exe,
             name='login.app',
             icon=None,
             bundle_identifier=None)
    
4 个评论
这是因为 curPath 是空字符串。
不......这不是问题,它不是空的,当我运行.py文件时,它是有效的,它被分配 curPath = os.path.dirname(__file__)
如果你使用 os.path.dirname(os.path.abspath(__file__)) ,那么它就不是空的。 另外在使用PyInstaller构建exe后,使用 __file__ 的路径不是你想要的实际路径,而是 sys._MEIPASS 。 这个错误肯定会告诉你 curPath 是空的。
python
tkinter
pyinstaller
Marcelo Gazzola
Marcelo Gazzola
发布于 2021-01-31