无法在 shiv 包中加载 c 扩展



我维护一个项目,我将其捆绑到一个 shiv 包中并在工作中分发。我已经将所有必要的包依赖项包含在 shiv 包中,这包括 numpy 和 PIL。可以安全地假设每个人都在使用Windows和python 3.6+。

似乎 numpy 和 PIL 的 C 扩展与其他软件包没有附带,因为如果我将 pyz 提供给已经在其环境中拥有与 zipapp 构建的软件包相同版本的人,它可以按预期工作,但如果他们有任何其他版本,它无法加载这些扩展,但确实从正如预期的那样。我还可以从压缩的站点包中排除 numpy 和 PIL,但这违背了 zipapp 的目的,因为它依赖于我无法信任更新的用户环境。

我正在用shiv --compressed --compile-pyc --site-packages "path_to_site-packages" -o my_output.pyz -e the_package:__run_main构建我的 shiv 包

通过阅读 shiv 文档,我认为--compile-pyc是丢失的键,但使用此或不使用此键返回相同的结果。任何建议将不胜感激

似乎这可能与这个未回答的问题有关 Python - Pyinstaller Numpy C 扩展错误

我终于找到了问题的原因。我正在使用 Anaconda 来管理我的 python 环境,在创建 shiv 包时"path_to_site-packages"文件夹是 Anaconda 创建的文件夹。我无法确切解释为什么会出现这个问题,但我的假设是 Anaconda 管理 C 库的存储位置与 pip 不同。

当我为shiv安装制作自己的专用站点包文件夹时,我的问题得到了解决,pip installing我需要的所有内容--target到该文件夹。一旦我这样做了,从该文件夹构建 shiv 包完全解决了丢失的 C 库问题。我希望这对某人有所帮助!

最新更新