将脚本的工作文件夹添加到Windows上的Python导入()路径的最佳方法?

Rab*_*ski 5 python windows cross-platform working-directory

我有一个python程序,我使用py2exe编译成Windows .exe.使用Inno Setup,我创建了一个Windows安装程序.

我的程序的性质是它使用插件,后来使用该__import__()语句导入.这些插件位于"plugins"文件夹中,该文件夹本身位于程序的.exe文件所在的子文件夹中.

现在,为了让程序找到插件,它先前在我的文件顶部有以下语句:

sys.path+= ['.']
Run Code Online (Sandbox Code Playgroud)

但是,当用户通过Windows的开始菜单启动程序时,这不能很好地工作,因为显然工作文件夹设置为开始菜单(而不是.exe所在的位置).所以'.'没有解决我想要的问题.

我通过将语句更改为以下来修复它,以便该__import__()语句也查找.exe所在的文件夹(因为它argv[0]是可执行文件的完整路径):

sys.path+= [os.path.dirname(sys.argv[0])]
Run Code Online (Sandbox Code Playgroud)

但是,我不确定我是否选择了正确的解决方案.特别是,因为我的程序是跨平台的(Windows,OSX,Linux),sys.argv文档说argv [0],"它是依赖于操作系统的,无论这是否是一个完整的路径名".

我应该以不同的方式解决这个问题,还是我的方法可行

Nil*_*esh 0

请使用__file__该模块。你可以这样写

sys.path+=os.path.dirname(mymodule.__file__)

这将在 sys.path 中添加模块的父目录。

  • 嗯,我不相信,因为我的 Windows .exe 程序返回了 `__file__`:`C:\Program Files (x86)\myprogram\myprogram.exe\core.pyc`。这将需要我剥离两个级别的返回路径(“core.pyc”和“myprogram.exe”),这在 OSX、Linux 甚至从终端运行时可能不是这种情况。 (3认同)