python - distutils 相当于 setuptools 的 `find_packages` 是什么? (Python)

标签 python installation setuptools distutils setup.py

我有一个 setup.py 文件,它检查用户是否有 setuptools,如果没有,我就被迫使用 distutils。问题是,为了确保安装了子模块,我使用了 setuptools' find package:

from setuptools import setup, find_packages
packages = find_packages()

然后从那里继续。

但是,我不确定如何使用 distutils 来做到这一点。是否有等效的功能,或者我是否必须手动查找其中包含 __init__.py 的子目录?如果是这样,我是否可以接受要求 setuptools 安装我的包而忘记 distutils

干杯。

最佳答案

使用setuptools是完全可以接受的; PyPI 上的绝大多数包已经这样做了。

如果您想重新发明find_packages() 轮子,那么是的,寻找其中包含__init__.py 文件的目录。这就是setuptools.PackageFinder class做。一个简化的重新实现是:

import os
from distutils.util import convert_path


def find_packages(base_path):
    base_path = convert_path(base_path)
    found = []
    for root, dirs, files in os.walk(base_path, followlinks=True):
        dirs[:] = [d for d in dirs if d[0] != '.' and d not in ('ez_setup', '__pycache__')]
        relpath = os.path.relpath(root, base_path)
        parent = relpath.replace(os.sep, '.').lstrip('.')
        if relpath != '.' and parent not in found:
            # foo.bar package but no foo package, skip
            continue
        for dir in dirs:
            if os.path.isfile(os.path.join(root, dir, '__init__.py')):
                package = '.'.join((parent, dir)) if parent else dir
                found.append(package)
    return found

这会忽略 setuptools.find_packages()includeexclude 参数。

关于python - distutils 相当于 setuptools 的 `find_packages` 是什么? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37350816/

相关文章:

python - pyodbc.尝试打开jet数据库时出错

wix - 安装文件会自动注册吗?

mongodb - E : Unable to locate package mongodb-org

python - 如何在 Python 包中安全地 "fake"模块

python-3.x - “extras_require”必须是一个字典,其值是包含有效项目/版本要求说明符的字符串或字符串列表

python - 使用 re.split 拆分字符串时的额外空元素

python - optparse 处理 ArugmentException

python - 将数组转换为 CSV,包括多行图像

android - 如何在 Android 模拟器中安装 APK 文件?

Python 安装程序,将一个模块安装为另一个模块的子模块?