gpt4 book ai didi

python - pyinstaller 好像找不到数据文件

转载 作者:太空狗 更新时间:2023-10-29 21:35:25 27 4
gpt4 key购买 nike

编辑 3:当我需要知道我的脚本/可执行文件的位置时,我将 __file__ 替换为 sys.argv[0]。这并不完全相同,但就我而言,它似乎运行良好(至少在可执行版本上......)。现在一切正常,在单文件模式下,使用已接受答案的功能来访问资源文件!


编辑 2:如已接受答案的评论所示,问题来 self 脚本中的路径解析;我尝试使用 __file__ 来获取脚本的位置,以便我可以访问它的资源文件。这在打包后不起作用,因为 __file__ 会将文件名从 Python.dll 返回给脚本,因此总是没有路径,只有文件名。所以我必须找到另一个技巧来访问资源文件;目前的解决方法是将当前目录移动到可执行路径。

顺便说一句,这意味着 ConfigParser 应该在访问文件时报告问题,而不是缺少部分。

我将用解决此路径解析问题的方式更新此问题。


我在使用 pyinstaller 时遇到了问题,因为这是我第一次使用它,所以我肯定做错了什么。

所以,问题来了:pyisntaller 在我编写的脚本上顺利运行,并在 dist 文件夹中生成了一些东西。好的,现在我想执行它看看是否一切顺利,这就是我得到的:

C:\Program Files\PyInstaller\pyinstaller-1.5.1>p_tool\dist\p_tool\p_tool.exe -?
Traceback (most recent call last):
File "<string>", line 104, in <module>
File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/logging.config", line 76, in f
ileConfig
File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/logging.config", line 112, in
_create_formatters
File "p_tool\build\pyi.win32\p_tool\outPYZ1.pyz/ConfigParser", line 532, in ge
t
ConfigParser.NoSectionError: No section: 'formatters'

我的第一个想法是 logging.conf 文件丢失了,所以我在 p_tool.spec 文件中添加了它(以及其他一些资源文件),但是这个不是更好。

Python 版本:2.6.6,在 WinXP 下。我正在使用 pyinstaller,因为我需要它来为 Solaris 工作站打包文件。

所以,有人遇到过这个问题吗?唯一相关的主题是以下问题:PyInstaller Problem ,真的很接近我的问题,但绝望的是它没有得到答案。


Edit3:删除了有关日志记录的详细信息,因为与问题无关。

最佳答案

首先,在读取它之前打印 config_file/os.path.exists(config_file) 可能是明智的,这样你就可以确定文件在哪里以及 python 是否可以找到它。

至于实际访问它,os.path.split(__file__) 看起来几乎是正确的,但我不确定它在 pyinstaller 下是否正常工作 - 打包文件的正确方法是添加它们到 .spec 文件,pyinstaller 将在编译时加载它们,并在运行时将它们解压缩到 $_MEIPASS2/。要在打包模式下获取 _MEIPASS2 目录并在解压(开发)模式下使用本地目录,我使用这个:

def resource_path(relative):
return os.path.join(
os.environ.get(
"_MEIPASS2",
os.path.abspath(".")
),
relative
)


# in development
>>> resource_path("logging.conf")
"/home/shish/src/my_app/logging.conf"

# in deployment
>>> resource_path("logging.conf")
"/tmp/_MEI34121/logging.conf"

关于python - pyinstaller 好像找不到数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7838606/

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