如何从Python脚本(或交互式shell)中找出系统的PYTHONPATH变量中列出了哪些目录?
当前回答
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的帮助。
其他回答
import sys
for a in sys.path:
a = a.replace('\\\\','\\')
print(a)
它将为Windows中的位置提供所有的路径。
在windows 10中工作,基本上与vanuan的答案相同,但更干净(从某个地方,不记得在哪里..):
import sys
for p in sys.path:
print(p)
使用命令,
$ which python
记住在正确的环境中输入这个,所以使用:
$ conda activate <env>
or
$ mamba activate <env>
如果没有conda环境,$ which python或$ which 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的帮助。
import subprocess
python_path = subprocess.check_output("which python", shell=True).strip()
python_path = python_path.decode('utf-8')
推荐文章
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列
- 熊猫在每组中获得最高的n个记录
- 熊猫数据帧得到每组的第一行