【问题标题】:setup.py bdist_egg is not putting files into the eggsetup.py bdist_egg 没有将文件放入 egg
【发布时间】:2014-09-23 08:44:00
【问题描述】:

我对 python 打包有一个令人困惑的问题

我有一个如下所示的 setup.py:

import os

try:
    from setuptools import setup
except ImportError:
    from ez_setup import use_setuptools
    use_setuptools()
    from setuptools import setup

config = {
    "name": "mypackage",
    "version": "3.0.15",
    "include_package_data": True,
    "scripts": ["something.py"],
    "entry_points": {},
    "zip_safe": False,
    }

setup(**config)

还有一个MANIFEST.in,看起来像:

recursive-include mypackage *.*
recursive-exclude mypackage *.pyc .DS_Store

如果我这样做python setup.py sdist,则会写入包含所有正确文件的 tar.gz 文件

如果我执行 python setup.py bdist_egg 然后使用 Stuffit Expander 提取鸡蛋的内容...我看到一个 scripts/something.py 文件,但没有一个 mypackage 源文件。

但是在提取的蛋SOURCES.txt 中列出了mypackage 文件,所以看起来minifest 已经被解析了,只是没有把它们放入蛋中。

我误会/做错了什么?

【问题讨论】:

标签: python setuptools distribute


【解决方案1】:

您需要在package_data entrysetuptools.setup() 中列出要包含在二进制分发中的文件:

config = {
    "name": "mypackage",
    "version": "3.0.15",
    "include_package_data": True,
    "scripts": ["something.py"],
    "entry_points": {},
    "package_data": {'': ['*.ext1', '*.ext2']},
    "zip_safe": False,
    }

【讨论】:

  • The docs say "package_data: 指定附加模式以匹配 MANIFEST.in 可能匹配或不匹配或在源代码管理中找到的文件和目录。" ...据我了解,上述内容不是必需的,它应该使用MANIFEST.in 中的内容
  • @Anentropic:但这些文件不会在安装时从源安装到包中。这里有 2 个阶段:源代码打包,以及从源代码在目标上生成安装。 MANIFEST 控制第一阶段,package_data 第二阶段。
  • @Anentropic:bdist旨在跳过第一步打包第二步的结果。
  • 也许我阅读失败,但我发现文档和过程不清楚且令人困惑
  • @Anentropic:过程不清楚且令人困惑。我也花了一些时间来掌握这些概念。 :-)
猜你喜欢
  • 1970-01-01
  • 2011-04-02
  • 2015-07-21
  • 2011-09-12
  • 1970-01-01
  • 2021-06-27
  • 2015-05-03
  • 1970-01-01
  • 2012-10-05
相关资源
最近更新 更多