gpt4 book ai didi

python - 一般来说,我应该编写代码体的多个版本,以防用户丢失软件包吗?

转载 作者:行者123 更新时间:2023-12-01 03:27:39 24 4
gpt4 key购买 nike

假设我正在构建一个 Python 程序,一开始我导入了两个模块 - 默认情况下包含在 python 库中的 somethingsomethingElse强>,但事实并非如此。

我有两个几乎相同的函数,一个可以在没有somethingElse的情况下工作,但还有一个版本可以更好地使用它。虽然理想情况下,人们只需要安装所需的依赖项,但我希望机器/系统与 somethingElse 包不兼容的用户可以访问。示例:

try:
import something
import somethingElse
except ImportError:
import something

if not ImportError:
versionA()

else:
versionB()

这是一个好的做法,还是有更好的方法来解决这个问题?

谢谢!

最佳答案

一般来说,最好有一个 pip requirements.txt 文件或 setup.py 来处理依赖项。但是,如果您出于某种原因需要这样做,我认为最好有一个类作为任一库的包装器,并且消费者不关心导入了哪个库。例如,在你的模块中你会有类似的内容:

try:
import better_lib

class LibAPI(object):
root_lib = better_lib
def fizzle(self, *args, **kwargs):
return self.root_lib.better_fizzle(*args, **kwargs)
def mundun(self, n, x, **kwargs):
floof = (n, x)
return self.root_lib.better_mundun(floof, **kwargs)

except ImportError:
import worse_lib

class LibAPI(object):
root_lib = worse_lib
def fizzle(self, x, y, z, **kwargs):
fizz = self.root_lib.worse_fizz(x, y)
return self.root_lib.izzle(fizz, z, **kwargs)
def mundun(self, *args, **kwargs):
return self.root_lib.worse_mundun(*args, **kwargs)

lib_api = LibAPI()

这样,即使核心库可能完全不同,您也可以在代码中以相同的方式与它们交互(lib_api.fizzle()lib_api.mundun()),因为您已将所有差异包装在一个统一的包装器中。最好将所有这些都放在一个位置,而不是检查在代码中遍布的各种位置导入了哪个库。如果确实需要,您仍然可以通过检查 lib_api.root_lib 是什么来内省(introspection)使用了哪个库。

关于python - 一般来说,我应该编写代码体的多个版本,以防用户丢失软件包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41271641/

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