【问题标题】:Including external binaries in python package在 python 包中包含外部二进制文件
【发布时间】:2014-08-29 20:03:47
【问题描述】:

我有一个 python 模块,它基本上是一个用于外部二进制文件(非 python)的大包装器(除了它之外还有更多的东西)。我想在我的代码中包含二进制文件(osx 为 1 个二进制文件,linux 为 1 个二进制文件)。我的 setup.py 目前有以下内容:

package_data={'packagename': ['lib/app-osx/*', 'lib/app-linux/*', 'lib/*.awk']},

文件位于:

/packagename
 /lib
  script.awk
  /app-osx/
    app
  /app-linux
    app

我似乎找不到它们的安装位置,如果有的话?有这方面的约定吗?我显然不能为此使用依赖项:(

然后,在 python 脚本中找到它们的位置的最佳方法是什么?

谢谢

【问题讨论】:

  • 使用 resource manager API 从您的 Egg 访问资源。如果您需要二进制文件的文件系统路径,您可能需要使用resource_filename。类似于import pkg_resources; path = pkg_resources.resource_filename('packagename', 'foo.bin')(未经测试)。
  • 谢谢。我的 setup.py 写对了吗?
  • 据我所知,是的,包资源的声明似乎是正确的。
  • 如果它不起作用,请先尝试resource_stream() 之类的东西 - 它应该准确地告诉您它在什么路径中寻找资源(resource_filename 只是构建路径,无论该资源是否存在与否)。
  • @GarethPrice 你们似乎在聊天中发现了这一点。不过,遗憾的是,我们其他提出这个问题的人都被抛弃了。想写一个描述您的完整解决方案的答案,以及为什么每个部分都是必要的?你可以接受,其他人可以投票。

标签: python setup.py


【解决方案1】:

我认为MANIFEST.in可以解决所有附加到python包的附加文件的问题。

recursive-include lib/app-osx/*
recursive-include lib/app-linux/*
recursive-include lib/*.awk

【讨论】:

    【解决方案2】:

    在 Jonathon 的提示下,我通过聊天找到了 Lukas 提供给我的解决方案。解决方案只是将以下内容添加到 setup.py:

    zip_safe=False
    

    【讨论】:

    • 谢谢!如果您提供完整的setup.py,并解释为什么zip_safe=False 解决了您的问题,我会很乐意为这个问题和答案投票。
    猜你喜欢
    • 2012-05-04
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多