【问题标题】:How exactly is Python2's sys.path set in Windows?Python2 的 sys.path 在 Windows 中究竟是如何设置的?
【发布时间】:2011-10-05 15:36:01
【问题描述】:

Python documentation 表示 sys.path 是“从环境变量 PYTHONPATH 初始化,加上依赖于安装的默认值。”

但是对于 Windows,究竟什么是“依赖于安装的默认设置”?

(我知道这可能取决于 python 的编译方式,但如果我只有二进制文件,有没有办法弄清楚默认的sys.path 是如何构造的?)

说明: 我不是在问“我的sys.path 是什么?”。我想知道“Python 是如何构造 sys.path 的?”文档说sys.path 是用sys.path[0] 作为脚本的当前目录构造的,加上Python 在PYTHONPATH 环境变量中找到的任何内容,以及一些依赖于安装的巫术。那么这个神秘的巫术部分是什么?

【问题讨论】:

    标签: python windows path pythonpath


    【解决方案1】:

    最好的方法是检查你的 python 解释器中的实际路径:

    $ python
    Python 2.6.6 (r266:84297, Aug 24 2010, 18:13:38) [MSC v.1500 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import pprint, sys
    >>> pprint.pprint(sys.path)
    ['',
     'c:\\Python26\\lib\\site-packages\\setuptools-0.6c11-py2.6.egg',
     'c:\\Python26\\lib\\site-packages\\nose-1.0.0-py2.6.egg',
     'C:\\Windows\\system32\\python26.zip',
     'c:\\Python26\\DLLs',
     'c:\\Python26\\lib',
     'c:\\Python26\\lib\\plat-win',
     'c:\\Python26\\lib\\lib-tk',
     'c:\\Python26',
     'c:\\Python26\\lib\\site-packages',
     'c:\\Python26\\lib\\site-packages\\win32',
     'c:\\Python26\\lib\\site-packages\\win32\\lib',
     'c:\\Python26\\lib\\site-packages\\Pythonwin',
     'c:\\Python26\\lib\\site-packages\\wx-2.8-msw-unicode']
    

    【讨论】:

      【解决方案2】:

      您是否尝试过导入sys,然后打印sys.path?在我的 Windows 7 系统上,它似乎包含以下内容:

      '', 
      'C:\\Windows\\system32\\python26.zip', 
      'c:\\python26\\DLLs', 
      'c:\\python26\\lib', 
      'c:\\python26\\lib\\plat-win', 
      'c:\\python26\\lib\\lib-tk', 
      'c:\\python26', 
      'c:\\python26\\lib\\site-packages', 
      'c:\\python26\\lib\\site-packages\\win32', 
      'c:\\python26\\lib\\site-packages\\win32\\lib', 
      'c:\\python26\\lib\\site-packages\\Pythonwin', 
      'c:\\python26\\lib\\site-packages\\wx-2.8-msw-unicode'
      

      这对应于我安装的包,因为我不需要设置自定义 PYTHONPATH 变量。

      【讨论】:

        【解决方案3】:

        似乎Praveen GollakotaTroubleshooting python sys.path 上有很好的信息(在此处重新粘贴:)

        • 添加的第一个 C:\WINNT\system32\python27.zip(更多详细信息在PEP273)。

        • 添加的下一个来自 Windows 注册表中的条目。条目C:\Python27\DLLs;C:\Python27\lib; C:\Python27\lib\plat-win; C:\Python27\lib\lib-tk 来自注册表中的HOT_KEY_LOCAL_USER/Python/PythonCore/2.7/PythonPath。 Python 源代码 cmets 的更多详细信息在这里 http://svn.python.org/projects/python/trunk/PC/getpathp.c (这些条目对我来说是最难理解的,直到我找到上面的链接)。

        • 接下来,如site package documentation 中所述,sys.path 是从sys.prefixsys.exec_prefix 构建的。在我的电脑上,它们都指向C:\Python27。默认情况下,它无论如何都会搜索lib/site-packages。所以现在C:\Python27; C:\Python27\lib\site-packages 条目被附加到上面的列表中。

        • 接下来,它会按字母顺序搜索每个 .pth 文件。我的站点包中有easy_install.pthpywin32.pthsetuptools.pth。这就是事情开始变得奇怪的地方。如果.pth 文件中的条目只是目录位置,那将很简单。它们只会逐行附加到sys.path。然而easy_install.pth 有一些python 代码导致easy_install.pth 中列出的条目将包列表添加到sys.path 列表的开头。

        • 之后pywin32.pthsetuptools.pth 中的目录条目按预期添加到sys.path 列表的末尾。

        注意:虽然上述讨论适用于 Windows,但即使在 Mac 等上也是如此。在 Mac 上,它只是添加了不同的操作系统默认值,如 darwin 等,然后开始查看site-packages 目录中的.pth 文件。

        【讨论】:

          猜你喜欢
          • 2012-09-03
          • 2023-04-01
          • 2013-08-20
          • 2019-08-25
          • 2018-04-26
          • 2017-01-10
          • 2012-03-06
          • 1970-01-01
          相关资源
          最近更新 更多