我将一个由distutils打包的python模块放入一个安装在自定义前缀中的压缩蛋中。如果我将PYTHONPATH设置为包含该前缀的site-packages目录,则将egg添加到sys.path并导入模块。但是,如果我在脚本中运行带有前缀的site-packages目录的site.addsitedir,则不会将egg添加到sys.path并且模块导入失败。在这两种情况下,模块的site-packages目录最终都在sys.path。
中这是预期的行为吗?如果是这样,有没有办法让Python在没有设置env var的情况下处理给定目录中的.pth文件?
答案 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.path
:sys.path.insert(0, '/path/to/the.egg')