【发布时间】: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 你们似乎在聊天中发现了这一点。不过,遗憾的是,我们其他提出这个问题的人都被抛弃了。想写一个描述您的完整解决方案的答案,以及为什么每个部分都是必要的?你可以接受,其他人可以投票。