我怎么可以做一个Python扩展模块包装为一个鸡蛋可装载的不安?
-
09-09-2019 - |
题
我在中间的改造我们的建立脚本基础, 美妙的Waf工具 (我有没有使用SCons年龄,但它只是 方式 太慢)。
无论如何,我已经打下述情况和我无法找到解决它:
- 我有一种产品,取决于一定数量的以前建造的蛋文件。
- 我想包装的产品使用 PyInstaller 作为一部分的建立过程。
- 我建立依赖关系的第一个。
- 接下来我要运行PyInstaller打包产品,这取决于鸡蛋我建。我需要PyInstaller能够载的那些蛋文件作为它的一部分的包装进程。
这听起来很简单:你的工作是什么 PYTHONPATH
应该的,构建一个副本 sys.environ
设定的变量是否正确,然后援引PyInstaller脚本用 subprocess.Popen
通过预先配置环境中的环境参数。
问题是,设定 PYTHONPATH
单独似乎并不是足够的如果蛋你加入是扩展的模块,该模块包装为zipsafe.在这种情况下,事实证明,嵌入图书馆不能进口。
如果我压缩解压的鸡蛋(重新命名目录。鸡蛋),我可以进他们没有进一步的设置,但是这不是我想要什么在这种情况。
我还可以得到鸡蛋进口从一个子shell通过以下:
- 设置
PYTHONPATH
到目录,包含蛋你想要进口(不道路的鸡蛋本身) - 装载python壳和使用
pkg_resources.require
找到鸡蛋。
一旦这项工作已经完成,蛋载荷为正常的。再次,这是不实际的,因为我需要能够执行我python壳的方式在那里,它已准备好进口这些鸡蛋的关闭。
肮脏的选择将是输的包装的脚本了上述行动之前呼唤真正的目标脚本,但这似乎是错误的事情要做到:必须有一个更好的方式来做到这一点。
解决方案
嘿,我觉得这是我的错该问题似乎已经得 zipsafe
标志在setup.py 延长封装置假,这似乎会影响你的能力这样看待。
现在,我已经设置到真正的我可以进口鸡蛋的文件,仅仅通过增加每一个到的 PYTHONPATH
.
我希望别人认为这个答案可用一天!
其他提示
虽然你有一个解决方案,你总是可以尝试"虚拟环境",创建了一个虚拟环境中的蟒蛇在这里你可以安装和测试Python包不搞核心系统蟒蛇:
不隶属于 StackOverflow