【问题标题】:Where are 'package data' files?“包数据”文件在哪里?
【发布时间】:2012-03-11 11:56:03
【问题描述】:

我用 distutils 创建了包,包括包数据。 当我查看我的包的 tar.gz 时,我看到了预期的文件,但是在包安装后(通过 pip 或“python setup.py install”),没有任何包数据。仅包含 python 脚本。我的setup.py 是:

# py3.3
#from packaging.core import setup
# py3.2
from distutils.core import setup

setup(
    name = 'mypkg',
    version = '0.7dev',
    author = 'Projekt Alef',
    author_email = 'tymoteusz.jankowski@gmail.com',
    packages = [
        'my_pkg',
        'my_pkg/tests',
        'my_pkg/plugins',
    ],
    #scritps=['bin/setup.sh',],
)

【问题讨论】:

标签: python virtualenv packaging pip distutils


【解决方案1】:

要安装的包数据应作为package_data={} 字典传递给setup() 函数。每个字典都给出了要安装的模块(包)和一个模式列表,以查找要从/与它一起安装的数据文件,例如:

package_data = {
    'exceptional_middleware': [ 'templates/http_responses/*.html' ],
}

此外,您可能不想安装您的测试(只需从 packages 列表中删除 pkg/tests)。

【讨论】:

  • MANIFEST.in 怎么样?我认为 MANIFEST.in 就足够了。所有更需要的“包数据”文件都包含在我的“python setup.py sdist”输出中。问题是安装后的包(包含我想要的所有文件)丢失了“包数据”文件。 O_o
  • 在 sdist 中有一些东西意味着它将分发给任何想要安装它的人,不是它会被安装。我不记得 MANIFEST.in 与 package_data 的详细信息,并且 python 文档站点现在已关闭。看看我在这里的一个例子,两者都有,这看起来很荒谬但显然有效。
  • 你是 100% 正确的。 Manifest.in 还不够……为了实现这一点,必须将 package_data var 放在 setup 函数中。 O_o 谢谢:)
  • 这取决于你的 Python 版本。在 2.7 中,distutils 已修复,因此 package_data 中包含的文件不需要添加到 MANIFEST.in。
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 2011-05-19
  • 1970-01-01
  • 2023-04-10
  • 2015-06-19
  • 1970-01-01
  • 2010-11-09
  • 2011-09-17
相关资源
最近更新 更多