- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
编辑 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/
例如,我有一个父类Author: class Author { String name static hasMany = [ fiction: Book,
代码如下: dojo.query(subNav.navClass).forEach(function(node, index, arr){ if(dojo.style(node, 'd
我有一个带有 Id 和姓名的学生表和一个带有 Id 和 friend Id 的 Friends 表。我想加入这两个表并找到学生的 friend 。 例如,Ashley 的 friend 是 Saman
我通过互联网浏览,但仍未找到问题的答案。应该很容易: class Parent { String name Child child } 当我有一个 child 对象时,如何获得它的 paren
我正在尝试创建一个以 Firebase 作为我的后端的社交应用。现在我正面临如何(在哪里?)找到 friend 功能的问题。 我有每个用户的邮件地址。 我可以访问用户的电话也预订。 在传统的后端中,我
我主要想澄清以下几点: 1。有人告诉我,在 iOS 5 及以下版本中,如果您使用 Game Center 设置多人游戏,则“查找 Facebook 好友”(如与好友争夺战)的功能不是内置的,因此您需要
关于redis docker镜像ENTRYPOINT脚本 docker-entrypoint.sh : #!/bin/sh set -e # first arg is `-f` or `--some-
我是一名优秀的程序员,十分优秀!