相关疑难解决方法(0)

查找当前运行文件的路径

如何找到当前运行的Python脚本的完整路径?也就是说,我需要做些什么来实现这个目标:

$ pwd
/tmp
$ python baz.py
running from /tmp 
file is baz.py
Run Code Online (Sandbox Code Playgroud)

python

42
推荐指数
4
解决办法
7万
查看次数

如何在py2exe中获取可执行文件的当前目录?

我在脚本中使用这段代码以跨平台的方式确定运行的确切位置:

SCRIPT_ROOT = os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)

很简单.然后我继续在SCRIPT_ROOT我的脚本的其他区域使用,以确保一切都是正确的相对.我通过py2exe运行时出现问题,因为生成的可执行文件未设置__file__,因此我的脚本中断.有谁知道如何解决或解决这个问题?

python py2exe

17
推荐指数
3
解决办法
1万
查看次数

pyinstaller似乎没有找到数据文件

编辑3:当我需要知道我的脚本/可执行文件的位置时,我替换__file__sys.argv[0].这不完全一样,但在我的情况下它似乎运行良好(至少在可执行版本...).现在一切都工作正常,在单文件模式下,使用接受的答案功能来访问资源文件!


编辑2:如接受的答案的评论所示,问题来自我的脚本中的路径解析; 我尝试使用__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'
Run Code Online (Sandbox Code Playgroud)

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

Python版本:2.6.6,在WinXP下.我正在使用,pyinstaller因为我需要它来封装Solaris工作站的文件.

那么,有人确实有这个问题吗?唯一相关的主题是以下问题:PyInstaller问题,非常接近我的问题,但绝对没有答案.


Edit3:删除日志记录的详细信息,与问题无关.

python pyinstaller

7
推荐指数
1
解决办法
6536
查看次数

Python os.makedir 用 PyInstaller 编译成 exe 后不起作用?

我正在尝试使用其中的这一行来编译Python代码,它没有创建任何目录,但其他一切都正常。

os.mkdir('{}\\{}'.format(dir_path, scenario['name']))
Run Code Online (Sandbox Code Playgroud)

我使用 --console 标志进行编译,运行时没有错误。我也以管理员身份运行。谢谢你的帮助。

这是我获取 dir_path 的方法

if getattr(sys, 'frozen', False):
    dir_path = sys._MEIPASS
else:
    dir_path = os.path.dirname(os.path.abspath(__file__))
Run Code Online (Sandbox Code Playgroud)

python pyinstaller

5
推荐指数
0
解决办法
487
查看次数

获取 python .exe 路径

我用 python 制作了一个程序,当使用 python 解释器运行时它可以正确运行。它从同一目录中读取一些文件。为了从其他路径运行脚本,脚本将其工作目录更改为自己的位置。

import os
abspath = os.path.realpath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
Run Code Online (Sandbox Code Playgroud)

但是当我将其打包为 .exe 时,这不起作用。因为在运行 .exe 时,__file__变量是"main.py".

我知道可以通过显式设置固定路径来修复它:

os.chdir('/Fixed/Path')
Run Code Online (Sandbox Code Playgroud)

但是有一个优雅的解决方案吗?

python working-directory

3
推荐指数
1
解决办法
3868
查看次数

python - 编译调用配置文件

我正在使用 pyinstaller 编译 python 应用程序。

结构是这样的——

d:\app\myprog.exe
d:\app\config\settings.conf
Run Code Online (Sandbox Code Playgroud)

如果我myprog.exe --switch valued:\app它运行,运行得很好,如果我尝试从其他任何地方运行,就像c:\windows它没有找到我的settings.conf文件抱怨消息:

Traceback (most recent call last):
  File "<string>", line 284, in <module>
  File "<string>", line 218, in main
  File "ConfigParser.py", line 330, in get
ConfigParser.NoSectionError: No section: 'database'
myApp returned -1
Run Code Online (Sandbox Code Playgroud)

database作为我试图引用的配置文件中的第一行。

BASE_DIR在这里引用了应用程序 -

# Global Path and Config Info
try:
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
except NameError:  # We are the main py2exe script, not a module
    BASE_DIR = os.path.dirname(os.path.abspath(sys.argv[0])) …
Run Code Online (Sandbox Code Playgroud)

python pyinstaller python-2.7

2
推荐指数
1
解决办法
2657
查看次数

PyInstaller 和 QML 文件

如何将 QML 文件作为单个可执行文件包含到我的 Python 项目中。当我运行时pyinstaller --onefile main.py,运行可执行文件会导致未找到 QML 文件的错误。除非我使用绝对路径或放置view.qml在与可执行文件相同的目录中。我不想有一个单独的 QML 文件,我希望它合并到可执行文件中。

主要.py:

if __name__ == "__main__":
  app = QGuiApplication(sys.argv)
  engine = QQmlApplicationEngine()
  engine.load(QUrl("view.qml"))
  sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

视图.qml:

import QtQuick 2.0

ApplicationWindow {
  id: window
  title: "Window"
  width: 900
  height: 600
  visible: true
}
Run Code Online (Sandbox Code Playgroud)

python pyinstaller qml pyside2

1
推荐指数
1
解决办法
1086
查看次数