如何使用 Python 找出我的 PYTHONPATH?
- 2025-03-26 09:09:00
- admin 原创
- 15
问题描述:
PYTHONPATH
如何从 Python 脚本(或交互式 shell)中找出系统变量中列出的目录?
解决方案 1:
你可能还想要这个:
import sys
print(sys.path)
或者在终端中输入一行代码:
python -c "import sys; print('
'.join(sys.path))"
警告:如果您安装了多个版本的 Python,则应该使用相应的命令python2
或python3
。
解决方案 2:
sys.path
可能包含环境变量中未明确列出的项目PYTHONPATH
。要直接查询变量,请使用:
import os
try:
user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
user_paths = []
解决方案 3:
似乎无法编辑其他答案。有一个小错误,即它仅适用于 Windows。更通用的解决方案是使用 os.pathsep,如下所示:
sys.path 可能包含 PYTHONPATH 环境变量中未明确列出的项目。要直接查询变量,请使用:
import os
os.environ.get('PYTHONPATH', '').split(os.pathsep)
解决方案 4:
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 中定义为
$ 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 的帮助。
解决方案 5:
适用于 Windows 10,本质上与 vanuan 的答案相同,但更简洁(取自某处,不记得在哪里了...):
import sys
for p in sys.path:
print(p)
解决方案 6:
import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')
解决方案 7:
当 Python 给出错误信息时,它会告诉我它在哪里:)
>>> import os
>>> os.environ['PYTHONPATH'].split(os.pathsep)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:UsersmartinAppDataLocalProgramsPythonPython36-32libos.py", line 669, in __getitem__
raise KeyError(key) from None
KeyError: 'PYTHONPATH'
>>>
解决方案 8:
如果使用 conda,您可以使用 获取 env 前缀os.environ["CONDA_PREFIX"]
。
解决方案 9:
import sys
for a in sys.path:
a = a.replace('\\\\','\\')
print(a)
它将提供在 Windows 中准备放置的所有路径。
解决方案 10:
使用命令,
$ which python
请记住在正确的环境中输入此信息,以便使用:
$ conda activate <env>
或者
$ mamba activate <env>
如果你没有 conda 环境,$ which python
或者$ which python3
就这么做就好了。