Python setup.py如何在egg中包含.json文件

19
我希望打包python egg文件时也能包含.json文件。
例如:boto包含endpoints.json文件。但是当我运行python setup.py bdist_egg时,它不会将json文件包含在egg中。我该如何在egg中包含Json文件?
我应该如何在egg中包含*.json文件?
以下是setup.py代码。
from setuptools import setup, find_packages, Extension

setup(
  name='X-py-backend',
  version='tip',
  description='X Python backend tools',
  author='meme',
  packages=find_packages('python'),
  package_dir={'': 'python'},
  data_files=[('boto', ['python/boto/endpoints.json'])],
  namespace_packages = ['br'],
  zip_safe=True,
)

setup(
  name='X-py-backend',
  version='tip',
  packages=find_packages('protobuf/target/python'),
  package_dir={'': 'protobuf/target/python'},
  namespace_packages = ['br'],
  zip_safe=True,
)
2个回答

20
你只需要在data_files参数中列出文件即可。以下是示例。
setup(
  name='X-py-backend',
  version='tip',
  description='XXX Python backend tools',
  author='meme',
  packages=find_packages('python'),
  package_dir={'': 'python'},
  data_files=[('boto', ['boto/*.json'])]
  namespace_packages = ['br'],
  zip_safe=True
)

您可以在此处查看详细信息。 https://docs.python.org/2/distutils/setupscript.html#installing-additional-files

另一种方法是使用MANIFEST.in文件。您需要在项目根目录中创建一个MANIFEST.in文件。以下是示例。

include python/boto/endpoints.json

请访问此处以获取更多信息。https://docs.python.org/2/distutils/sourcedist.html#manifest-template


1
这个不起作用。在进行此更改后,我运行了“python setup.py bdist_egg”。当我解压缩.egg文件时,我没有在boto包内找到“endpoints.json”文件。我是否漏掉了什么? - Bourne
1
请分享您编辑过的setup.py文件。我会仔细研究一下。 - Edwin Lunando

13

这对我来说有效。

setup.py

from setuptools import setup, find_packages

setup(
    name="clean",
    version="0.1",
    description="Clean package",
    packages=find_packages() + ['config'],
    include_package_data=True
)

MANIFEST.in:

recursive-include config *

在项目根目录下有一个配置文件,其中包含大量的json文件。

希望这可以帮到您。


1
我已经使用了data_files并正确地包含了所有内容,包括glob等,但是*.json文件没有被包含。在看到您的帖子中的include_package_data关键字后,我使用了它(尽管我认为它只适用于package_data),然后一切都正确地打包了,而不需要使用MANIFEST.in!谢谢! - Peter Badida
我也做了这个,但是我必须包含 MANIFEST.in 文件,不像 @PeterBadida。 - Gabe Morris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接