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


114

我知道如何在/ etc / profile和环境变量中进行设置。

但是,如果我想在脚本中进行设置怎么办?是导入os,sys吗?我该怎么做?

Answers:


191

您没有设置PYTHONPATH,而是向中添加条目sys.path。这是应该在其中搜索Python软件包的目录列表,因此您只需将目录追加到该列表即可。

sys.path.append('/path/to/whatever')

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

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


11
发布此答案已经有很多年了,但是我仍然想补充一点,如果要确保在导入时Python先检查新目录,然后再将其他目录放在列表中,如下所示:在中sys.path.insert(0, '/path/to/whatever')
wecsam

38

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

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

os.environ["PYTHONPATH"] = "..."

但是,由于您的解释器已经在运行,因此不会起作用。你最好用

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

这是您PYTHONPATH将在解释程序启动时转换为的数组。


18

如果您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

2
真好 非常Pythonic。
PartialOrder

1
如何清空PythonPath?我不想追加。我要清空它,然后将我只想要的内容放入其中。有没有办法做到这一点?
Schütze

您是否尝试通过调用sys.path .__ init __()重新初始化它?这应该是空的python路径。希望这可以帮助。
Thayz,

@ francisco-manuel-garca-botella在本网站上欢迎回答老问题!没什么可遗憾的。
user7610

我不同意这是pythonic,我建议这不是一种好的编程方法。发生异常时,异常处理的开销非常大,因此您不希望使用它来替换“ if”语句,而很有可能会使用else。我的建议是在sys.path中使用一个简单的if'mypath'... else...。
markgalassi

6

PYTHONPATH结尾于sys.path,您可以在运行时进行修改。

import sys
sys.path += ["whatever"]

有没有理由比@DavidZ的答案更喜欢此答案?
Dror

如果没有别的,那么它就不那么冗长了。
Tripleee '18

-1

您可以通过设置PYTHONPATHos.environ['PATHPYTHON']=/some/path然后需要调用os.system('python')以重新启动python shell,以使新添加的路径生效。


1
os.system()不“重新启动python shell”,而是启动一个新的交互式Python实例。从中返回时,您将返回调用脚本。
Tripleee '18

-2

我的Linux也可以:

import sys
sys.path.extend(["/path/to/dotpy/file/"])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.