0

我正在修改我们的构建脚本以基于出色的 Waf 工具(我确实使用 SCons 很长时间了,但它太慢了)

无论如何,我遇到了以下情况,我找不到解决办法:

  • 我有一个依赖于许多先前构建的 egg 文件的产品。
  • 我正在尝试使用PyInstaller打包产品作为构建过程的一部分。
  • 我首先构建依赖项。
  • 接下来我要运行 PyInstaller 来打包依赖于我构建的鸡蛋的产品。我需要 PyInstaller 能够在打包过程中加载这些 egg 文件。

这听起来很简单:您计算出PYTHONPATH应该是什么,构建sys.environ正确设置变量的副本,然后使用subprocess.Popen传递先前配置的环境作为 env 参数来调用 PyInstaller 脚本。

问题是,PYTHONPATH如果您添加的鸡蛋是打包为 zipsafe 的扩展模块,那么单独设置似乎是不够的。在这种情况下,事实证明嵌入式库无法导入。

如果我解压缩鸡蛋(将目录重命名为 .egg),我可以在没有进一步设置的情况下导入它们,但在这种情况下这不是我想要的。

我还可以通过执行以下操作从子外壳中导入鸡蛋:

  • 设置PYTHONPATH为包含您要导入的鸡蛋的目录(不是鸡蛋本身的路径)
  • 加载一个 python shell 并使用pkg_resources.require它来定位鸡蛋。

完成此操作后,鸡蛋将正常加载。同样,这不切实际,因为我需要能够以准备好从关闭导入这些鸡蛋的方式运行我的 python shell。

肮脏的选择是在调用真正的目标脚本之前输出一个执行上述操作的包装脚本,但这似乎是错误的做法:必须有更好的方法来做到这一点。

4

2 回答 2

3

呵呵,我觉得这是我的错。问题似乎是zipsafe扩展包的 setup.py 中的标志设置为 False,这似乎完全影响了您对其进行处理的能力。

现在我已将其设置为 True,我可以导入 egg 文件,只需将每个文件添加到PYTHONPATH.

我希望其他人有一天会发现这个答案有用!

于 2009-04-10T12:32:33.910 回答
1

尽管您有解决方案,但您始终可以尝试“virtualenv”,它会创建一个 python 虚拟环境,您可以在其中安装和测试 Python 包,而不会弄乱核心系统 python:

http://pypi.python.org/pypi/virtualenv

于 2009-04-10T18:32:32.547 回答