我维护一个项目,我将其打包到一个shiv包中,并在工作中分发。我在shiv包中包含了所有必需的包依赖项,这包括numpy和PIL。假设每个人都在使用Windows和python 3.6+是安全的。
numpy和PIL的C-扩展似乎没有和其他软件包一起出现,因为如果我将pyz提供给在他们的环境中已经拥有与zipapp所用的版本相同的软件包的人,它的工作原理是正常的,但是如果它们有任何其他版本,它就无法加载这些扩展,而是按预期从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-extensions error有关
发布于 2022-10-21 13:02:38
我终于找到了我的问题的原因。我使用Anaconda来管理我的python环境,在创建shiv包时,"path_to_site-packages"文件夹就是Anaconda创建的文件夹。我无法确切解释为什么会出现这种情况,但我的假设是,Anaconda管理C库的存储位置,而不是pip。
解决我的问题的方法是,我创建了我自己的专用站点包文件夹,用于pip installing安装shiv -- --target对该文件夹所需的所有东西。一旦我这样做,从那个文件夹构建shiv包就完全解决了缺少的C库问题。我希望这能帮上忙!
https://stackoverflow.com/questions/73449828
复制相似问题