setup.py install_requires 内置包:包括还是省略?

setup.py install_requires built-in package: include or omit?

我有一个我制作的 python 包。它在多个地方使用 datetime。我注意到在全新的 python 安装中,我可以毫无问题地执行 import datetime。因此,python 内置了 datetime

如果我将 datetime 作为 install_requires 中的项目之一放入 setup.py,它似乎下载了 pypi 包 datetime,即使内置包已经可用。在某些情况下,例如 multiprocessing,pypi 包可能需要额外的东西(在 pypimultiprocessing 的情况下,它需要 gcc-c++ 在我的 CentOS 上安装,而内置multiprocessing 没有这样的要求)。

问题:

it appears to download the pypi package datetime

不完全是。它下载名为 DateTime 的包,其顶级名称为 DateTime,而不是 datetime.

Should I include builtin packages under install_requires if I use them?

没有。 install_requires 旨在列出外部的第 3 方包,而不是内置包,不是标准包。

Is there an easier way of seeing which packages are builtin and which aren't?

一个是datetime,另一个是DateTime.

Who owns the pypi versions of these builtin packages?

页面https://pypi.org/project/DateTime/ name the author: Zope Foundation and Contributors. And list the current maintainers. The homepage listed is https://github.com/zopefoundation/DateTime

Is there an easier way of seeing which packages are builtin and which aren't > other than creating a new virtualenv and trying to import things?

似乎没有内置的方法来执行此操作,但与其尝试导入内容,您可以 运行 pkgutil.iter_modules() 获得具有可导入模块的可迭代对象,它在新的 virtualenv 上应该只给你内置模块。然后您可以将该列表与您自己的已用软件包列表进行比较。

例如,在一个新的虚拟环境中:

import pkgutil
fulldeps = ['datetime', 'multiprocessing', 'tensorflow']
builtin_modules = [module.name for module in pkgutil.iter_modules()]
real_deps = [module for module in fulldeps if module not in builtin_modules]

print(real_deps)
['tensorflow']