通过Py2App打包到应用程序中时未找到Python Sqlite3

eqqqjvef  于 2023-10-23  发布在  SQLite
关注(0)|答案(1)|浏览(158)

我做了一个库存管理系统,使用sqlite3作为数据库,使用customtkinter作为GUI。当通过VSCode运行时,代码按预期工作。我在苹果电脑上用MacOS Ventura。我想把代码作为一个应用程序发送,这样可以方便最终用户。
使用py 2app打包代码后,别名版本和部署版本将在Dist目录中按预期运行。然而,当我将代码从Dist中取出时,例如进入我的桌面时,它会遇到启动错误。

ImportError: dlopen(/Users/name/Desktop/stockmanager.app/Contents/Resources/lib/python3.11/lib-dynload/_sqlite3.so, 0x0002): Symbol not found: _sqlite3_enable_load_extension
  Referenced from: <8B6D5BCF-C215-35A7-B03F-EDE59AAF1BC3> /Users/name/Desktop/stockmanager.app/Contents/Resources/lib/python3.11/lib-dynload/_sqlite3.so
  Expected in:     <AB447288-47E6-30D9-BD4C-BDFDAE0CBBC3> /usr/lib/libsqlite3.dylib

从我所能理解的,它找不到Sqlite3库。我用homebrew安装了python3.11,sqlite3默认安装了它。我仍然尝试直接通过自制软件安装sqlite3。我甚至从官方网站下载了sqlite3.dylib来插入到包内容中,但我不知道在哪里可以这样做。
由于代码通常在VSCode和Dist目录中运行,因此我可以假设系统上正确安装了Sqlite3。我意识到我可以将“sqlite3.dylib”添加到“usr/lib/”目录中,但感觉它只会在这个特定的系统上修复它。我如何正确地 Package 它?

pieyvz9o

pieyvz9o1#

澄清一下,你在VSCode项目中使用了venv(虚拟环境)吗?如果是这样的话,我可能会尝试使用cxFreeze,因为我个人有更多的运气让它工作一致。你只需要添加一个setup.py文件到根目录,然后把这个文件放在那里:

from cx_Freeze import setup,Executable

include_files: [str] = [<files to include>]

options = {
    'build.exe': {
        'include_files':include_files
    }
}

setup(
    name="<title>",
    version=<version in float (like 0.1)>,
    description="<description>",
    executables=[Executable("<path to main from root>", base="Win32GUI")],
    options=options
)

然后从根目录运行python setup.py build,您应该有。构建文件夹与功能.exe文件。
如果出于某种原因,您没有venv设置,那么您的第一个订单肯定是获得venv设置,因为它使整个过程变得更加容易。这里有一个很好的指南:https://code.visualstudio.com/docs/python/environments
如果你有更多的问题,请随时发表评论,我会尽力帮助。

相关问题