繁体   English   中英

如何使用 Python 找出我的 PYTHONPATH?

[英]How do I find out my PYTHONPATH using Python?

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

你可能还想要这个:

import sys
print(sys.path)

或者作为终端的单班轮:

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

警告:如果您安装了多个版本的 Python,您应该使用相应的命令python2python3

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['PYTHONPATH'].split(os.pathsep)

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

与任何其他环境变量一样,您可以将其导出到 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')"

IF 在 shell 中定义为

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

其他结果 =>

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。

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

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

当 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'
>>>
import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')

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

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

它将提供所有准备在 Windows 中放置的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM