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


sys。path可能包含PYTHONPATH环境变量中没有特别包含的项。要直接查询变量,使用:

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

似乎无法修改另一个答案。有一个小错误,因为它是windows独有的。更通用的解决方案是使用os。路径sep如下:

sys。path可能包含PYTHONPATH环境变量中没有特别包含的项。要直接查询变量,使用:

import os
os.environ.get('PYTHONPATH', '').split(os.pathsep)

你可能还想要这个:

import sys
print(sys.path)

或者从终点站出发的一条航线:

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

注意:如果你安装了多个版本的Python,你应该使用相应的命令python2或python3。


PYTHONPATH是一个环境变量,其值为目录列表。一旦设置好,Python就会使用它来搜索导入的模块,以及Python的“sys.path”中列出的其他std.和第三方库目录。

与任何其他环境变量一样,您可以在shell或~/中导出它。Bashrc,看这里。 可以查询os。environ['PYTHONPATH']在Python中的值,如下所示:

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

IF在shell中定义为

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

THEN result =>

/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 result =>

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搜索路径的一种方式。您还可以将列表操作直接应用到sys. exe。没有PYTHONPATH的帮助。


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'
>>>

如果使用conda,可以使用os.environ["CONDA_PREFIX"]获取env前缀。


在windows 10中工作,基本上与vanuan的答案相同,但更干净(从某个地方,不记得在哪里..):

import sys
for p in sys.path:
    print(p)

import sys
for a in sys.path:
    a = a.replace('\\\\','\\')
    print(a)

它将为Windows中的位置提供所有的路径。


import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')

使用命令,

$ which python

记住在正确的环境中输入这个,所以使用:

$ conda activate <env>

or

$ mamba activate <env>

如果没有conda环境,$ which python或$ which python3就可以了。