Python模块的搜索路径
在Python中,模块搜索路径是指解释器用来查找导入模块的位置列表。了解和掌握Python模块搜索路径对于正确导入模块和管理模块的位置至关重要。
Python模块搜索路径的主要来源包括当前目录、Python标准库目录和用户自定义的目录。你可以通过sys模块中的sys.path来查看和修改模块搜索路径。
在本文章中,您将了解模块搜索路径。看看下面Python执行以下语句时会发生什么:
>>> import mod
>>> mod.a
[100, 200, 300]
>>> mod.s
'Computers are useless. They can only give you answers.'
当解释器执行上述语句时,它会在由以下的目录列表中进行搜索:mod.py
- 运行脚本的目录,或者当前目录
- 环境变量中包含的目录列表PYTHONPATH(如果已设置)。(PYTHONPATH的格式取决于操作系统,但应模仿PATH环境变量。)
- 安装 Python 时配置的与安装相关的目录列表
生成的搜索路径可在 Python 变量 中访问sys.path,该变量是从名为sys的模块获取的:
>>> import sys
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.7/bin', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']
注意:的具体内容sys.path取决于安装。上面的代码块在您的计算机上几乎肯定会略有不同。
因此,为了确保找到您的模块,您需要执行以下操作之一:
- 放在mod.py脚本所在目录,如果是交互模式放入当前目录
- 在启动解释器之前,修改环境变量包含所在的PYTHONPATH目录。
- 放入mod.py与安装相关的目录之一,您可能有也可能没有写入权限,具体取决于操作系统。
还有一个附加选项:您可以将模块文件放在您选择的任何目录中,然后sys.path在运行时进行修改,使其包含该目录。例如,在这种情况下,您可以放入mod.py目录/Users/chris/ModulesAndPackages,然后执行以下语句:
>>> sys.path.append(r'/Users/chris/ModulesAndPackages')
>>> sys.path
['', '/Library/Frameworks/Python.framework/Versions/3.7/bin', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages', '/Users/chris/ModulesAndPackages']
>>> import mod
>>> mod.s
'Computers are useless. They can only give you answers.'
导入模块后,您可以使用模块的__file__属性确定找到该模块的位置:
>>> import mod
>>> mod.__file__
'/Users/chris/ModulesAndPackages/mod.py'
>>> import re
>>> re.__file__
'/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/re.py'