gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 00:54:32 40 4
gpt4 key购买 nike

我有一个 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/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com