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
没有这样的要求)。
问题:
- 如果我使用它们,我应该在
install_requires
下包含内置包吗?
- 除了创建新的
virtualenv
并尝试导入东西之外,是否有更简单的方法来查看哪些包是内置的,哪些不是?
- 谁拥有这些内置包的 pypi 版本?是某个随机的人,还是 python 核心团队提供的这些经过审查的软件包? (我知道随机的人可以提供任意的包,但我不知道对于 pypi 上也可用的内置包是否如此。)
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']
我有一个我制作的 python 包。它在多个地方使用 datetime
。我注意到在全新的 python 安装中,我可以毫无问题地执行 import datetime
。因此,python 内置了 datetime
。
如果我将 datetime
作为 install_requires
中的项目之一放入 setup.py,它似乎下载了 pypi 包 datetime
,即使内置包已经可用。在某些情况下,例如 multiprocessing
,pypi 包可能需要额外的东西(在 pypimultiprocessing
的情况下,它需要 gcc-c++
在我的 CentOS 上安装,而内置multiprocessing
没有这样的要求)。
问题:
- 如果我使用它们,我应该在
install_requires
下包含内置包吗? - 除了创建新的
virtualenv
并尝试导入东西之外,是否有更简单的方法来查看哪些包是内置的,哪些不是? - 谁拥有这些内置包的 pypi 版本?是某个随机的人,还是 python 核心团队提供的这些经过审查的软件包? (我知道随机的人可以提供任意的包,但我不知道对于 pypi 上也可用的内置包是否如此。)
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']