我一直在学习 Python,我在 2.7.3 中工作,我正在尝试理解 import
语句。
documentation表示当您尝试导入模块时,解释器将首先搜索其中一个内置模块。
内置模块是什么意思?
然后,文档说解释器在 sys.path 列出的目录中搜索,并且 sys.path 是从这些来源初始化的:
- 包含输入脚本的目录(或当前目录)。
PYTHONPATH
(目录名称列表,语法与 shell 变量PATH
相同)。- 依赖于安装的默认值。
这是我的计算机在命令行模式下使用 python 的 sys.path 命令的示例输出:(我删除了一些,以免它太大)
['', '/usr/lib/python2.7', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
现在,我假设“”路径指的是包含“脚本”的目录,因此我认为它们的其余部分将来 self 的
PYTHONPATH
环境变量。但是,当我转到终端并键入env
时,PYTHONPATH
不作为环境变量存在。我还尝试了import os
然后是os.environ
,但我得到了相同的输出。我真的没有 PYTHONPATH 环境变量吗?我不相信我曾经专门定义过 PYTHONPATH 环境变量,但我假设当我安装新包时它们会自动更改该环境变量。如果我没有 PYTHONPATH,我的 sys.path 是如何填充的?如果我下载新包,如果我没有这个 PYTHONPATH 变量,Python 如何知道在哪里寻找它们?
环境变量如何工作?据我了解,环境变量特定于为其设置的进程,但是,如果我打开多个终端窗口并运行
env
,它们都会显示许多相同的变量,例如,路径
。我知道持久环境变量的文件位置,例如/etc/environment
,其中包含我的PATH
变量。是否可以判断持久环境变量的存储位置?存储新持久环境变量的推荐位置是什么?环境变量实际上如何与 Python 解释器一起工作? Python 解释器查找PYTHONPATH
,但它在具体层面是如何工作的?
最佳答案
一口气解决这么多问题! :)
好吧,我尽量只回答其中的几个问题。
1) 内置模块是 python 版本附带的任何模块。例如 sys 和 os 模块是内置模块。原来如此。
2) 默认情况下,PYTHONPATH 变量在您的系统上不存在。当您启动 python 解释器时,它会按照您描述的方式填充它搜索模块的路径数组。 这是 sys.path 的结果。但是 sys.path 不是环境变量 PYTHONPATH。 如果您在系统中设置了 PYTHONPATH,那么其中包含的所有路径都将包含在 python 解释器用于搜索模块的数组中。
我会把环境变量的答案留给其他人,因为我觉得我不是回答这样问题的合适人选。 不过,我的感觉是,它可能会因系统而异。无论如何...
希望对您有所帮助。
关于python - sys.path() 和 PYTHONPATH 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697517/