如何使用python找出我的python路径?


350

如何PYTHONPATH从Python脚本(或交互式外壳程序)中找出系统变量中列出了哪些目录?


24
我不确定您要做什么,但是如果您想知道使用哪个文件夹来搜索要导入的模块,则不要依赖PYTHONPATH。使用sys.path了点。
Vanuan 2012年

通过简单的实验,我发现下面的Vanuan答案(打印sys.path)仅打印PYTHONPATH。在我们使用添加到PYTHONPATH的add_path(new_path)更改值后,此方法有效。
灿金

6
这篇文章的标题和正文提出了两个不同的问题。sys.path是“指定模块搜索路径的字符串列表” -docs.python.org/2/library/sys.html#sys.path。PYTHONPATH是影响此列表的环境变量。通过任何合理的定义sys.path就是您的“ python路径”。
spinkus

4
不要忘了python -m site
安德鲁·麦金莱

Answers:


236

sys.path可能包括不是您的PYTHONPATH环境变量中特定的项目。要直接查询变量,请使用:

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []

3
(或更笼统地说是... split(os.sep))。马克,想不通为什么你没有得到爱。从技术上讲,您的答复比Paul D Waite自己对他的问题的答复更准确?
mjv

5
os.sep是不正确,请参阅stackoverflow.com/questions/1499019/...
马克赎金

2
分隔符的问题可能就是为什么我没有得到爱。谢谢你让我挺直。
Mark Ransom

11
而且,如果收到KeyError,是否表示我的系统中未定义PYTHONPATH?那是问题吗?谢谢
glarrain 2011年

9
@glarrin,正确-KeyError表示未定义PYTHONPATH。不会有问题,因为已经设置了默认路径,请参见sys.path
Mark Ransom

599

您可能还希望这样:

import sys
print(sys.path)

或者作为从终端的一个班轮:

python -c "import sys; print('\n'.join(sys.path))"

注意:如果您安装了多个版本的Python,则应使用相应的命令python2python3


相同。Linux aaa.com 2.6.18-4-686-bigmem#1 SMP Wed Jun 6 09:41:07 UTC 2007 i686 GNU / Linux ... Debian Sarge
Spechal 2012年

7
这是获取当前运行时的python路径的与平台和环境无关的方法。
德米特里·明科夫斯基2012年

13
这个答案比我接受的答案对我的情况更有用。我知道我的环境变量是什么。我需要知道python除了环境变量之外还决定指向何处。
Vorticity

对于Python 3:python -c "import sys; print('\n'.join(sys.path))"
mirceamironenco

@mirceamironenco更改了
Vanuan

10

似乎无法编辑其他答案。有一个小错误,因为它仅适用于Windows。更通用的解决方案是使用os.sep,如下所示:

sys.path可能包含不是您的PYTHONPATH环境变量中特定的项目。要直接查询变量,请使用:

import os
os.environ['PYTHONPATH'].split(os.pathsep)

6
对于将来的读者:os.sep返回操作系统的目录分隔符,例如 /。Python路径中使用的分隔符是不同的,并且由os.pathsep接受的答案中所示返回。
Paul D. Waite,2010年

3

PYTHONPATH是一个环境变量,其值是目录列表。设置后,Python将使用它与其他标准输入一起搜索导入的模块。和Python的“ sys.path”中列出的第三方库目录。

与其他任何环境变量一样,您可以将其导出到shell或〜/ .bashrc中,请参见此处。您可以在python中查询os.environ ['PYTHONPATH']的值,如下所示:

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

如果在shell中将IF定义为

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

然后结果=>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

ELSE结果=>

PYTHONPATH is not defined

要将PYTHONPATH设置为多个路径,请参见此处

注意,可以在运行时通过sys.path.insert(),del或remove()添加或删除搜索路径,但不能通过os.environ []添加或删除搜索路径。例:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

总之,PYTHONPATH是在sys.path中为导入的模块指定Python搜索路径的一种方法。您也可以不借助PYTHONPATH将列表操作直接应用于sys.path。


0

当它给我一条错误消息时,Python告诉我它住在哪里:)

>>> import os
>>> os.environ['PYTHONPATH'].split(os.pathsep)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\martin\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'PYTHONPATH'
>>>

-1

用这个:

import sys
print(sys.executable)

或从cmd一行:

python -c "import sys; print(sys.executable)"

1
看起来问题的作者正在询问python目录列表,而不是实际python可执行文件的路径。
谢尔盖·舒宾
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.