site.addsitedir不会将egg添加到sys.path

时间:2012-07-19 14:11:03

标签: python pythonpath

我将一个由distutils打包的python模块放入一个安装在自定义前缀中的压缩蛋中。如果我将PYTHONPATH设置为包含该前缀的site-packages目录,则将egg添加到sys.path并导入模块。但是,如果我在脚本中运行带有前缀的site-packages目录的site.addsitedir,则不会将egg添加到sys.path并且模块导入失败。在这两种情况下,模块的site-packages目录最终都在sys.path。

这是预期的行为吗?如果是这样,有没有办法让Python在没有设置env var的情况下处理给定目录中的.pth文件?

1 个答案:

答案 0 :(得分:2)

  

如果我将PYTHONPATH设置为包含该前缀的site-packages目录,则将egg添加到sys.path并导入模块。

PYTHONPATH添加一些目录不会触发.pth - 文件的处理。因此,您的拉链蛋不会在sys.path。只有当蛋本身位于sys.path时(父目录不够),您才可以从蛋中导入模块。

  

但是,如果我在脚本中运行带有前缀的site-packages目录的site.addsitedir,则不会将egg添加到sys.path并且模块导入失败。

site.addsitedir()触发.pth - 文件的处理,如果目录尚未显示,那么它应该可以正常工作。

您描述的行为与应该发生的行为相反。

作为一种解决方法,您可以手动将鸡蛋添加到sys.pathsys.path.insert(0, '/path/to/the.egg')