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

有帮助吗?

解决方案

sys.path可能包括专门不在你PYTHONPATH环境变量的项目。直接查询变量,可以使用:

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

其他提示

您可能会也想这样的:

import sys
print(sys.path)

或者作为来自终端的一个衬里:

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

似乎无法修改对方的回答。有一个小错误,因为它是Windows的唯一。更通用的解决方案是如下使用os.sep:

sys.path中可能包括具体是不是在你的PYTHONPATH环境变量的项目。直接查询变量,可以使用:

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

PYTHONPATH 是一个环境变量,其值为目录列表。设置后,Python 将使用它来搜索导入的模块以及其他 std。以及 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 搜索路径的一种方法。您还可以直接将列表操作应用于 sys.path,而无需 PYTHONPATH 的帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top