0

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

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

4

1 回答 1

2

如果我将 PYTHONPATH 设置为包含该前缀的站点包目录,则会将 egg 添加到 sys.path 并且可以导入模块。

添加一些目录PYTHONPATH不会触发其中的.pth-files 处理。因此,您的带拉链的鸡蛋不会在sys.path. 只有在鸡蛋本身在sys.path(父目录不够)时,您才能从鸡蛋中导入模块。

但是,如果我从脚本中使用前缀的站点包目录运行 site.addsitedir,则不会将鸡蛋添加到 sys.path 并且模块导入失败。

site.addsitedir().pth如果尚未看到该目录,则触发对 -files 的处理,因此它应该可以工作。

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

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

于 2012-07-20T09:35:05.043 回答