【问题标题】:Standard non-code resource location for python packagespython 包的标准非代码资源位置
【发布时间】:2010-10-25 08:40:11
【问题描述】:
这应该是一种常见的情况,但还没有找到任何相关的帖子..
我计划部署一个 Python 库(我猜这同样适用于常规应用程序),它使用一些图像和其他资源文件。此类物品的标准位置是什么?我想,对于项目Foo,选择将是
- 在源存储库中有
resources 目录,然后将文件移动到/usr/share/foo/
- 将资源直接放在
/usr/lib/python-<version>/foo/下的python包中
有什么建议吗?
编辑:按照建议,澄清将运行的主要平台是 Linux。
【问题讨论】:
标签:
python
resources
location
package
shared
【解决方案1】:
这个问题有些不完整,因为正确的答案取决于底层操作系统,因为每个操作系统都有自己的作案手法。在 linux(和大多数基于 unix 的操作系统)中,例如 /usr/share/foo 或 /usr/local/share/foo 将是标准。在 OS X 中你可以做同样的事情,但我认为“/Library/Application Support/Foo”(虽然这通常用于存储设置和诸如此类的东西)将是放置这些东西的地方,尽管如果你正在编写库之后“框架”的想法,所有资源都将包含在 /Library/Frameworks/Foo.Framework" ...另一方面,OS X 上的应用程序应将所有资源保留在 Foo.app 内的 Resources 目录中
【解决方案2】:
我们将非 .py 文件放入/opt/foo/foo-1.2/...
当然,除了由 Apache 提供的静态媒体,它转到 /var/www/html/foo/foo-1.1/media/...
当然,客户特定的配置文件除外。他们去了
/var/opt/customer/foo/...
按照我的理解,它们遵循 Linux 标准。
我们尽量远离/usr/lib/ 和/lib 类型的位置,因为这些位置感觉它们是分布的一部分。我们倾向于 /opt 和 /var,因为它们明显与 linux 发行版目录分开。
【解决方案3】:
standard 位置是您的标准库所在的位置。但是从你所写的内容来看,我并不觉得你会想要你的 python 库。我觉得你应该试试Virtualenv。
如果您不想遇到所有麻烦(嗯,对您来说实际上只是 sudo easy_install virtualenv),您可以尝试将您的 python 库转储到您的 ~/ 的任何目录中并做一些事情沿着
import sys
sys.path.append( '/full/path/to/your/lib/goes/here')
到任何使用您的库的给定应用程序。
请记住,给出的示例仅用于测试目的。对于任何现场直播,我建议您使用distutil。使用示例给出here。