在 Python 脚本中,如何设置 PYTHONPATH?
Posted
技术标签:
【中文标题】在 Python 脚本中,如何设置 PYTHONPATH?【英文标题】:In Python script, how do I set PYTHONPATH? 【发布时间】:2011-03-07 16:51:01 【问题描述】:我知道如何在我的 /etc/profile 和我的环境变量中设置它。
但是如果我想在脚本中设置它怎么办? 是导入操作系统,系统吗?我该怎么做?
【问题讨论】:
【参考方案1】:您没有设置PYTHONPATH
,而是将条目添加到sys.path
。它是一个应搜索 Python 包的目录列表,因此您只需将目录附加到该列表即可。
sys.path.append('/path/to/whatever')
实际上,sys.path
是通过在路径分隔符上拆分 PYTHONPATH
的值来初始化的(在类似 Linux 的系统上是 :
,在 Windows 上是 ;
)。
您还可以使用site.addsitedir
添加目录,该方法还将考虑您传递的目录中存在的.pth
文件。 (您在PYTHONPATH
中指定的目录不会出现这种情况。)
【讨论】:
这个答案发布已经有很多年了,但我仍然想补充一点,如果你想确保 Python 在导入时检查新目录之前的所有其他目录,你应该把新目录在列表的首位,如sys.path.insert(0, '/path/to/whatever')
。【参考方案2】:
您可以通过os.environ
获取和设置环境变量:
import os
user_home = os.environ["HOME"]
os.environ["PYTHONPATH"] = "..."
但是由于您的解释器已经在运行,这将不起作用。你最好使用
import sys
sys.path.append("...")
这是您的PYTHONPATH
在解释器启动时将转换为的数组。
【讨论】:
【参考方案3】:PYTHONPATH 以 sys.path 结尾,您可以在运行时对其进行修改。
import sys
sys.path += ["whatever"]
【讨论】:
有理由更喜欢这个答案而不是@DavidZ 的答案吗? 如果没有别的,那就不那么冗长了。【参考方案4】:如果您输入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
【讨论】:
不错。非常 Pythonic。 如何清空 PythonPath?我不想追加。我想清空它,把我只想要的东西放进去。有没有办法做到这一点? 您是否尝试通过调用 sys.path.__init__() 重新初始化它?这应该是空的 python 路径。希望这会有所帮助。 @francisco-manuel-garca-botella 本网站非常欢迎回答老问题!没什么好遗憾的。 我不同意这是 pythonic,我认为这不是一个好的编程方法。当异常发生时,异常处理是非常昂贵的,所以你不想用它来替换很可能使用 else 的“if”语句。一个简单的 if 'mypath' in sys.path ... else ... 将是我的建议。【参考方案5】:可以通过os.environ['PATHPYTHON']=/some/path
设置PYTHONPATH
,然后需要调用os.system('python')
重启python shell,使新添加的路径生效。
【讨论】:
os.system()
不会“重新启动 python shell”,它会启动一个新的交互式 Python 实例。当你从那里返回时,你又回到了调用脚本中。【参考方案6】:
我在 linux 下也可以:
import sys
sys.path.extend(["/path/to/dotpy/file/"])
【讨论】:
将extend
与路径一起用作列表中的单个元素与将append
与实际路径本身一起使用没有什么不同。这个答案没有提供比当前接受的答案更多的用处。以上是关于在 Python 脚本中,如何设置 PYTHONPATH?的主要内容,如果未能解决你的问题,请参考以下文章