gpt4 book ai didi

python - 我可以在 setuptools 中定义可选包吗?

转载 作者:太空狗 更新时间:2023-10-29 20:54:37 24 4
gpt4 key购买 nike

目前我的一个包需要一个 JSON 解析器/编码器,并且被设计为使用 simplejson 如果可用回落到 json 模块(在标准库中)如果必要的(因为基准显示 simplejson 更快)。

但是,最近关于在使用 zc.buildout 时是否会安装 simplejson 的问题受到了质疑 - 我相信这与向 github 的转移有关。这让我想知道;是否可以在我的 setup.py 文件中定义可选包,如果不可用,不会停止我的包的安装?

最佳答案

安装时的可选包。

我假设您正在谈论您的 setup.py 脚本。您可以将其更改为:

# mypackage/setup.py

extras = {
'with_simplejson': ['simplejson>=3.5.3']
}

setup(
...
extras_require=extras,
...)

然后您可以执行以下任一操作:

  • pip install mypackage,
  • pip install mypackage[with_simplejson]

后者安装 simplejson>=3.5.3

与其尝试安装所有内容并回退到已知的良好版本,不如您可能想要安装您知道有效的软件包子集。

执行时的可选包。

一旦你有两组不同的包可以安装,你需要以确保您可以使用它们(如果可用)。例如。对于您的 json 导入:

try:
# helpful comment saying this should be faster.
import simplejson as json
except ImportError:
import json

另一个更复杂的例子:

try:
# xml is dangerous
from defusedxml.cElementTree import parse
except ImportError:
try:
# cElementTree is not available in older python
from xml.cElementTree import parse
except ImportError:
from xml.ElementTree import parse

但是你也可以在一些包中找到这种模式:

try:
optional_package = None
import optional.package as optional_package
except ImportError:
pass

...

if optional_package:
# do addtional behavior

关于python - 我可以在 setuptools 中定义可选包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11240285/

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