2010-05-08 33 views
2

我从sage运行ipython,并且还使用了一些未安装在我的主目录中的包(lxml,argparse)。因此,我已经结束了与

$ HOME /鼠尾草/ local/lib目录/蟒蛇的$ PYTHONPATH:$ HOME/lib目录/蟒蛇

Python是读取和处理第一易安装。它会发现($ HOME/sage/local/lib/python/site-packages/easy-install.pth)但不是第二个,因此安装在$ HOME/lib/python中的蛋不会添加到路径中。在阅读现成的site.py时,我无法理解为什么它会这样做。

有人能够启发我吗?或者建议如何推动Python读取easy-install.pth文件?

将两者合并为一个.pth文件是目前可行的解决方法,因此此问题主要针对好奇心值。

回答

1

TL; DR:打电话site.addsitedir处理.pth文件


我不知道OS X,但PYTHONPATH和站点包其实都是一种独立的,其中涉及到增强SYS。路径。

Try this: 
    set PYTHONPATH somehow (OS dependent) 
    python -c "import sys; print '\n'.join(sys.path); print sys.exec_prefix; print sys.prefix" 
    python -S -c "import sys; print '\n'.join(sys.path);print sys.exec_prefix; print sys.prefix" 

在我的Linux框,PYTHONPATH是两次输出的一部分 - 尽管-S在第二次运行跳过导入网站模块切换。

现在,site.module所做的实际上是将(sys.exec_prefix,sys.prefix)和操作系统相关前缀(for linux:lib/python2.7/dist-packages)组合起来,检查是否有任何组合是一个现有的目录,如果是这样的话(包括解析.pth文件)

代码是在site.py模块 - getsitepackages()。

def getsitepackages(): 
    """Returns a list containing all global site-packages directories 
    (and possibly site-python). 

    For each directory present in the global ``PREFIXES``, this function 
    will find its `site-packages` subdirectory depending on the system 
    environment, and will return a list of full paths. 
    """ 
    sitepackages = [] 
    seen = set() 

    for prefix in PREFIXES: 
     if not prefix or prefix in seen: 
      continue 
     seen.add(prefix) 

     if sys.platform in ('os2emx', 'riscos'): 
      sitepackages.append(os.path.join(prefix, "Lib", "site-packages")) 
     elif os.sep == '/': 
      sitepackages.append(os.path.join(prefix, "lib", 
             "python" + sys.version[:3], 
             "site-packages")) 
      sitepackages.append(os.path.join(prefix, "lib", "site-python")) 
     else: 
      sitepackages.append(prefix) 
      sitepackages.append(os.path.join(prefix, "lib", "site-packages")) 
     (...) 

该功能最终会返回一个列表,该列表addsitedir功能中的每个元素被称为 - 在那一个,你有逻辑得到.pth文件的工作。

所以长话短说 - 处理.pth文件 - 在您的入门级脚本中调用site.addistedir。你也可以考虑在你的sitecustomize.py中使用它 - 只要确保你的python发行版本没有。

相关问题