在Python脚本中,如何设置PYTHONPATH?

TIM*_*MEX 102 python unix linux environment-variables

我知道如何在我的/ etc/profile和我的环境变量中设置它.

但是如果我想在脚本中设置它呢?是导入os,sys?我该怎么做?

Dav*_*d Z 174

您没有设置PYTHONPATH,您添加条目sys.path.这是一个应该搜索Python包的目录列表,因此您只需将目录附加到该列表即可.

sys.path.append('/path/to/whatever')
Run Code Online (Sandbox Code Playgroud)

实际上,sys.path通过PYTHONPATH在路径分隔符上分割值来初始化(:在类似Linux的系统上,;在Windows上).

您还可以使用添加目录site.addsitedir,该方法还将考虑.pth您传递的目录中存在的文件.(对于您指定的目录,情况并非如此PYTHONPATH.)

  • 这个答案发布已经很多年了,但我仍然想补充一点,如果你想确保Python在导入之前检查新目录,你应该把新目录放在列表的第一位,如在`sys.path.insert(0,'/ path/to/whatever')`中. (7认同)
  • 运行 `sys.path.insert(0, os.getcwd())` 是否“可以”? (4认同)
  • @Breno:将“.”(CWD)插入导入路径的危险在于,如果您在不受信任的目录中运行程序,它可以从那里导入内容并执行它们。 (2认同)

mik*_*iku 33

您可以通过os.environ以下方式获取和设置环境变量

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."
Run Code Online (Sandbox Code Playgroud)

但由于您的解释器已经运行,这将无效.你最好不要使用

import sys
sys.path.append("...")
Run Code Online (Sandbox Code Playgroud)

这是您PYTHONPATH将在解释器启动时转换为的数组.


小智 15

很抱歉重新打开这个问题,但我认为它可以帮助某人:

如果你sys.path.append('dir/to/path')没有检查它已添加,你可以生成一个长列表sys.path.为此,我建议这样做:

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory
Run Code Online (Sandbox Code Playgroud)

如果我让某人重新开启这个问题,我很抱歉.

  • 好的。非常Pythonic。 (2认同)

unb*_*eli 5

PYTHONPATH最终在sys.path中,您可以在运行时修改它.

import sys
sys.path += ["whatever"]
Run Code Online (Sandbox Code Playgroud)