如何获取Python当前的导入路径?
我在代码中的某处收到 ImportError
异常,但可以在应用程序启动时安全地导入相同的模块。我很好奇Python会在哪些路径中查找要导入的模块,以便我可以追踪出现此问题的原因。我发现了这个:
print sys.path
这是系统在尝试导入模块时查找的所有路径的列表吗?
I get an ImportError
exception somewhere in the code, but the same module can be imported safely at startup of the application. I'm curious to see which paths Python looks for modules to import, so that I can trace why this problem occurs. I found this:
print sys.path
Is this the list of ALL paths that system looks when tries to import a module?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
python 默认检查的路径位置可以通过检查 来检查
sys.path
。The path locations that python checks by default can be inspected by checking
sys.path
.如果您想要更好的格式:
If you want a bit better formatting:
其他答案几乎正确
Python 3:
在Python 2.7中:
在两个版本中,主文件(即
__name__ =='__main'
是True
) 自动将自己的目录添加到 sys.path 中。 但是 Python 3 仅从sys.path
导入模块。 Python 2.7 从 sys.path 和当前文件的目录导入模块。当您具有如下文件结构时,这是相关的:带有内容
开始.py:
导入first_import
__init__.py:
import secondary_import.py
在 Python 3 中,直接运行 __init__.py 是可以的,但是当你运行 start.py 时,__init__.py 将无法
import secondary_import.py
因为它不会位于 sys.path 中。在 Python 2.7 中,当您运行 start.py 时,__init__.py 将能够导入 secondary_import.py,即使它不在 sys.path 中,因为它位于同一文件夹中作为它。
不幸的是,我想不出一种方法可以在 Python 3 中完美复制 Python 2.7 的行为。
The other answers are almost correct
Python 3:
In Python 2.7:
In both versions the main file (i.e.
__name__ == '__main'
isTrue
) automatically adds its own directory to sys.path. However Python 3 only imports modules fromsys.path
. Python 2.7 imports modules from bothsys.path
AND from the directory of the current file. This is relevant when you have a file structure like:with contents
start.py:
import first_import
__init__.py:
import second_import.py
In Python 3 directly running __init__.py will work, but when you run start.py, __init__.py wont be able to
import second_import.py
because it wont be insys.path
.In Python 2.7 when you run start.py, __init__.py will be able to
import second_import.py
even though its not insys.path
since it is in the same folder as it.I cant think of a way to perfectly duplicate Python 2.7's behavior in Python 3 unfortunately.
Sys.path
是 Python 在查找导入时查找的所有路径的列表。如果要向包含一个或多个 python 文件的目录添加另一路径,可以使用:sys.path.append('path/to/directory')
。Sys.path
is a list of all the paths Python looks through when finding imports. If you want to add another path to a directory containing one or more python files, you can use:sys.path.append('path/to/directory')
.