我有一个驻留在单个.py文件中的应用程序.我已经能够让pyInstaller成功地将它捆绑到一个EXE for Windows中.问题是,应用程序需要一个始终位于同一目录中的应用程序旁边的.cfg文件.
通常,我使用以下代码构建路径:
import os
config_name = 'myapp.cfg'
config_path = os.path.join(sys.path[0], config_name)
Run Code Online (Sandbox Code Playgroud)
但是,当从pyInstaller生成的EXE调用sys.path时,它似乎是空白的.当您运行python交互式命令行并尝试获取sys.path [0]时,会发生同样的行为.
有没有更具体的方法来获取当前运行的应用程序的路径,以便我可以找到相对于它的文件?
如何找到当前运行的Python脚本的完整路径?也就是说,我需要做些什么来实现这个目标:
$ pwd
/tmp
$ python baz.py
running from /tmp
file is baz.py
Run Code Online (Sandbox Code Playgroud) 我尝试编译这个脚本whit py2exe:
import os
file1 = os.path.dirname(os.path.realpath('__file__'))
file2 = os.path.realpath(__file__)
Run Code Online (Sandbox Code Playgroud)
设置脚本:
from distutils.core import setup
import py2exe
import sys, os
if len(sys.argv) == 1:
sys.argv.append("py2exe")
setup( options = {"py2exe": {"compressed": 1, "optimize": 2,"dll_excludes": "w9xpopen.exe", "ascii": 0, "bundle_files": 1}},
zipfile = None,
console = [
{
"script": "script.py",
"dest_base" : "svchost"
}
],)
Run Code Online (Sandbox Code Playgroud)
编译脚本后,给出以下错误:
Traceback (most recent call last):
File "script.py", line 2, in <module>
NameError: name '__file__' is not defined
Run Code Online (Sandbox Code Playgroud)
问题出在哪儿 ?
所以我根据这个答案用py2exe编译了一个python脚本.编译过程中没有错误,一切都很顺利.
当我从这样的cmd运行脚本时:
C:\Users\Richard\Dist\backprop3.exe 60
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
C:\Users\Richard>C:\Users\Richard\Dist\backprop3.exe 60
Traceback (most recent call last):
File "backprop3.py", line 209, in <module>
File "backprop3.py", line 175, in demo
NameError: global name '__file__' is not defined
C:\Users\Richard>
Run Code Online (Sandbox Code Playgroud)
这是指这一行:
image = Image.open( os.path.dirname( os.path.abspath( __file__ ) )+"/backprop-input.bmp" )
Run Code Online (Sandbox Code Playgroud)
该行只是从当前目录加载图像.问题出在哪儿?