如何解决运行python脚本/模块/软件包时,用于查找导入的路径是什么?
当我们运行python脚本/模块.py
文件时,解释器会在运行脚本所在的目录中而不是当前工作目录中查找任何导入。
当我们使用-m
开关运行python模块时,它将当前工作目录加载到该路径中。
但是,当我们使用-m
开关运行python软件包时,哪个目录会加载到路径中?当前目录或包含软件包或软件包本身的目录?
有人可以阐明这个概念吗?
解决方法
当前目录。
在这方面,似乎模块和包之间的行为类似。使用-m运行的文档:
https://docs.python.org/3/using/cmdline.html#cmdoption-m
,...当前目录将添加到sys.path的开头。
使用-m
运行软件包会将当前目录添加到路径,而不是软件包目录或包含该软件包的目录。
来自-m
docs:
与-c选项一样,当前目录将添加到sys.path的开头。
这不取决于指定的模块是软件包还是普通模块。 (它甚至可以是namespace package,其内容没有一个目录,也没有一个包含目录。)
请注意,当前目录被添加到路径之前,试图解析要运行的程序包或模块的名称,这就是为什么甚至可以使用-m
来运行的原因当前目录中的模块和软件包。
根据我的上次经验,它来自包含软件包的目录。
但是要进行检查,请运行此命令以查看python可以查看的所有目录:
import sys
print('\n'.join(sys.path))
提示::如果您想从其他目录加载自定义.py文件,请执行以下操作:
import sys
sys.path.insert(1,"<path">)
OR
import sys
sys.path.append("<path>")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。