是否可以使用dist utils(setup.py)作为包数据的一部分来包含子目录?

xam*_*mox 28 python install distutils setup.py

基本上我的python包设置如下:

module
\_examples
  \_folder1
     \_file1.py
     \_file2.py
  \_folder2
    \_file1.py
    \_file2.py
Run Code Online (Sandbox Code Playgroud)

基本上我只想使用:

package_data  = { 
            'module': ['examples/*'],
  },
Run Code Online (Sandbox Code Playgroud)

因为我的项目总是让人们添加示例,我希望从我的应用程序中轻松列出它们.我可以在示例中为任何FILE工作,但不能通过子目录重新编译.这可能吗?

def*_*mat 40

我相信你正在寻找的东西是这样的setup.py,它将递归地找到项目中的任何包,同时确保并将__init__.py文件包含到你想要的每个包的子目录中.

from setuptools import setup, find_packages

setup(name='MySoftware',
      packages=find_packages()
)
Run Code Online (Sandbox Code Playgroud)

  • 这里要小心,因为你可能会意外地包含测试目录等,除非你显式地 `exclude=...` 这些目录。 (3认同)

Sér*_*hin 8

介绍

我遇到了这篇文章,并花了一些时间弄清楚如何将特定的子模块添加到我的包中,所以我将在这里发布我的解决方案。

解决方案

在我的包根文件夹中,我有一个setup.py文件,参见 doc
在这个文件中,我有以下代码:

from setuptools import setup

with open("README.md", "r") as fh:
    long_description = fh.read()

setup(
    name='package name',
    version='0.4.1',
    description='short description',
    long_description=long_description,
    long_description_content_type="text/markdown",
    url='repository url',
    author='My name',
    author_email='my@e.mail',
    license='MIT',
    packages=['PackageName','PackageName.SubModule'],
    zip_safe=False,
    install_requires=[
        'dependecy1',
    ],
    classifiers=[
        'Development Status :: 3 - Alpha',
        'License :: OSI Approved :: MIT License',
        'Programming Language :: Python :: 3.7'
    ]
)

Run Code Online (Sandbox Code Playgroud)

回答这个问题的有趣部分,这里是: packages=['PackageName','PackageName.SubModule'],

通过遵循此语法,您可以将子模块包含到主包分发中。

有关所有其他参数的更多信息可以在文档中找到。


Dav*_*ver 6

您必须为此使用一个MANIFEST.in文件。

我相信你会想要这样的东西:

$ cat MANIFEST.in
递归包含示例/ *.py

  • 哦......好吧,如果你想知道如何用 Python 做到这一点,请在这里发布。我想知道。 (2认同)