在导入语句之前设置PYTHONPATH

82 投票
2 回答
192947 浏览
提问于 2025-04-17 17:18

我的代码是:

import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations

但是脚本库(scriptlib)在其他目录里,所以我需要把那个目录加到环境变量“PYTHONPATH”里。

有没有办法让我在执行导入语句之前,先把脚本库的目录加到环境变量“PYTHONPATH”里,比如说:

import sys
sys.path.append('/mypath/scriptlib')
import scriptlib.abc
import scriptlib.xyz

def foo():
  ... some operations

如果可以的话,这个值是仅对当前命令提示符有效,还是全局有效呢?

2 个回答

8

正如文档中提到的,在这里

你需要去到 Python X.Y/Lib(Windows系统)或者 /usr/lib/pythonX.Y(Linux系统),然后在那里的 site.py 文件中添加以下几行:

import sys
sys.path.append("yourpathstring")

这样做会改变你的 sys.path,每次加载时都会包含这个值。

关于 site.py,文档中提到,在这里

这个模块在初始化时会自动导入。 导入这个模块会将特定路径添加到模块搜索路径中,并增加一些内置功能。

如果你想了解其他可能的方法来添加路径到 sys.path,可以查看这些文档

90

这段话的意思是,你在运行的Python程序中添加了一个路径,但这个路径只对当前的程序有效。其他正在运行的Python程序不会受到影响。如果你退出当前程序再重新运行,之前添加的路径也不会再存在。你所做的事情基本上是对的。

set.py:

import sys
sys.path.append("/tmp/TEST")

loop.py

import sys
import time
while True:
  print sys.path
  time.sleep(1)

运行命令:python loop.py &

这个命令会启动loop.py,并且它会在后台继续运行,同时把输出连接到你的标准输出(STDOUT)。然后你可以运行python set.py。每个程序都有自己的一套环境变量。注意,loop.py的输出不会因为运行set.py而改变,因为set.py并没有改变loop.py的环境。

关于导入的说明

Python的导入是动态的,就像这个语言的其他部分一样。没有静态链接的概念。导入就像执行一行代码,比如sys.path.append...

撰写回答