我有一个项目需要一些DevOps TLC,所以我最终构建了我的安装脚本。这最终将是一个可由pip在本地安装的包,但最终可能不会出现在PyPI中
它对名为u2py
的模块有依赖关系It is this package,为U2数据库操作创建,not this package,为。。。还有别的。我想要的只有第三方供应商(Rocket)安装过,我不想要的是PyPI
在这种情况下,我的软件包的预期行为应该是什么?我将在自述文件中包含一个关于此的简介,但这是否足够
我曾经考虑过抛出一个异常来识别错误的包何时出现,但这让我觉得很奇怪。似乎最具python风格的事情是不要将其添加到我的安装脚本中,而盲目地假设import u2py
会产生一个我可以使用的模块。如果它像鸭子一样呱呱叫,像鸭子一样解析DynArray
,像鸭子一样解析call()
sSUBROUTINE
,那么它就是鸭子,对吗?否则,如果出现错误,用户将直接去实际阅读文档
我已经看过了,但不确定他们是否适用于这里
理想情况下,在安装时(在
setup.py
)会有一种方法来检测包是否安装到“u2环境”中,如果是这种情况,安装可能会失败(并显示相应的错误消息)使用此解决方案,您将无法提供内置发行版(wheels),因为它们在安装时不执行
setup.py
文件,但只发布源发行版就可以了在这种情况下,如果Python项目有名称空间(
pip install com.rocket.u2py
和import com.rocket.u2py as u2py
),那就更好了我认为有两个方面需要考虑:在项目层面,在包层面
1.项目(分发包)
我认为将替代下载源强加于项目的最终用户是一种不好的做法。默认情况下,pip应该从PyPI下载,除非用户自己决定(通过
find-links
或类似选项,您可以在文档中指示用户这样做)因为这是一个利基依赖,我想我不会把它添加到
install_requires
。我假设您项目的最终用户已经知道依赖关系,并且能够自己直接安装它另外,我不认为在安装时可以可靠地检查是否安装了正确的依赖项,因为
setup.py
并不总是运行(覆盖bdist_wheel
命令会有所帮助,但可能不是100%有效)2.包装(可进口包装)
我不确定是否需要采取一些具体行动。由于模块或函数不可导入,代码很可能迟早会自然失败。也许可以,也许
但是,检测是否安装了依赖项(而且是正确的依赖项)可能相对容易,并且可以提供更好的用户体验。检查某些特定模块或功能是否可导入。或者检查元数据(
import importlib_metadata; importlib_metadata.distribution('u2py').metadata['Author']
)在申请的情况下,我会尝试尽快优雅地失败。对于库,我会尝试找到一个策略点来进行检查,并引发一个自定义异常(
CannotFindU2pyException
)链接:
您可以使用setuptools(需要pip版本18.1或更高版本)在
install_requires
中指定包的urlRequirement specifiers
范例
setup.py
和do
python setup.py install
也
参考号
相关问题 更多 >
编程相关推荐