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

Pau*_*ite 330 python python-module pythonpath

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

Van*_*uan 557

你可能也想要这个:

import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)

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

python -c "import sys; print('\n'.join(sys.path))"
Run Code Online (Sandbox Code Playgroud)

  • 这个答案比我接受的答案对我的情况更有帮助.我知道我的环境变量是什么.我需要知道除了我的环境变量之外python决定指向哪里. (11认同)
  • 这是获取当前运行时的python路径的独立于平台和环境的方法. (6认同)
  • 对于 Python 3:```python -c "import sys; print('\n'.join(sys.path))"``` (2认同)

Mar*_*som 219

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

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []
Run Code Online (Sandbox Code Playgroud)

  • 如果收到KeyError,是否意味着我的系统中没有定义PYTHONPATH?那是问题吗?谢谢 (11认同)
  • @glarrin,correct - KeyError意味着没有定义PYTHONPATH.这不会是一个问题,因为已经设置了默认路径,请参阅`sys.path`. (9认同)
  • os.sep不正确,请参阅http://stackoverflow.com/questions/1499019/how-to-get-the-path-separator-in-python (5认同)
  • (或者,更一般地说......分裂(os.sep)).马克,无法弄清楚为什么你没有得到这份爱.您的回复在技术上比Paul D Waite自己回答他的问题更准确???? (3认同)
  • 分离器的问题可能就是为什么我没有得到爱.谢谢你让我直截了当. (2认同)

Vit*_*ali 10

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

sys.path可能包含PYTHONPATH环境变量中未特别指定的项.要直接查询变量,请使用:

import os
os.environ['PYTHONPATH'].split(os.pathsep)
Run Code Online (Sandbox Code Playgroud)

  • 对于未来的读者:`os.sep`返回操作系统的目录分隔符,例如`/`.Python路径中使用的分隔符是不同的,并由`os.pathsep`返回,如接受的答案中所示. (6认同)

jug*_*ler 8

在 Windows 10 中工作,与 vanuan 的答案基本相同,但更干净(取自某处,不记得在哪里..):

import sys
for p in sys.path:
    print(p)
Run Code Online (Sandbox Code Playgroud)


Leo*_*ang 7

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')"
Run Code Online (Sandbox Code Playgroud)

IF 在 shell 中定义为

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite
Run Code Online (Sandbox Code Playgroud)

然后结果 =>

/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']
Run Code Online (Sandbox Code Playgroud)

其他结果 =>

PYTHONPATH is not defined
Run Code Online (Sandbox Code Playgroud)

要将 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']
>>> 
Run Code Online (Sandbox Code Playgroud)

总之,PYTHONPATH 是在 sys.path 中为导入的模块指定 Python 搜索路径的一种方式。您还可以在没有 PYTHONPATH 帮助的情况下将列表操作直接应用于 sys.path。