欢迎访问宙启技术站
智能推送

sys.path和PYTHONHOME环境变量的关联和作用

发布时间:2023-12-24 15:10:22

sys.path是一个Python搜索模块的路径列表。在导入一个模块时,Python会按照sys.path列表中的路径顺序搜索模块。PYTHONHOME环境变量是用来设置Python的安装路径。在Python解释器启动时,会首先检查PYTHONHOME环境变量,然后将Python安装路径添加到sys.path列表中。

sys.path的默认值通常包括以下路径:

- 空字符串,表示当前目录

- PYTHONPATH环境变量中指定的路径

- 标准库路径

- 标准库路径下的site-packages目录

PYTHONHOME环境变量的默认值是根据Python安装的方式决定的,如使用Python安装器安装的Python,PYTHONHOME的默认值是Python的安装路径。另外,可以通过设置PYTHONHOME环境变量来指定Python解释器的启动路径。

sys.path和PYTHONHOME环境变量的关联在于,Python解释器在搜索模块时会优先使用PYTHONHOME环境变量指定的Python安装路径作为搜索起点,然后按照sys.path列表中的路径顺序继续搜索。

下面是一个使用例子,假设有两个Python环境,一个是默认安装路径为/usr/local/python1,另一个是默认安装路径为/usr/local/python2。我们可以通过设置PYTHONHOME环境变量来分别指定不同的Python环境。

首先,设置PYTHONHOME环境变量为/usr/local/python1:

$ export PYTHONHOME=/usr/local/python1

然后,创建一个名为my_module.py的模块,内容如下:

# my_module.py
def hello():
    print("Hello from my_module in Python 1")

接着,创建一个名为main.py的主程序,内容如下:

# main.py
import sys
import my_module

def main():
    print("Hello from main in Python 1")
    my_module.hello()

if __name__ == "__main__":
    main()

运行main.py,结果如下:

$ python main.py
Hello from main in Python 1
Hello from my_module in Python 1

然后,将PYTHONHOME环境变量设置为/usr/local/python2:

$ export PYTHONHOME=/usr/local/python2

接着,创建一个名为my_module.py的模块,内容如下:

# my_module.py
def hello():
    print("Hello from my_module in Python 2")

再次运行main.py,结果如下:

$ python main.py
Hello from main in Python 1
Hello from my_module in Python 2

从结果可以看出,导入my_module模块时,优先搜索PYTHONHOME环境变量指定的Python安装路径下的my_module.py。