python - sys.path() 和 PYTHONPATH 问题

标签 python python-2.7 environment-variables

我一直在学习 Python,我在 2.7.3 中工作,我正在尝试理解 import 语句。

  1. documentation表示当您尝试导入模块时,解释器将首先搜索其中一个内置模块。

    内置模块是什么意思?

  2. 然后,文档说解释器在 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 如何知道在哪里寻找它们?

  3. 环境变量如何工作?据我了解,环境变量特定于为其设置的进程,但是,如果我打开多个终端窗口并运行 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/

相关文章:

c++ - win7 64 上使用 Python 2.7.9 的 pyproj 给出 "Unable to find vcvarsall.bat"

python - 这些变量是什么?

python - 是否有所有可用的 wxPython 小部件的描述?

python - gettext 中断 pytest 测试

python - 在文件中查找字符串的最快方法

Python 单元测试未运行

Kubernetes Secrets Volumes vs 环境变量

linux - JAVA_HOME 设置不正确。如何重置?

c# - 如何在 C# 中的 AWS Lambda 项目中设置和获取环境变量

python - 如何阅读python字符串格式化语法?