指定Python包中的建议包



我希望在新的python包中为python包添加一个条件依赖项。如果包已经安装,那么我们希望允许使用特性。否则,我们希望忽略该包。使用依赖项的原因是某些包可能不会被某些用户使用,因此,我们希望避免安装它们。

阅读:

https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/

只有指定硬需求的选项,例如install_requires。是否有一种方法来指定一个软依赖类似于RSuggest字段在DESCRIPTION文件?

否则,我认为安全保护函数调用将需要软错误,如下所示:

def demo_function():
if load_package("numpy", "np"):
return np.array([1])
return [1]

,其中load_package()使用以下辅助函数:

def check_installed(name):
import importlib.util

spec = importlib.util.find_spec(name)
if spec is None:
return False

return True

def load_package(name, alias, soft_error = True):
import importlib.util

if check_installed(name):
module = importlib.util.module_from_spec(spec)
if alias is None:
alias = name
sys.modules[alias] = module
spec.loader.exec_module(module)
else: 
if hard_error:
return False
else: 
raise AssertionError(f"Please install `{name}` package to use this function.")

return True

您可以在导入时使用try:,或者使用contextlib。要检查导入是否成功,请查看sys.modules:

from contextlib import suppress
with suppress(ModuleNotFoundError):
# noinspection PyUnresolvedReferences
import numpy
import sys
if 'numpy' in sys.modules:
print("numpy was imported")

相关内容

  • 没有找到相关文章

最新更新