加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 01:59:13 所属栏目:Windows 来源:网络整理
导读:我有一个 python程序,我使用py2exe编译成 Windows .exe. 使用 Inno Setup,我创建了一个Windows安装程序. 我的程序的本质是它使用插件,后来使用__import __()语句导入.这些插件位于“plugins”文件夹中,该文件夹本身位于程序的.exe文件所在的子文件夹中. 现在
我有一个 python程序,我使用py2exe编译成 Windows .exe.
使用 Inno Setup,我创建了一个Windows安装程序.

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

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

sys.path+= ['.']

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

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

sys.path+= [os.path.dirname(sys.argv[0])]

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

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

解决方法

在我编译的.exe Qt程序中,我使用的代码与你的代码非常相似:

def executable_path():
    self_file = unicode(sys.argv[0],sys.getfilesystemencoding())
    return os.path.realpath(os.path.dirname(self_file))

我正在使用unicode,因为路径可能包含非ascii符号.

sys.argv[0] it is operating system dependent whether this is a full pathname or not

os.path.realpath解决了这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读