【发布时间】:2010-10-18 18:04:21
【问题描述】:
我正在修改我们的构建脚本以基于the wonderful Waf tool(我确实使用 SCons 很长时间了,但它只是方式太慢了)。
无论如何,我遇到了以下情况,但我找不到解决办法:
- 我的产品依赖于许多以前构建的 egg 文件。
- 我正在尝试使用 PyInstaller 打包产品作为构建过程的一部分。
- 我先构建依赖项。
- 接下来我要运行 PyInstaller 来打包依赖于我构建的鸡蛋的产品。我需要 PyInstaller 能够在打包过程中加载这些 egg 文件。
这听起来很简单:您计算出PYTHONPATH 应该是什么,构造sys.environ 的副本,正确设置变量,然后使用subprocess.Popen 调用PyInstaller 脚本,将先前配置的环境作为env 参数传递。
问题在于,如果您添加的鸡蛋是打包为 zipsafe 的扩展模块,那么单独设置 PYTHONPATH 似乎是不够的。在这种情况下,事实证明嵌入式库无法导入。
如果我解压缩鸡蛋(将目录重命名为 .egg),我可以在没有进一步设置的情况下导入它们,但在这种情况下这不是我想要的。
我还可以通过执行以下操作从子外壳中导入鸡蛋:
- 将
PYTHONPATH设置为包含您要导入的egg的目录(而不是egg本身的路径) - 加载 python shell 并使用
pkg_resources.require定位鸡蛋。
完成此操作后,鸡蛋会正常加载。同样,这不切实际,因为我需要能够以准备好从关闭导入这些鸡蛋的方式运行我的 python shell。
肮脏的选择是在调用真正的目标脚本之前输出一个执行上述操作的包装脚本,但这似乎是错误的做法:必须有更好的方法来做到这一点。
【问题讨论】:
标签: python setuptools egg waf build-tools